返回市场
aws安全mcp

aws安全mcp

作者:groovyBugify77 星标更新:2025-07-26

项目介绍

AWS 安全 MCP

MIT 许可证 Python 3.11+

这是一个模型上下文协议(MCP)服务器,它使AI助手能够通过自然语言查询执行全面的AWS安全分析。

概述

AWS 安全 MCP 将像Claude这样的AI助手与AWS安全服务连接起来,通过对话查询实现实时基础设施分析。系统自动发现并分析多个AWS账户中的资源,提供安全见解而无需深入了解AWS CLI知识。

关键能力

  • 跨账户发现:自动检测并访问AWS组织账户
  • 自然语言接口:使用纯英语查询AWS资源
  • 安全分析:集成来自GuardDuty、SecurityHub和Access Analyzer的安全发现
  • 基础设施映射:网络拓扑、威胁建模、安全审查和爆炸半径分析
  • 日志分析:使用Athena分析CloudTrail、VPC流日志和安全事件

预备条件

  • Python:3.11或更高版本
  • 包管理器uv
  • AWS账户:具有适当的IAM权限
  • MCP客户端:Claude Desktop、Cline或其他兼容客户端

AWS需求

MCP服务器的AWS凭证必须具有以下权限:

核心MCP权限

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CrossAccountAccess",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::*:role/aws-security-mcp-cross-account-access"
    },
    {
      "Sid": "OrganizationDiscovery",
      "Effect":  "Allow",
      "Action": [
        "organizations:ListAccounts"
      ],
      "Resource": "*"
    }
  ]
}

Athena集成权限

为了高级日志分析能力,需要额外的权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AthenaQueryExecution",
      "Effect": "Allow",
      "Action": [
        "athena:BatchGetQueryExecution",
        "athena:GetQueryExecution",
        "athena:GetQueryResults",
        "athena:GetWorkGroup",
        "athena:GetTableMetadata",
        "athena:ListQueryExecutions",
        "athena:StartQueryExecution",
        "athena:GetQueryResultsStream",
        "athena:GetDataCatalog",
        "athena:ListDataCatalogs",
        "athena:ListDatabases",
        "athena:ListTableMetadata"
      ],
      "Resource": "*"
    },
    {
      "Sid": "GlueCatalogAccess",
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:GetTable",
        "glue:GetTables",
        "glue:GetPartition",
        "glue:GetPartitions",
        "glue:BatchGetPartition"
      ],
      "Resource": "*"
    },
    {
      "Sid": "S3LogDataAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::your-cloudtrail-bucket/*",
        "arn:aws:s3:::your-cloudtrail-bucket",
        "arn:aws:s3:::your-vpc-flow-logs-bucket/*",
        "arn:aws:s3:::your-vpc-flow-logs-bucket",
        "arn:aws:s3:::your-security-logs-bucket/*",
        "arn:aws:s3:::your-security-logs-bucket"
      ]
    },
    {
      "Sid": "AthenaResultsAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::your-athena-results-bucket/*",
        "arn:aws:s3:::your-athena-results-bucket"
      ]
    }
  ]
}

必要的AWS托管策略

SecurityAudit 策略(必需)

将AWS托管的SecurityAudit策略附加到您的MCP服务器的IAM用户或IAM角色上:

策略ARN:arn:aws:iam::aws:policy/SecurityAudit

此策略提供了对AWS安全服务的全面只读访问,并且对于AWS安全MCP的功能是必不可少的。它包括了以下权限:

  • IAM:用户、角色、策略、访问分析
  • EC2:安全组、实例、VPC配置
  • S3:桶策略、ACL、公共访问设置
  • GuardDuty:发现、探测器、威胁情报
  • SecurityHub:安全标准、合规性发现
  • Access Analyzer:IAM访问分析和发现
  • Lambda:函数配置和权限
  • CloudFront:分发安全设置
  • Route53:DNS配置和健康检查
  • WAF:Web ACL规则和配置
  • 所有其他安全相关的AWS服务

可选托管策略

  • AthenaFullAccessarn:aws:iam::aws:policy/AmazonAthenaFullAccess(用于简化Athena日志分析)

重要注意事项

  • 最好使用Claude Desktop Pro/Max计划或其他允许处理超过100,000个令牌大小的平台来使用此MCP服务器。
  • 在S3权限中替换实际的CloudTrail、VPC流日志和Athena结果桶名称。
  • SecurityAudit策略对于基本的AWS安全MCP功能是强制性的
  • Athena集成权限是可选的,仅在需要高级日志分析功能时才需要。
  • 所有权限遵循最小特权原则,在可能的情况下提供只读访问。

快速开始 ~ 本地设置

  1. 更新config.yml

    aws:
      region: "us-east-1"
      profile: {profileName}
      .
      .
      .
    
  2. 配置您的AWS凭证通过~本地设置

    • aws sso
      $ aws configure sso
      SSO Session Name - email@example.com
      URL - https://yourDomain.awsapps.com/start/#
      Region - us-east-1
      
    • 环境变量
      export AWS_ACCESS_KEY_ID=
      export AWS_SECRET_ACCESS_KEY=
      export AWS_SESSION_TOKEN=
      
  3. 运行以下命令

    git clone https://github.com/groovyBugify/aws-security-mcp.git
    uv venv
    source .venv/bin/activate
    uv pip install -r requirements.txt
    
  4. 配置MCP客户端

    # 安装mcp-proxy
    uv tool install mcp-proxy
    
    # 检查mcp-proxy的位置
    which mcp-proxy
    
    # 添加到Claude Desktop配置
    {
      "mcpServers": {
        "aws-security": {
          "command": "/path/to/mcp-proxy",
          "args": ["http://localhost:8000/sse"]
        }
      }
    }
    

快速开始 ~ 作为AWS ECS服务

  1. 登录到AWS ECR

    $ aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {accountID}.dkr.ecr.{region}.amazonaws.com
    
  2. 创建ECR仓库

    $ aws ecr create-repository --repository-name aws-security-mcp --region {region}
    
  3. 构建Docker镜像

    $ cd aws-security-mcp/
    $ docker buildx build --platform linux/amd64 -t aws-security-mcp .
    $ docker tag aws-security-mcp:latest {accountID}.dkr.ecr.{region}.amazonaws.com/aws-security-mcp:latest
    $ docker push {accountID}.dkr.ecr.{region}.amazonaws.com/aws-security-mcp:latest
    
  4. 部署为AWS ECS服务

    • 创建一个任务定义,CPU为“2048”,内存为“4096”,这是可选的,您可以选择任何值
    • 配置任务定义以进行端口映射,端口8000
    • 创建具有以下权限的ECS任务角色
      • SecurityAudit IAM策略
      • Athena访问(上述策略)
      • STS Assume Role权限以承担跨账户角色
    • 创建具有基本权限的ECS任务执行角色
    • 一旦任务定义完成。
    • 使用任务定义创建AWS ECS服务
      • 您还可以配置负载均衡器
      • 确保关闭负载均衡器上的会话粘性
    • 注册ALB的目标组和监听器,端口80/443 -> ECS服务(8000)
    • 注册ALB以Route53域。
  5. 配置MCP客户端

    # 安装mcp-proxy
    uv tool install mcp-proxy
    
    # 检查mcp-proxy的位置
    which mcp-proxy
    
    # 添加到Claude Desktop配置
    {
      "mcpServers": {
        "aws-security": {
          "command": "/path/to/mcp-proxy",
          "args": ["http://{alb}/sse"]
        }
      }
    }
    

配置

YAML配置

根据需要编辑项目根目录下的config.yaml

aws:
  region: "us-east-1"
  profile: null

server:
  log_level: "info"
  startup_quiet: false
  tool_quiet: false

cross_account:
  role_name: "aws-security-mcp-cross-account-access"
  auto_setup_on_startup: true
  max_concurrent_assumptions:  5

环境变量覆盖

环境变量优先于YAML配置:

export MCP_LOG_LEVEL=debug
export MCP_STARTUP_QUIET=false
export AWS_DEFAULT_REGION=eu-west-1

使用示例

基础设施查询

查询:"你能分享正在运行的ec2实例列表吗?"

查询:"分享所有存储在Lambda函数环境变量中的秘密,并分享一个修复此问题的函数列表。"

查询:"检查我的'prod-ecs-cluster'并分享更多关于'user-login'服务的细节,它是否已部署?"

安全分析

查询:"显示过去7天内所有的GuardDuty发现,并基于暴露风险进行优先级排序。"

查询:"分析具有管理权限的IAM角色"

查询:"生成针对IP 172.16.1.10的爆炸半径分析"

查询:"获取有关IP 172.22.141.11的更多信息,并分享该资源的网络图。"

跨账户操作

查询:"列出所有连接的AWS账户"
查询:"刷新我的AWS会话"
查询:"查找标记为Team:Security的所有账户中的资源"
查询:"显示整个组织的合规状态"

架构

跨账户访问

AWS安全MCP实现了多账户访问的中心辐射模型:

  1. 发现:使用organizations:ListAccounts识别目标账户
  2. 角色承担:在每个账户中承担aws-security-mcp-cross-account-access角色
  3. 会话管理:维护临时凭据并自动刷新
  4. 回退:对于非组织账户,使用默认的凭据链

必需的IAM角色设置

在每个目标AWS账户中创建此角色:

角色名称aws-security-mcp-cross-account-access

信任策略

{
"Version": "2012-10-17",
"Statement": [
 {
   "Effect": "Allow",
   "Principal": {
     "AWS": "arn:aws:iam::YOUR-MASTER-ACCOUNT-ID:root"
   },
   "Action": "sts:AssumeRole"
    }
]
}

权限:附加AWS托管策略arn:aws:iam::aws:policy/SecurityAudit

Athena集成

概述

AWS安全MCP与Amazon Athena集成,提供高级日志分析能力。此功能需要预先存在的Athena表,其中包含您的安全相关日志。

支持的日志类型

虽然MCP服务器可以通过Athena分析任何日志源,但推荐以下来源以提供全面的安全元数据给您的MCP客户端。为了最佳的安全覆盖,我们建议至少实施CloudTrail和VPC流日志:

推荐日志来源:

  • AWS CloudTrail:API调用审计和用户活动跟踪
  • VPC流日志:网络流量模式分析
  • CloudFront日志:CDN请求和响应分析
  • ALB访问日志:应用负载均衡器流量洞察
  • WAF日志:Web应用程序防火墙事件和阻止(Cloudflare/AWS WAF/Akamai)
  • AWS Shield日志:DDoS保护和缓解事件

自定义日志源的灵活性

MCP服务器支持查询存储在S3中的任何日志类型,为您提供完全的灵活性以分析自定义或额外的日志源。要启用任何日志源的分析,请确保:

  1. S3存储:您的日志存储在S3桶中
  2. Athena表:存在适当配置的Athena表以适应日志格式
  3. IAM权限:MCP服务器具有目标桶的s3:GetObjects3:ListBucket权限

这种架构允许您扩展安全分析,超越标准AWS日志,包括应用程序日志、自定义安全事件或第三方安全工具输出。

查询能力

一旦表被配置,您可以执行高级查询:

查询:"显示过去24小时内从外部IP尝试的所有失败登录"

查询:"你能分享'saransh.rana@company.com'在过去24小时内在我的AWS账户上做了什么,并分享一个时间线报告?"

查询:"你能检查我的PCI(123456789012)AWS账户上所有的'访问拒绝/错误/禁止'情况,并分享主体的用户名和用户IP,并对这个IP进行反向检查,看它是否来自我自己的AWS组织还是外部方。"

查询:"关联GuardDuty发现与CloudTrail和VPC流日志事件"

设置预备条件

  1. S3桶:CloudTrail和VPC流日志必须存储在S3中
  2. Athena工作组:配置适当的工作组并指定结果位置
  3. 分区:启用分区投影以提高性能
  4. IAM权限:授予Athena查询权限给MCP执行角色

支持的AWS服务

当前可用

服务功能
IAM用户、角色、策略、访问密钥、权限分析
EC2实例、安全组、VPC、子网、网络接口
S3桶、权限、公共访问分析
GuardDuty发现、探测器、威胁情报
SecurityHub发现、合规标准、安全评分
Lambda函数、权限、配置、触发器
CloudFront分发、起源、行为、安全策略
ELB/ALB/NLB负载均衡器、目标组、监听器、健康检查
Route53主机区域、DNS记录、健康检查
WAFWeb ACL、规则、速率限制
ShieldDDoS保护状态和指标
Access AnalyzerIAM访问分析和发现
ECS/ECR容器服务、仓库、镜像扫描
Organizations账户结构、SCP、组织单位
Athena日志分析、安全事件关联

计划增加

  • OAuth身份验证
  • AWS Config合规性分析
  • AWS Security Hub CSPM集成
  • 外部CSPM集成

高级配置

生产部署

对于生产环境,使用以下配置:

server:
  host: "0.0.0.0"
  log_level: "error"
  startup_quiet: true
  tool_quiet: true
  minimal_logging: true

cross_account:
  max_concurrent_assumptions: 10
  session_duration_seconds: 7200

Docker部署

FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "aws_security_mcp/main.py", "sse"]
docker build -t aws-security-mcp .
docker run -p 8000:8000 \
  -e AWS_ACCESS_KEY_ID=your_key \
  -e AWS_SECRET_ACCESS_KEY=your_secret \
  aws-security-mcp

负载均衡器配置

  • 健康检查GET /health
  • SSE端点/sse
  • 超时:至少60秒
  • 会话粘性:不需要

故障排除

常见问题

工具发现失败

# 检查AWS凭证
aws sts get-caller-identity

# 验证跨账户角色是否存在
aws iam get-role --role-name aws-security-mcp-cross-account-access

跨账户访问被拒

# 手动测试角色承担
aws sts assume-role \
  --role-arn arn:aws:iam::TARGET-ACCOUNT:role/aws-security-mcp-cross-account-access \
  --role-session-name