AWS CLI助手
一种轻量级服务,通过模型上下文协议(MCP)使人工智能助手能够执行AWS CLI命令,允许人工智能工具检索AWS文档并 interacts 与AWS服务进行交互。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"aws-mcp-server": {
"args": [
"run",
"-i",
"--rm",
"-v",
"/Users/YOUR_USER_NAME/.aws:/home/appuser/.aws:ro",
"ghcr.io/alexei-led/aws-mcp-server:latest"
],
"command": "docker"
}
}
}
服务介绍
AWS Model Context Protocol (MCP) 服务器
一个轻量级的服务,通过模型上下文协议(MCP)使AI助手能够执行AWS CLI命令。
概述
AWS MCP 服务器在支持MCP的AI助手(如Claude Desktop、Cursor、Windsurf)和AWS CLI之间提供了一个桥梁。它使这些助手能够:
- 检索AWS CLI文档 (
aws_cli_help) - 获取有关AWS服务和命令的详细帮助 - 执行AWS CLI命令 (
aws_cli_pipeline) - 使用Unix管道运行命令,并接收优化后的格式化结果以供AI使用
flowchart LR
AI[AI Assistant] <-->|MCP Protocol| Server[AWS MCP Server]
Server <-->|Subprocess| AWS[AWS CLI]
AWS <-->|API| Cloud[AWS Cloud]
演示
视频展示了如何使用Claude Desktop与AWS MCP Server创建一个新的安装了AWS SSM代理的AWS EC2实例。
特性
- 命令文档 - 详细的AWS CLI命令帮助信息
- 命令执行 - 执行AWS CLI命令并返回人类可读的结果
- Unix管道支持 - 使用标准Unix管道和工具过滤和转换AWS CLI输出
- AWS资源上下文 - 通过MCP资源访问AWS配置文件、区域、账户信息和环境详情
- 提示模板 - 遵循最佳实践的常见AWS任务预定义提示模板
- Docker集成 - 通过容器化进行简单部署,并支持多架构(AMD64/x86_64 和 ARM64)
- AWS身份验证 - 利用主机上的现有AWS凭证
要求
- Docker(默认)或Python 3.13+(以及本地安装的AWS CLI)
- 配置好的AWS凭证
开始使用
注意: 为了安全性和可靠性,强烈建议在Docker容器中运行服务器。请参阅安全注意事项部分了解重要事项。
运行服务器选项1:使用Docker(推荐)
# Clone repository
git clone https://github.com/alexei-led/aws-mcp-server.git
cd aws-mcp-server
# Build and run Docker container
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)
运行服务器选项 2:使用 Python
谨慎使用:直接运行需要仔细设置环境,并且与推荐的 Docker 部署相比具有更高的安全风险。确保您理解了安全注意事项部分中概述的影响。
# Clone repository
git clone https://github.com/alexei-led/aws-mcp-server.git
cd aws-mcp-server
# Set up virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install in development mode
pip install -e .
# Run the server
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 凭证,无论是通过挂载的 ~/.aws 文件还是环境变量。确保凭证遵循最小权限原则,如安全注意事项部分所述。当通过 Docker 运行时,请确保这些变量正确传递到容器环境(例如,使用 docker run -e VAR=value ...)。
安全注意事项
在针对您的 AWS 环境执行命令时,安全性至关重要。虽然 AWS MCP 服务器提供了功能,但您负责安全地配置和运行它。请严格遵守以下几点:
1. 推荐部署:Docker 容器
- 隔离:在 Docker 容器内运行服务器是强烈推荐和默认的部署方法。容器化提供了关键的文件系统和进程隔离。即使误用,通过管道执行的潜在破坏性 Unix 命令(如
rm、mv)也只会在临时的 Docker 环境中生效,而不会影响主机文件系统。容器可以轻松停止并重新创建。 - 受控环境:Docker 确保了一致的环境,减少了意外行为。
2. AWS 凭证和 IAM 最小权限(关键)
- 用户责任: 您需要向服务器提供 AWS 凭证(通过挂载的
~/.aws或环境变量)。 - 最小权限至关重要: 服务器将使用您提供的凭证执行 AWS CLI 命令。这些凭证必须属于一个配置了仅执行您打算通过此工具进行的 AWS 操作所需的最小必要权限(最小权限)的 IAM 主体(用户或角色)。这一点绝对关键。
- 不要使用根账户凭证: 绝对不要使用 AWS 账户的根用户凭证。
- 定期审查权限: 定期审核与凭证关联的 IAM 权限。
- 影响限制: 正确配置的 IAM 权限是限制通过服务器执行的任何命令(无论是有意还是无意)潜在影响的主要机制。即使命令被篡改,它也只能执行由特定 IAM 策略允许的操作。
3. 受信任用户模型
- 服务器假设与 MCP 客户端(例如 Claude Desktop, Cursor)交互的最终用户是同一受信任的个人,该个人配置了服务器并提供了最小权限的 AWS 凭证。不要将服务器或连接的客户端暴露给不受信任的用户。
4. 理解执行风险(当前实现)
- 命令执行: 当前实现利用 shell 功能(在 subprocess 调用中设置
shell=True)来执行 AWS 命令并处理 Unix 管道。虽然方便,但如果输入命令字符串被篡改(命令注入),这种方法存在固有风险。 - 通过操作控制缓解风险: 在受信任用户模型和Docker 部署的背景下,这些风险通过以下方式得到操作上的缓解:
- 假设受信任用户不会故意对自己环境执行恶意命令。
- Docker 包含文件系统副作用。
- 最关键的是,IAM 最小权限限制了可以执行的任何 AWS 操作的范围。
- 凭据泄露风险: 尽管采用了容器化和 IAM,但复杂的命令注入仍可能尝试读取挂载的凭据(
~/.aws)或容器内的环境变量,并将其泄露(例如,通过curl)。严格的 IAM 策略仍然是限制潜在泄露凭据价值的最重要防御措施。
5. 网络暴露(SSE 传输)
- 如果使用
sse传输(这意味着网络监听器),请确保只将服务器绑定到受信任的网络接口(例如localhost),或者如果更广泛地暴露,则实施适当的网络安全控制(防火墙、身份验证代理)。默认的stdio传输不打开网络端口。
6. 共同责任总结
- AWS MCP Server 提供了该工具。
- 您,作为用户,需要负责:
- 在推荐的安全 Docker 环境中运行它。
- 提供并安全地管理最小权限的 AWS 凭证。
- 确保只有受信任的用户与服务器/客户端交互。
- 如适用,确保网络环境的安全。
通过严格遵循 Docker 部署和细致的 IAM 最小权限配置,您可以为当前实现中的 AWS MCP Server 的安全使用建立必要的操作控制。
与 Claude Desktop 集成
配置
要手动将 AWS MCP Server 与 Claude Desktop 集成:
-
定位 Claude Desktop 配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
编辑配置文件以包含 AWS MCP Server:
{ "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 以应用更改
- 重启后,您应该会在输入框右下角看到一个锤子 🔨 图标
- 这表明 AWS MCP Server 已准备好使用
flowchart TD
subgraph "User Device"
config[Edit claude_desktop_config.json]
claude[Claude Desktop]
docker[Docker Container]
aws_creds[AWS Credentials]
end
subgraph "AWS Cloud"
services[AWS Services]
end
subgraph "MCP Server Components"
tools[AWS CLI Tools]
resources[AWS Resources]
templates[Prompt Templates]
end
config -->|Add MCP Server Config| claude
claude -->|Docker Run Command| docker
docker --- tools
docker --- resources
docker --- templates
aws_creds -->|Mount Read-only| docker
resources -.->|Read| aws_creds
tools -->|API Calls| services
示例交互
获取 AWS CLI 文档:
User: What are the available options for the AWS S3 cp command?
Claude: Let me get that information for you.
The AWS S3 cp command has the following options:
NAME
cp - Copies a local file or S3 object to another location locally or in S3.
SYNOPSIS
cp <LocalPath> <S3Uri> or <S3Uri> <LocalPath> or <S3Uri> <S3Uri> [--acl <value>] [--cache-control <value>] ...
执行 AWS CLI 命令:
User: List my S3 buckets
Claude: I'll list your S3 buckets for you.
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
使用命令管道:
User: List my S3 buckets that have "backup" in their name and show them in alphabetical order
Claude: Let me find that for you.
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 资源:
User: What AWS regions are available for me to use?
Claude: Let me check what AWS regions are available for you.
Available regions:
- us-east-1 (US East, N. Virginia) - Currently selected
- us-east-2 (US East, Ohio)
- us-west-1 (US West, N. California)
- us-west-2 (US West, Oregon)
- eu-west-1 (EU West, Ireland)
- eu-central-1 (EU Central, Frankfurt)
- ap-northeast-1 (Asia Pacific, Tokyo)
- ap-southeast-1 (Asia Pacific, Singapore)
- ap-southeast-2 (Asia Pacific, Sydney)
You're currently using the us-east-1 region.
使用提示模板:
User: I need to perform a security audit of my S3 buckets
Claude: I'll help you audit the security of your S3 buckets.
Here are AWS CLI commands to perform a comprehensive security audit:
# List all buckets with public access settings
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-public-access-block --bucket {}
# Check bucket policies for public access
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-bucket-policy --bucket {} 2>/dev/null
# Identify buckets without encryption
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-bucket-encryption --bucket {} 2>/dev/null
# Check for buckets without logging enabled
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-bucket-logging --bucket {} 2>/dev/null
# Verify bucket versioning status
aws s3api list-buckets --query 'Buckets[*].Name' --output text | xargs -I {} aws s3api get-bucket-versioning --bucket {}
可用的提示模板
AWS MCP Server 包括以下预定义的提示模板:
核心操作
| 提示 | 描述 | 参数 |
|---|---|---|
create_resource |
生成使用最佳实践创建 AWS 资源的命令 | resource_type, resource_name |
resource_inventory |
创建资源的综合清单 | service, region (可选) |
troubleshoot_service |
生成用于排查服务问题的命令 | service, resource_id |
resource_cleanup |
识别并安全清理资源 | service, criteria (可选) |
安全与合规
| 提示词 | 描述 | 参数 |
|---|---|---|
security_audit |
审计特定 AWS 服务的安全设置 | service |
security_posture_assessment |
对您的 AWS 环境进行全面的安全评估 | 无 |
iam_policy_generator |
创建最小权限 IAM 策略 | service, actions, resource_pattern (可选) |
compliance_check |
检查是否符合标准 | compliance_standard, service (可选) |
成本与性能
| 提示词 | 描述 | 参数 |
|---|---|---|
cost_optimization |
寻找某项服务的成本优化机会 | service |
performance_tuning |
优化和调整 AWS 资源的性能 | service, resource_id |
基础设施与架构
| 提示词 | 描述 | 参数 |
|---|---|---|
serverless_deployment |
以最佳实践部署无服务器应用程序 | application_name, runtime (可选) |
container_orchestration |
设置容器环境(ECS/EKS) | cluster_name, service_type (可选) |
vpc_network_design |
设计并实施安全的 VPC 网络 | vpc_name, cidr_block (可选) |
infrastructure_automation |
自动化基础设施管理 | resource_type, automation_scope (可选) |
multi_account_governance |
实施安全的多账户策略 | account_type (可选) |
可靠性与监控
请注意,原文中的“Reliability & Monitoring”部分没有提供具体内容,因此在翻译中也保持了这一状态。如果有更多内容需要添加,请告知我!
| 提示 | 描述 | 参数 |
|---|---|---|
service_monitoring |
设置全面监控 | service, metric_type (可选) |
disaster_recovery |
实施企业级灾难恢复解决方案 | service, recovery_point_objective (可选) |
安全
- 服务器使用主机上的 AWS 凭证
- 所有命令在执行前都会经过验证
- 超时限制防止长时间运行的命令
- 命令必须以 'aws' 前缀开头
- 潜在危险的命令受到限制
开发
设置开发环境
# Install only runtime dependencies using pip
pip install -e .
# Install all development dependencies using pip
pip install -e ".[dev]"
# Or use uv for faster dependency management
make uv-install # Install runtime dependencies
make uv-dev-install # Install development dependencies
Makefile 命令
项目包含一个带有多个目标的 Makefile,用于处理常见任务:
# Test commands
make test # Run tests excluding integration tests
make test-unit # Run unit tests only (all tests except integration tests)
make test-integration # Run integration tests only (requires AWS credentials)
make test-all # Run all tests including integration tests
# Test coverage commands
make test-coverage # Run tests with coverage report (excluding integration tests)
make test-coverage-all # Run all tests with coverage report (including integration tests)
# Linting and formatting
make lint # Run linters (ruff check and format --check)
make lint-fix # Run linters and auto-fix issues where possible
make format # Format code with ruff
要查看所有可用命令的完整列表,请运行 make help。
代码覆盖率
项目包括 Codecov 的配置,以跟踪代码覆盖率指标。配置文件为 codecov.yml,它:
- 设置了 80% 的覆盖率阈值
- 从覆盖率报告中排除测试文件、设置文件和文档
- 配置 PR 评论和状态检查
在 CI/CD 运行过程中会自动生成覆盖率报告并上传到 Codecov。
集成测试
集成测试验证 AWS MCP 服务器与实际 AWS 资源正确工作。要运行它们:
-
设置 AWS 资源:
- 创建一个用于测试的 S3 存储桶
- 设置环境变量:
export AWS_TEST_BUCKET=your-test-bucket-name - 确保您的 AWS 凭证已配置
-
运行集成测试:
# 运行所有测试,包括集成测试 make test-all # 仅运行集成测试 make test-integration
或者您可以直接运行 pytest 命令:
# Run all tests including integration tests
pytest --run-integration
# Run only integration tests
pytest --run-integration -m integration
故障排除
- 认证问题:确保您的 AWS 凭证配置正确
- 连接错误:验证服务器正在运行,并且 AI 助手连接设置正确
- 权限错误:检查您的 AWS 凭证是否具有必要的权限
- 超时错误:对于长时间运行的命令,增加
AWS_MCP_TIMEOUT环境变量的值
为什么使用 Docker 部署
通过 Docker 部署 AWS MCP 服务器是推荐的方法,提供了显著的安全性和可靠性优势,构成了工具安全使用模式的核心:
安全优势
- 隔离(主要缓解措施): Docker 容器提供了必要的文件系统和进程隔离。AWS CLI 命令和管道 Unix 工具在一个受控环境中运行。意外或误用的命令对文件系统的影响仅限于容器内,保护了您的主机。
- 受控凭据访问: 在挂载凭据时,使用
:ro(只读)标志限制了容器修改您的 AWS 配置文件的能力。 - 无需本地安装: 避免直接在主机系统上安装 AWS CLI 及其依赖项。
- 干净的环境: 每次容器运行都从一个已知且干净的状态开始。
可靠性优势
- 一致的配置:所有必需的工具(AWS CLI、SSM 插件、jq)均已预安装并正确配置
- 依赖管理:避免工具及其依赖项之间的版本冲突
- 跨平台一致性:在不同操作系统上以相同方式工作
- 完整的环境:包括用于命令管道、过滤和格式化的所有必要工具
其他优点
- 多架构支持:可在 Intel/AMD (x86_64) 和 ARM (Apple Silicon, AWS Graviton) 处理器上运行
- 简单更新:通过单个拉取命令即可更新到新版本
- 无 Python 环境冲突:避免与系统中其他 Python 应用程序的潜在冲突
- 版本锁定:轻松锁定特定版本以确保生产环境中的稳定性
版本控制
此项目使用 setuptools_scm 根据 Git 标签自动确定版本:
- 发布版本:当存在 Git 标签(例如
1.2.3)时,版本将精确为该标签 - 开发版本:对于没有标签的提交,生成的开发版本格式为:
<last-tag>.post<commits-since-tag>+g<commit-hash>.d<date>(例如1.2.3.post10+gb697684.d20250406)
版本会自动包含在以下内容中:
- 包版本信息
- Docker 镜像标签
- 持续集成构建
创建发布版本
要创建一个新的发布版本:
# Create and push a new tag
git tag -a 1.2.3 -m "Release version 1.2.3"
git push origin 1.2.3
CI/CD 流水线将自动构建并发布带有适当版本标签的 Docker 镜像。
有关版本管理系统更详细的信息,请参阅 VERSION.md。
许可证
此项目根据 MIT 许可证授权 - 详情请参阅 LICENSE 文件。