关于 cloud-security
cloud-security 是用于云安全态势评估的技能,面向审查云配置和基础设施代码的安全人员。它通过脚本检查 IAM 权限升级、存储公开访问及网络暴露,并提供修复建议。
主要功能
- 01检查 IAM 权限升级路径
- 02评估 S3 公开访问与加密
- 03识别安全组网络暴露
- 04审查基础设施代码配置
- 05输出风险等级与修复建议
适用场景
- 01部署前检查云资源配置
- 02排查过度授权的 IAM 策略
- 03发现公开的 S3 存储桶
- 04在 CI/CD 中拦截高危配置
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alirezarezvani/ claude-skills --skill cloud-security安装后在 Claude Code 中输入/cloud-security确认已加载。
附带文件references/cspm-checks.mdscripts/cloud_posture_check.py
详细介绍
云安全
云安全态势评估 Skill,用于检测 IAM 权限提升、公共存储暴露、网络配置风险以及基础设施即代码(IaC)错误配置。这不是针对活跃云入侵的事件响应(参见 incident-response),也不是应用漏洞扫描(参见 security-pen-testing),而是通过系统化的云配置分析来防止被利用。
目录
概述
本 Skill 的作用
本 Skill 提供**云安全态势管理(CSPM)**的方法论和工具,用于系统化检查云配置中可能形成可被利用攻击面的错误配置。它涵盖 IAM 权限提升路径、存储公共暴露、网络过度授权以及基础设施代码安全。
与其他安全 Skill 的区别
| Skill | 关注点 | 方式 |
|---|---|---|
| cloud-security(本 Skill) | 云配置风险 | 预防性——在被利用前进行评估 |
| incident-response | 活跃云事件 | 响应性——对已确认的云入侵进行分诊 |
| threat-detection | 行为异常 | 主动性——在云日志中搜寻攻击者活动 |
| security-pen-testing | 应用漏洞 | 进攻性——主动利用已发现的弱点 |
前提条件
需要能够读取 JSON 格式的 IAM 策略文档、S3 存储桶配置和安全组规则。若要进行持续监控,可与云服务商 API 集成(AWS Config、Azure Policy、GCP Security Command Center)。
云态势检查工具
cloud_posture_check.py 工具执行三类检查:iam(权限提升)、s3(公共访问)和 sg(网络暴露)。它会根据配置文件结构自动识别检查类型,也可通过显式的 --check 参数指定。
# Analyze an IAM policy for privilege escalation paths
python3 scripts/cloud_posture_check.py policy.json --check iam --json
# Assess S3 bucket configuration for public access
python3 scripts/cloud_posture_check.py bucket_config.json --check s3 --json
# Check security group rules for open admin ports
python3 scripts/cloud_posture_check.py sg.json --check sg --json
# Run all checks with internet-facing severity bump
python3 scripts/cloud_posture_check.py config.json --check all \
--provider aws --severity-modifier internet-facing --json
# Regulated data context (bumps severity by one level for all findings)
python3 scripts/cloud_posture_check.py config.json --check all \
--severity-modifier regulated-data --json
# Pipe IAM policy from AWS CLI
aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/MyPolicy \
--version-id v1 | jq '.PolicyVersion.Document' | \
python3 scripts/cloud_posture_check.py - --check iam --json
退出码
| 退出码 | 含义 | 所需操作 |
|---|---|---|
| 0 | 无高危/严重发现 | 无需操作 |
| 1 | 高危发现 | 24 小时内修复 |
| 2 | 严重发现 | 立即修复——如存在活跃入侵,升级至 incident-response |
IAM 策略分析
IAM 分析可检测权限提升路径、过度授权、公共主体暴露以及数据外泄风险。
权限提升模式
| 模式 | 严重程度 | 关键操作组合 | MITRE |
|---|---|---|---|
| Lambda PassRole 提权 | 严重 | iam:PassRole + lambda:CreateFunction | T1078.004 |
| EC2 实例配置文件滥用 | 严重 | iam:PassRole + ec2:RunInstances | T1078.004 |
| CloudFormation PassRole | 严重 | iam:PassRole + cloudformation:CreateStack | T1078.004 |
| 自我附加策略提权 | 严重 | iam:AttachUserPolicy + sts:GetCallerIdentity | T1484.001 |
| 内联策略自我提权 | 严重 | iam:PutUserPolicy + sts:GetCallerIdentity | T1484.001 |
| 策略版本后门 | 严重 | iam:CreatePolicyVersion + iam:ListPolicies | T1484.001 |
| 凭证窃取 | 高 | iam:CreateAccessKey + iam:ListUsers | T1098.001 |
| 组成员提权 | 高 | iam:AddUserToGroup + iam:ListGroups | T1098 |
| 密码重置攻击 | 高 | iam:UpdateLoginProfile + iam:ListUsers | T1098 |
| 服务级通配符 | 高 | iam:* 或 s3:* 或 ec2:* | T1078.004 |
IAM 发现严重程度指南
| 发现类型 | 条件 | 严重程度 |
|---|---|---|
| 完全管理员通配符 | Action=* Resource=* | 严重 |
| 公开主体 | Principal: '*' | 严重 |
| 危险操作组合 | 两个操作构成的提权路径 | 严重 |
| 单个提权操作 | 作用于通配符资源 | 高 |
| 数据外泄操作 | 对 * 执行 s3:GetObject、secretsmanager:GetSecretValue | 高 |
| 服务通配符 | service:* 操作 | 高 |
| 对指定资源的数据操作 | 范围适当 | 低/无问题 |
最小权限建议
对于每个严重或高风险发现,该工具会输出一个 least_privilege_suggestion 字段,其中包含具体的整改指导:
- 将
Action: *替换为所需操作的明确列表 - 将
Resource: *替换为具体的 ARN 模式 - 使用 AWS Access Analyzer 识别实际使用的权限
- 将危险的操作组合拆分到具有不同信任策略的独立角色中
S3 暴露评估
S3 评估检查四个维度:公共访问阻止配置、存储桶 ACL、存储桶策略主体暴露情况以及默认加密。
S3 配置检查矩阵
| 检查项 | 发现条件 | 严重程度 |
|---|---|---|
| 公共访问阻止 | 四个标志中任一缺失或为 false | 高 |
| 存储桶 ACL | public-read-write | 严重 |
| 存储桶 ACL | public-read 或 authenticated-read | 高 |
| 存储桶策略 Principal | 允许(Allow)且 "Principal": "*" | 严重 |
| 默认加密 | 不存在 ServerSideEncryptionConfiguration | 高 |
| 默认加密 | SSEAlgorithm 非标准 | 中 |
| 未配置 PublicAccessBlockConfiguration | 状态未知 | 中 |
推荐的 S3 基线配置
{
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"BlockPublicPolicy": true,
"IgnorePublicAcls": true,
"RestrictPublicBuckets": true
},
"ServerSideEncryptionConfiguration": {
"Rules": [{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "aws:kms",
"KMSMasterKeyID": "arn:aws:kms:region:account:key/key-id"
},
"BucketKeyEnabled": true
}]
},
"ACL": "private"
}
四项公共访问阻止设置都必须在存储桶级别和 AWS 账户级别启用。若两者未同时强制执行,账户级设置可能会被存储桶级设置覆盖。
安全组分析
安全组分析会标记入站规则中暴露管理端口、数据库端口,或向互联网 CIDR(0.0.0.0/0、::/0)开放所有流量的情况。
关键端口暴露规则
| 端口 | 服务 | 发现严重程度 | 整改建议 |
|---|---|---|---|
| 22 | SSH | 严重 | 限制为 VPN CIDR,或使用 AWS Systems Manager Session Manager |
| 3389 | RDP | 严重 | 限制为 VPN CIDR,或使用 AWS Fleet Manager |
| 0–65535(全部) | 所有流量 | 严重 | 删除该规则;仅添加必需的特定端口 |
高风险数据库端口规则
| 端口 | 服务 | 发现严重程度 | 整改建议 |
|---|---|---|---|
| 1433 | MSSQL | 高 | 仅允许来自应用层安全组的访问,并将其迁移至私有子网 |
| 3306 | MySQL | 高 | 仅允许来自应用层安全组的访问,并将其迁移至私有子网 |
| 5432 | PostgreSQL | 高 | 仅允许来自应用层安全组的访问,并将其迁移至私有子网 |
| 27017 | MongoDB | 高 | 仅允许来自应用层安全组的访问,并将其迁移至私有子网 |
| 6379 | Redis | 高 | 仅允许来自应用层安全组的访问,并将其迁移至私有子网 |
| 9200 | Elasticsearch | 高 | 仅允许来自应用层安全组的访问,并将其迁移至私有子网 |
严重程度修饰符
当被评估的资源可被互联网直接访问时(如负载均衡器、API 网关、公网 EC2),使用 --severity-modifier internet-facing。当资源处理受 PCI、HIPAA 或 GDPR 监管的数据时,使用 --severity-modifier regulated-data。两个修饰符都会将每个发现的严重程度提升一个级别。
IaC 安全审查
基础设施即代码(IaC)审查会在部署之前、定义阶段就发现配置问题。
IaC 检查矩阵
| 工具 | 检查类型 | 运行时机 |
|---|---|---|
| Terraform | 资源级检查(aws_s3_bucket_acl、aws_security_group、aws_iam_policy_document) | 规划前、应用前、PR 门禁 |
| CloudFormation | 模板属性验证(PublicAccessBlockConfiguration、SecurityGroupIngress) | 模板检查、部署门禁 |
| Kubernetes 清单 | 容器特权、网络策略、密钥暴露 | PR 门禁、准入控制器 |
| Helm charts | 同 Kubernetes | PR 门禁 |
Terraform IAM 策略示例:存在风险 vs. 合规
# BAD: Will generate critical findings
resource "aws_iam_policy" "bad_policy" {
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = "*"
Resource = "*"
}]
})
}
# GOOD: Least privilege
resource "aws_iam_policy" "good_policy" {
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = ["s3:GetObject", "s3:PutObject"]
Resource = "arn:aws:s3:::my-specific-bucket/*"
}]
})
}
完整 CSPM 检查参考:references/cspm-checks.md
云服务商覆盖矩阵
| 检查类型 | AWS | Azure | GCP |
|---|---|---|---|
| IAM 权限提升 | 完整(IAM 策略、信任策略、ESCALATION_COMBOS) | 部分(RBAC 分配、服务主体风险) | 部分(IAM 绑定、工作负载身份) |
| 存储公开访问 | 完整(S3 存储桶策略、ACL、公开访问阻止) | 部分(Blob SAS 令牌、容器访问级别) | 部分(GCS 存储桶 IAM、统一存储桶级访问) |
| 网络暴露 | 完整(安全组、NACL、端口级分析) | 部分(NSG 规则、入站端口分析) | 部分(防火墙规则、VPC 防火墙) |
| IaC 扫描 | 完整(Terraform、CloudFormation) | 部分(ARM 模板、Bicep) | 部分(Deployment Manager) |
工作流
工作流 1:快速态势检查(20 分钟)
适用于新配置的资源或部署前审查:
# 1. Export IAM policy document
aws iam get-policy-version --policy-arn ARN --version-id v1 | \
jq '.PolicyVersion.Document' > policy.json
python3 scripts/cloud_posture_check.py policy.json --check iam --json
# 2. Check S3 bucket configuration
aws s3api get-bucket-acl --bucket my-bucket > acl.json
aws s3api get-public-access-block --bucket my-bucket >> bucket.json
python3 scripts/cloud_posture_check.py bucket.json --check s3 --json
# 3. Review security groups for open admin ports
aws ec2 describe-security-groups --group-ids sg-123456 | \
jq '.SecurityGroups[0]' > sg.json
python3 scripts/cloud_posture_check.py sg.json --check sg --json
决策:退出码 2 表示阻止部署并进行整改。退出码 1 表示在 24 小时内安排整改。
工作流 2:完整云安全评估(多日)
第 1 天 — IAM 与身份:
- 导出附加到生产角色的所有 IAM 策略
- 对每个策略运行 cloud_posture_check.py --check iam
- 梳理发现的所有权限提升路径
- 识别权限过大的服务账户和角色
- 审查跨账户信任策略
第 2 天 — 存储与网络:
- 枚举所有 S3 存储桶并导出配置
- 对数据存储桶运行 cloud_posture_check.py --check s3 --severity-modifier regulated-data
- 导出所有 VPC 的安全组配置
- 对面向互联网的资源运行 cloud_posture_check.py --check sg
- 审查 NACL 规则中的网络分段缺口
第 3 天 — IaC 与持续集成:
- 审查版本控制中的 Terraform/CloudFormation 模板
- 检查 CI/CD 流水线中的 IaC 安全门禁
- 对照
references/cspm-checks.md验证发现的问题 - 按优先级排序(严重 → 高 → 中)制定整改计划
工作流 3:CI/CD 安全门禁
将态势检查集成到部署流水线中,防止配置错误的资源进入生产环境:
# Validate IaC before terraform apply
terraform show -json plan.json | \
jq '[.resource_changes[].change.after | select(. != null)]' > resources.json
python3 scripts/cloud_posture_check.py resources.json --check all --json
if [ $? -eq 2 ]; then
echo "Critical cloud security findings — blocking deployment"
exit 1
fi
# Validate existing S3 bucket before modifying
aws s3api get-bucket-policy --bucket "${BUCKET}" | jq '.Policy | fromjson' | \
python3 scripts/cloud_posture_check.py - --check s3 \
--severity-modifier regulated-data --json
反模式
- 在未检查提权组合的情况下进行 IAM 分析 — 单独看高风险操作可能显得风险较低。危险在于组合:
iam:PassRole本身并不严重,但iam:PassRole + lambda:CreateFunction是已确认的权限提升路径。务必分析完整语句,而不是孤立地看单个操作。 - 只启用存储桶级别的公共访问阻止 — AWS S3 同时提供账户级和存储桶级的公共访问阻止设置,存储桶级设置可以覆盖账户级设置。两者都必须配置。如果任何存储桶存在显式覆盖,仅配置账户级阻止是不够的。
- 对于公开资源,未将
--severity-modifier internet-facing视为必选项 — 面向互联网的资源暴露程度远高于内部资源。面向互联网的基础设施上的高危发现应视为严重。对于 DMZ、负载均衡器和 API 网关配置,务必应用--severity-modifier internet-facing。 - 只检查管理员策略 — 权限提升路径经常源于非管理员策略,这些策略组合起来后看似无害的权限。所有附加到生产身份的策略都必须检查,而不仅仅是那些明显具有高级访问权限的策略。
- 未进行根因分析就修复发现的问题 — 在不了解权限授予原因的情况下移除危险权限,最终会被重新添加。在移除每项高风险权限之前,应记录其业务理由,以防止权限被悄然重新引入。
- 忽视服务账户的权限过度配置 — 服务账户在开发期间常常被过度配置,且在投入生产后从未被精简。生产环境中的每个服务账户都必须依据 AWS Access Analyzer 或同等工具进行审计,以识别并移除未使用的权限。
- 未对受监管数据工作负载应用严重性修饰符 — 通用 S3 存储桶中的一个高危发现,与包含 PHI 或持卡人数据的存储桶中的同一发现,性质并不相同。在评估受监管数据环境中的资源时,务必使用
--severity-modifier regulated-data。
交叉引用
| Skill | 关系 |
|---|---|
| incident-response | 严重发现(公开的 S3、已确认正在活跃的权限提升)可能会触发事件分类 |
| threat-detection | 云安全态势发现会生成狩猎目标——权限过度配置的角色很可能成为横向移动的目的地 |
| red-team | 红队演练专门测试态势评估中发现的云配置错误的可利用性 |
| security-pen-testing | 云安全态势发现会纳入渗透测试评估的基础设施安全部分 |