返回市场
aws-mcp服务器

aws-mcp服务器

作者:alexei-led166 星标更新:2025-04-11

项目介绍

AWS 模型上下文协议 (MCP) 服务器

CI 代码覆盖率 代码检查器:Ruff 镜像标签 镜像大小

一个轻量级服务,使AI助手能够通过模型上下文协议 (MCP) 执行AWS CLI命令。

概述

AWS MCP服务器在MCP感知的AI助手(如Claude Desktop、Cursor、Windsurf)与AWS CLI之间提供了一个桥梁。它使这些助手能够:

  1. 获取AWS CLI文档 (aws_cli_help) - 获取有关AWS服务和命令的详细帮助信息。
  2. 执行AWS CLI命令 (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代理的过程。

功能

  • 命令文档 - 提供详细的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(推荐)

# 克隆仓库
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.0

Docker镜像标签

  • latest:最新稳定发布版
  • x.y.z(例如,1.0.0):特定版本
  • sha-<commit-sha>:开发构建,带有Git提交SHA(例如,sha-gb697684

运行服务器选项 2:使用Python

谨慎使用:原生运行需要仔细设置环境,并且相比推荐的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容器

  • 隔离:在Docker容器内运行服务器是强烈推荐和默认的部署方法。容器化提供了关键的文件系统和进程隔离。即使误用,通过管道执行的潜在破坏性Unix命令(如rmmv)也会被限制在短暂的Docker环境中,不会影响主机机器的文件系统。容器可以轻松停止和重新创建。
  • 受控环境:Docker确保了一致的环境,减少了意外行为。

2. AWS凭证和IAM最小权限(关键)

  • 用户责任:您向服务器提供AWS凭证(通过挂载的~/.aws或环境变量)。
  • 最小权限至关重要:服务器使用您提供的凭证执行AWS CLI命令。绝对关键的是,这些凭证属于配置了仅执行您希望通过此工具执行的AWS操作所需最低必要权限(最小权限)的IAM主体(用户或角色)。
    • 不要使用根凭证:永远不要使用AWS账户根用户的凭证。
    • 定期审查权限:定期审核与凭证关联的IAM权限。
  • 影响限制:正确配置的IAM权限是限制通过服务器执行的任何命令(无论有意或无意)潜在影响的主要机制。即使命令被操纵,也只能执行由特定IAM策略允许的操作。

3. 受信任用户模型

  • 服务器假设与MCP客户端(如Claude Desktop、Cursor)交互的最终用户是同一受信任的个人,该个人配置了服务器并提供了最小权限的AWS凭证。不要将服务器或连接的客户端暴露给不受信任的用户。

4. 当前实现的执行风险理解

  • 命令执行:当前实现使用shell特性(shell=True在子进程调用中)来执行AWS命令和处理Unix管道。尽管方便,但如果输入命令字符串被篡改(命令注入),这种方法存在内在风险。
  • 通过操作控制缓解:在受信任用户模型Docker部署的背景下,这些风险在操作层面得到缓解:
    • 假定受信任用户不会故意针对其自身环境提供恶意命令。
    • Docker限制了文件系统副作用。
    • 关键的是,IAM最小权限限制了任何可能执行的AWS操作的范围。
  • 凭证泄露风险:尽管有容器化和IAM,复杂的命令注入可能会尝试读取挂载的凭证(~/.aws)或容器内的环境变量,并将其泄露(例如,通过curl)。严格的IAM策略仍然是限制潜在泄露凭证价值的最重要防御措施。

5. 网络暴露(SSE传输)

  • 如果使用sse传输(这意味着网络监听器),请确保只绑定到受信任的网络接口(例如,localhost),或者如果更广泛地公开,则实施适当的网络安全控制(防火墙、身份验证代理)。默认的stdio传输不打开网络端口。

6. 共享责任总结

  • AWS MCP服务器提供工具。
  • 您,用户,负责:
    • 在推荐的安全Docker环境中运行。
    • 提供并安全地管理最小权限AWS凭证。
    • 确保只有受信任的用户与服务器/客户端交互。
    • 如适用,确保网络环境的安全。

通过严格遵守Docker部署和细致的IAM最小权限配置,您可以建立必要的操作控制,以安全地使用当前实现的AWS MCP服务器。

与Claude Desktop集成

配置

要手动将AWS MCP服务器与Claude Desktop集成:

  1. 找到Claude Desktop配置文件

    • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows:%APPDATA%\Claude\claude_desktop_config.json
  2. 编辑配置文件,以包含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"
          ]
        }
      }
    }
    
  3. 重启Claude Desktop以应用更改

    • 重启后,您应该在输入框右下角看到一个锤子 🔨 图标
    • 这表示AWS MCP服务器可用
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