这是一个模型上下文协议(MCP)服务器,它使AI助手能够通过自然语言查询执行全面的AWS安全分析。
AWS 安全 MCP 将像Claude这样的AI助手与AWS安全服务连接起来,通过对话查询实现实时基础设施分析。系统自动发现并分析多个AWS账户中的资源,提供安全见解而无需深入了解AWS CLI知识。
MCP服务器的AWS凭证必须具有以下权限:
{
"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": "*"
}
]
}
为了高级日志分析能力,需要额外的权限:
{
"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"
]
}
]
}
SecurityAudit 策略(必需)
将AWS托管的SecurityAudit策略附加到您的MCP服务器的IAM用户或IAM角色上:
策略ARN:arn:aws:iam::aws:policy/SecurityAudit
此策略提供了对AWS安全服务的全面只读访问,并且对于AWS安全MCP的功能是必不可少的。它包括了以下权限:
可选托管策略
arn:aws:iam::aws:policy/AmazonAthenaFullAccess(用于简化Athena日志分析)更新config.yml
aws:
region: "us-east-1"
profile: {profileName}
.
.
.
配置您的AWS凭证通过~本地设置
$ 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=
运行以下命令
git clone https://github.com/groovyBugify/aws-security-mcp.git
uv venv
source .venv/bin/activate
uv pip install -r requirements.txt
配置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 ECR
$ aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {accountID}.dkr.ecr.{region}.amazonaws.com
创建ECR仓库
$ aws ecr create-repository --repository-name aws-security-mcp --region {region}
构建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
部署为AWS ECS服务
配置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"]
}
}
}
根据需要编辑项目根目录下的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实现了多账户访问的中心辐射模型:
organizations:ListAccounts识别目标账户aws-security-mcp-cross-account-access角色在每个目标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
AWS安全MCP与Amazon Athena集成,提供高级日志分析能力。此功能需要预先存在的Athena表,其中包含您的安全相关日志。
虽然MCP服务器可以通过Athena分析任何日志源,但推荐以下来源以提供全面的安全元数据给您的MCP客户端。为了最佳的安全覆盖,我们建议至少实施CloudTrail和VPC流日志:
推荐日志来源:
自定义日志源的灵活性
MCP服务器支持查询存储在S3中的任何日志类型,为您提供完全的灵活性以分析自定义或额外的日志源。要启用任何日志源的分析,请确保:
s3:GetObject和s3:ListBucket权限这种架构允许您扩展安全分析,超越标准AWS日志,包括应用程序日志、自定义安全事件或第三方安全工具输出。
一旦表被配置,您可以执行高级查询:
查询:"显示过去24小时内从外部IP尝试的所有失败登录"
查询:"你能分享'saransh.rana@company.com'在过去24小时内在我的AWS账户上做了什么,并分享一个时间线报告?"
查询:"你能检查我的PCI(123456789012)AWS账户上所有的'访问拒绝/错误/禁止'情况,并分享主体的用户名和用户IP,并对这个IP进行反向检查,看它是否来自我自己的AWS组织还是外部方。"
查询:"关联GuardDuty发现与CloudTrail和VPC流日志事件"
| 服务 | 功能 |
|---|---|
| IAM | 用户、角色、策略、访问密钥、权限分析 |
| EC2 | 实例、安全组、VPC、子网、网络接口 |
| S3 | 桶、权限、公共访问分析 |
| GuardDuty | 发现、探测器、威胁情报 |
| SecurityHub | 发现、合规标准、安全评分 |
| Lambda | 函数、权限、配置、触发器 |
| CloudFront | 分发、起源、行为、安全策略 |
| ELB/ALB/NLB | 负载均衡器、目标组、监听器、健康检查 |
| Route53 | 主机区域、DNS记录、健康检查 |
| WAF | Web ACL、规则、速率限制 |
| Shield | DDoS保护状态和指标 |
| Access Analyzer | IAM访问分析和发现 |
| ECS/ECR | 容器服务、仓库、镜像扫描 |
| Organizations | 账户结构、SCP、组织单位 |
| Athena | 日志分析、安全事件关联 |
对于生产环境,使用以下配置:
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
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工具发现失败
# 检查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