AWS运营MCP服务器
FastMCP服务器,用于跨多个帐户的AWS操作。通过AssumpeRole为Secrets Manager、Route53、S3和其他AWS服务提供全面的SRE工具,并支持多帐户。
特性
秘密经理运营
- 创建秘密 带有标签和描述
- 检索机密值 支持版本
- 更新机密 及其元数据
- 删除机密 使用恢复窗口或强制删除
- 列出秘密 具有过滤和分页功能
- 描述秘密 (无值元数据)
- 还原已删除的机密 在恢复窗口内
- 标记/取消标记秘密 为了组织
多账户支持
- 关心角色 基于身份验证的跨帐户访问(生产)
- AWS配置文件 支持本地开发(~/.aws/credentials)
- 按请求身份验证 -每次工具调用提供的角色或个人资料
- 预配置的帐户映射 通过环境变量
- 没有存储凭据 -最高安全性
未来服务(可扩展架构)
- Route53:DNS记录管理
- S3:桶和对象操作
- EC2:实例操作
- IAM:角色/策略管理
建筑
多帐户身份验证
┌──────────────────────────────────────────────────────────────┐
│ MCP Server (EKS) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ IRSA Role: aws-ops-mcp (sts:AssumeRole permission) │ │
│ └────────────────────────────────────────────────────────┘ │
│ │ │
│ Each tool call includes: role_arn │
│ ▼ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ STS AssumeRole │ │
│ └────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Account A │ │ Account B │ │ Account C │
│ Trust Policy │ │ Trust Policy │ │ Trust Policy │
│ → aws-ops-mcp │ │ → aws-ops-mcp │ │ → aws-ops-mcp │
└─────────────────┘ └─────────────────┘ └─────────────────┘快速开始
先决条件
- Docker和Docker Compose
- AWS凭据(用于本地开发)
地方发展
# Clone the repository
git clone https://github.com/DepStacks/tool.aws-ops.git
cd tool.aws-ops
# Copy and configure environment
cp .env.example .env
# Edit .env with your configuration
# Start the server
chmod +x docker-start.sh
./docker-start.sh
# Server runs on http://localhost:8100/sseMCP客户端配置
添加到MCP客户端配置中:
{
"mcpServers": {
"aws-ops": {
"url": "http://localhost:8100/sse",
"headers": {
"Authorization": "Bearer YOUR_AUTH_TOKEN"
}
}
}
}可用工具
实用工具
list_accounts
列出所有预配置的AWS帐户及其角色ARN。
秘密管理器工具
create_secret
在AWS Secrets Manager中创建新密钥。
# Using AssumeRole (production)
{
"name": "prod/myapp/database",
"secret_value": "{\"username\":\"admin\",\"password\":\"secret\"}",
"description": "Database credentials",
"tags": {"Environment": "prod", "Team": "platform"},
"role_arn": "arn:aws:iam::111111111111:role/aws-ops-target",
"region": "us-east-1"
}
# Using AWS Profile (local development)
{
"name": "staging/myapp/database",
"secret_value": "{\"username\":\"admin\",\"password\":\"secret\"}",
"profile": "staging",
"region": "us-east-1"
}get_secret_value
检索秘密的值。
# Using AssumeRole
{
"secret_id": "prod/myapp/database",
"role_arn": "arn:aws:iam::111111111111:role/aws-ops-target"
}
# Using AWS Profile
{
"secret_id": "staging/myapp/database",
"profile": "staging"
}update_secret
更新现有密钥的值。
delete_secret
删除机密(使用可配置的恢复窗口)。
list_secrets
列出带有可选名称前缀过滤的机密。
describe_secret
获取有关秘密的元数据(不带值)。
restore_secret
还原以前删除的机密。
tag_secret
在机密上添加或更新标签。
untag_secret
从秘密中删除标签。
配置
环境变量
# Default AWS Region
AWS_REGION=us-east-1
# MCP Authentication Token (required for API access)
MCP_AUTH_TOKEN=your-secret-token
# Pre-configured Account Role ARNs (Production - AssumeRole)
ACCOUNT_PRODUCTION_ROLE_ARN=arn:aws:iam::111111111111:role/aws-ops-target
ACCOUNT_STAGING_ROLE_ARN=arn:aws:iam::222222222222:role/aws-ops-target
# Pre-configured Account Profiles (Local Development - ~/.aws/credentials)
ACCOUNT_PRODUCTION_PROFILE=prod
ACCOUNT_STAGING_PROFILE=staging
ACCOUNT_DEVELOPMENT_PROFILE=dev身份验证方法
所有工具都支持三种身份验证方法:
| 方法 | 参数 | 用例 |
|---|---|---|
| 个人资料 | profile="staging" | 使用~/.aws/凭据进行本地开发 |
| 关心角色 | role_arn="arn:aws:iam::..." | 与IRSA合作生产 |
| 默认 | (无) | 使用环境凭据 |
优先级: profile > role_arn >默认凭据
目标帐户设置
每个目标AWS帐户都需要一个IAM角色,该角色具有:
- 信任政策 (允许基础角色承担它):
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::BASE_ACCOUNT_ID:role/aws-ops-mcp"
},
"Action": "sts:AssumeRole"
}]
}- 权限策略 (保密经理):
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"secretsmanager:CreateSecret",
"secretsmanager:GetSecretValue",
"secretsmanager:PutSecretValue",
"secretsmanager:UpdateSecret",
"secretsmanager:DeleteSecret",
"secretsmanager:ListSecrets",
"secretsmanager:DescribeSecret",
"secretsmanager:RestoreSecret",
"secretsmanager:TagResource",
"secretsmanager:UntagResource"
],
"Resource": "*"
}]
}可扩展性
该架构旨在轻松添加新的AWS服务:
添加新服务
- 在中创建新的服务管理器
services/:
# services/route53.py
from .base import AWSServiceBase
class Route53Service(AWSServiceBase):
def _get_client(self, role_arn=None, region=None):
return self._get_aws_client('route53', role_arn, region)
async def list_hosted_zones(self, role_arn=None, region=None):
client = self._get_client(role_arn, region)
response = client.list_hosted_zones()
return {"success": True, "zones": response['HostedZones']}- 添加工具
server.py:
from services.route53 import Route53Service
route53 = Route53Service()
@mcp.tool()
async def list_hosted_zones(role_arn=None, region=None):
"""List Route53 hosted zones"""
return await route53.list_hosted_zones(role_arn, region)- 更新文档
安全最佳实践
- 切勿使用AWS访问密钥 -在生产中使用IRSA
- 最小特权 -目标角色具有最低权限
- 按请求身份验证 -根据请求提供角色ARN
- 审计跟踪 -CloudTrail记录所有假定的角色操作
- MCP API认证 -需要承载令牌
- TLS加密 -仅在生产环境中使用HTTPS
- 没有存储凭据 -凭据仅存在于内存中
监控
健康检查
- 端点:
/healthz - 使用:ALB健康检查、Kubernetes探测器
日志记录
- 结构化日志到stdout
- 兼容CloudWatch、Fluent Bit等。
故障排除
假设角色失败
- 验证目标帐户中的信任策略
- 检查基础角色是否
sts:AssumeRole许可 - 验证角色ARN的格式是否正确
权限不足
- 验证目标角色是否具有所需的服务权限
- 检查资源级别权限(如果适用)
- 确保您使用的是正确的地区
启动时连接超时
- boto3客户端被延迟加载以防止这种情况
- 检查服务器日志中的初始化错误
发展
项目结构
tool.aws-ops/
├── server.py # Main FastMCP server
├── config.py # Configuration management
├── services/ # AWS service managers
│ ├── __init__.py
│ ├── base.py # Base class with AssumeRole
│ └── secrets_manager.py # Secrets Manager operations
├── requirements.txt # Python dependencies
├── Dockerfile # Container image
├── docker-compose.yml # Local development
├── docker-start.sh # Startup script
├── .env.example # Example configuration
├── AGENTS.md # Agent documentation
└── README.md # This file运行测试
# Install dependencies
pip install -r requirements.txt
# Test imports
python -c "from server import mcp; print('OK')"许可证
DepStacks使用的内部工具。
