一个轻量级服务,使AI助手能够通过模型上下文协议 (MCP) 执行AWS CLI命令。
AWS MCP服务器在MCP感知的AI助手(如Claude Desktop、Cursor、Windsurf)与AWS CLI之间提供了一个桥梁。它使这些助手能够:
aws_cli_help) - 获取有关AWS服务和命令的详细帮助信息。aws_cli_pipeline) - 使用Unix管道运行命令,并接收优化用于AI消费的格式化结果。flowchart LR
AI[AI助手] <-->|MCP协议| Server[AWS MCP服务器]
Server <-->|子进程| AWS[AWS CLI]
AWS <-->|API| Cloud[AWS云]
该视频演示了使用Claude Desktop与AWS MCP服务器创建一个新的AWS EC2实例并安装AWS SSM代理的过程。
注意:为了安全性和可靠性,强烈推荐在Docker容器内运行服务器的方法。请参阅安全注意事项部分以了解重要事项。
# 克隆仓库
git clone https://github.com/alexei-led/aws-mcp-server.git
cd aws-mcp-server
# 构建并运行Docker容器
docker compose -f deploy/docker/docker-compose.yml up -d
Docker镜像支持AMD64/x86_64(Intel/AMD)和ARM64(Apple Silicon M1-M4,AWS Graviton)架构。
注意:GitHub Packages中的官方镜像是多架构的,会自动使用适合您系统的版本。
# 使用最新稳定版本 docker pull ghcr.io/alexei-led/aws-mcp-server:latest # 或指定特定版本(生产环境推荐) docker pull ghcr.io/alexei-led/aws-mcp-server:1.0.0Docker镜像标签:
latest:最新稳定发布版x.y.z(例如,1.0.0):特定版本sha-<commit-sha>:开发构建,带有Git提交SHA(例如,sha-gb697684)
谨慎使用:原生运行需要仔细设置环境,并且相比推荐的Docker部署方式具有更高的安全风险。确保您理解安全注意事项部分中概述的影响。
# 克隆仓库
git clone https://github.com/alexei-led/aws-mcp-server.git
cd aws-mcp-server
# 设置虚拟环境
python -m venv venv
source venv/bin/activate # 在Windows上:venv\Scripts\activate
# 安装到开发模式
pip install -e .
# 运行服务器
python -m aws_mcp_server
AWS MCP服务器可以通过环境变量进行配置:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
AWS_MCP_TIMEOUT | 命令执行超时时间(秒) | 300 |
AWS_MCP_MAX_OUTPUT | 最大输出字符数 | 100000 |
AWS_MCP_TRANSPORT | 使用的传输协议("stdio" 或 "sse") | stdio |
AWS_PROFILE | 使用的AWS配置文件 | default |
AWS_REGION | 使用的AWS区域 | us-east-1 |
AWS_MCP_SECURITY_MODE | 安全模式("strict" 或 "permissive") | strict |
AWS_MCP_SECURITY_CONFIG | 自定义安全配置文件路径 | "" |
重要:安全地管理提供给服务器的AWS凭证,无论是通过挂载的~/.aws文件还是环境变量。确保凭证遵循安全注意事项部分中详述的最小权限原则。当通过Docker运行时,请确保这些变量正确传递到容器环境中(例如,使用docker run -e VAR=value ...)。
在您的AWS环境中执行命令时,安全性至关重要。虽然AWS MCP服务器提供了功能,但您负责安全地配置和运行它。请严格遵守以下内容:
1. 推荐部署:Docker容器
rm、mv)也会被限制在短暂的Docker环境中,不会影响主机机器的文件系统。容器可以轻松停止和重新创建。2. AWS凭证和IAM最小权限(关键)
~/.aws或环境变量)。3. 受信任用户模型
4. 当前实现的执行风险理解
shell=True在子进程调用中)来执行AWS命令和处理Unix管道。尽管方便,但如果输入命令字符串被篡改(命令注入),这种方法存在内在风险。~/.aws)或容器内的环境变量,并将其泄露(例如,通过curl)。严格的IAM策略仍然是限制潜在泄露凭证价值的最重要防御措施。5. 网络暴露(SSE传输)
sse传输(这意味着网络监听器),请确保只绑定到受信任的网络接口(例如,localhost),或者如果更广泛地公开,则实施适当的网络安全控制(防火墙、身份验证代理)。默认的stdio传输不打开网络端口。6. 共享责任总结
通过严格遵守Docker部署和细致的IAM最小权限配置,您可以建立必要的操作控制,以安全地使用当前实现的AWS MCP服务器。
要手动将AWS MCP服务器与Claude Desktop集成:
找到Claude Desktop配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json编辑配置文件,以包含AWS MCP服务器:
{
"mcpServers": {
"aws-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/Users/YOUR_USER_NAME/.aws:/home/appuser/.aws:ro",
"ghcr.io/alexei-led/aws-mcp-server:latest"
]
}
}
}
重启Claude Desktop以应用更改
flowchart TD
subgraph "用户设备"
config[编辑 claude_desktop_config.json]
claude[Claude Desktop]
docker[Docker容器]
aws_creds[AWS凭证]
end
subgraph "AWS云"
services[AWS服务]
end
subgraph "MCP服务器组件"
tools[AWS CLI工具]
resources[AWS资源]
templates[提示模板]
end
config -->|添加MCP服务器配置| claude
claude -->|Docker运行命令| docker
docker --- tools
docker --- resources
docker --- templates
aws_creds -->|挂载只读| docker
resources -.->|读取| aws_creds
tools -->|API调用| services
获取AWS CLI文档:
用户:AWS S3 cp命令有哪些可用选项?
Claude:让我为您获取这些信息。
AWS S3 cp命令具有以下选项:
NAME
cp - 将本地文件或S3对象复制到另一个位置本地或在S3中。
SYNOPSIS
cp <LocalPath> <S3Uri> 或 <S3Uri> <LocalPath> 或 <S3Uri> <S3Uri> [--acl <value>] [--cache-control <value>] ...
执行AWS CLI命令:
用户:列出我的S3桶
Claude:我将为您列出S3桶。
2023-10-15 14:30:45 my-bucket-1
2023-11-20 09:15:32 my-bucket-2
2024-01-05 11:22:18 my-backup-bucket
使用命令管道:
用户:列出名称中含有“备份”的S3桶,并按字母顺序显示它们
Claude:让我为您查找这些信息。
2024-01-05 11:22:18 my-backup-bucket
2024-03-01 09:44:12 weekly-backup-bucket
2024-03-15 13:10:57 database-backup-bucket
访问AWS资源:
用户:我可以使用的AWS区域有哪些?
Claude:让我检查一下您可使用的AWS区域。
可用区域:
- us-east-1 (美国东部,北弗吉尼亚州) - 当前选择
- us-east-2 (美国东部,俄亥俄州)
- us-west-1 (美国西部,北加州)
- us-west-2 (美国西部,俄勒冈州)
- eu-west-1 (欧洲西部,爱尔兰)
- eu-central-1 (欧洲中部,法兰克福)
- ap-northeast-1 (亚太地区,东京)
- ap-southeast-1 (亚太地区,新加坡)
- ap-southeast--2 (亚太地区,悉尼)
您当前使用的是us-east-1区域。
使用提示模板:
用户:我需要对我的S3桶进行安全审计
Claude:我将帮助您审计S3桶的安全性。
以下是执行全面安全审计的AWS CLI命令:
# 列出所有具有公共访问设置的桶
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-public-access-block --bucket {}
# 检查桶策略是否有公共访问
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-bucket-policy --bucket {} 2>/dev/null
# 识别没有加密的桶
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-bucket-encryption --bucket {} 2>/dev/null
# 检查没有启用日志记录的桶
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-bucket-logging --bucket {} 2>/dev/null
# 验证桶版本状态
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-bucket-versioning --bucket {}
AWS MCP服务器包括以下预定义的提示模板:
| 提示 | 描述 | 参数 |
|---|---|---|
create_resource | 生成创建AWS资源的最佳实践命令 | resource_type, resource_name |
resource_inventory |