Cloudsplaining AWS IAM安全审计工具详细教学文档
一、工具概述
Cloudsplaining是一款针对AWS IAM(Identity and Access Management)的安全审计与评估工具,主要用于:
- 识别AWS IAM策略中最小权限原则的违规情况
- 生成以威胁等级优先的HTML格式分析报告
- 扫描整个AWS账号或单个策略文件
- 识别无资源限制的IAM活动
- 标记高风险IAM策略并帮助制定缓解方案
二、主要功能
1. 风险识别能力
Cloudsplaining能够识别以下四类主要风险:
数据提取风险:
- s3:GetObject
- ssm:GetParameter
- secretsmanager:GetSecretValue
基础设施修改风险:
- 无限制的修改权限
资源暴露风险:
- 可能导致资源被公开访问的权限
权限提升风险:
- 可能导致权限升级的权限组合
2. 特殊角色识别
能够识别AWS计算服务(EC2、ECS、EKS或Lambda)定义的IAM角色,这些角色可能比用户定义的角色带来更大的安全风险。
典型攻击场景示例:
如果攻击者获得执行ssm:SendCommand的权限,且存在安装了SSM代理的特权EC2实例,攻击者就能获取这些EC2实例的特殊权限。
三、安装方法
1. 通过Homebrew安装
brew tap salesforce/cloudsplaining https://github.com/salesforce/cloudsplaining
brew install cloudsplaining
2. 通过pip安装
pip3 install --user cloudsplaining
安装完成后,可通过cloudsplaining --help验证安装是否成功。
四、使用教程
1. 扫描整个AWS账号
1.1 下载账号授权数据
需要具备iam:GetAccountAuthorizationDetails权限。
基本命令:
cloudsplaining download
使用特定AWS配置文件:
cloudsplaining download --profile myprofile
此命令会在当前目录生成包含账户授权细节的JSON文件。
1.2 扫描授权数据
cloudsplaining scan --input default.json
使用排除文件减少误报:
cloudsplaining scan --input default.json --exclusions-file exclusions.yml
2. 扫描单个策略文件
cloudsplaining scan-policy-file --input examples/policies/explicit-actions.json
带排除文件的扫描:
cloudsplaining scan-policy-file --input examples/policies/wildcards.json --exclusions-file examples/example-exclusions.yml
3. 输出示例
扫描结果会显示发现的问题,例如:
Issue found: Data Exfiltration
Actions: s3:GetObject
Issue found: Resource Exposure
Actions: ecr:DeleteRepositoryPolicy, ecr:SetRepositoryPolicy, s3:BypassGovernanceRetention...
Issue found: Unrestricted Infrastructure Modification
Actions: ecr:BatchDeleteImage, ecr:CompleteLayerUpload...
五、典型IAM策略问题示例
问题策略示例
允许IAM主体在任何S3 bucket上执行s3:PutObject:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "*"
}
]
}
正确做法
应根据资源ARN进行访问限制:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::specific-bucket/*"
}
]
}
六、高级功能
1. 自定义排除文件
可以创建YAML格式的排除文件来过滤误报,示例exclusions.yml:
exclude-actions:
- "s3:GetObject" # 排除特定的数据提取动作
- "ssm:SendCommand" # 排除特定的命令执行动作
exclude-resources:
- "arn:aws:s3:::logs/*" # 排除特定的资源
2. 报告生成
默认会生成HTML格式的报告,包含:
- 执行摘要(Executive Summary)
- 按风险等级分类的详细发现
- 建议的修复措施
七、使用场景
-
大规模AWS环境审计:当有数百个AWS账户,每个账户中有几十个策略时,快速识别需要修复的策略。
-
渗透测试准备:帮助红队识别可能的权限提升路径。
-
合规性检查:验证IAM策略是否符合最小权限原则。
-
持续安全监控:集成到CI/CD流程中,确保新部署的IAM策略符合安全标准。
八、项目资源
- GitHub仓库: Cloudsplaining
- 样本报告: 示例报告
九、注意事项
-
确保执行扫描的IAM角色具有必要的权限(
iam:GetAccountAuthorizationDetails)。 -
对于生产环境,建议先在测试环境中验证扫描结果。
-
定期更新工具以获取最新的安全检测规则。
-
生成的报告可能包含敏感信息,应妥善保管。
-
对于大型AWS组织,可能需要分批扫描以避免API限制。