如何用Checkov自定义YAML策略验证Terraform中的JSON权限策略?
用Checkov自定义YAML策略检查Terraform中的IAM宽松权限
可行方案
Checkov支持通过jsonpath表达式解析Terraform中jsonencode生成的策略内容,直接在自定义YAML规则里针对策略的JSON结构做校验,无需额外解析步骤。
自定义YAML规则示例
针对你提供的AWS IAM策略代码,可编写如下规则,检测是否存在允许全资源(Resource="*")的宽松权限:
metadata: name: "IAM策略禁止使用全资源通配符" id: "CKV_CUSTOM_1001" category: "IAM" framework: "terraform" definition: cond_type: "attribute" resource_types: - "aws_iam_policy" attribute: "policy" operator: "not_exists" value: "Statement[?Effect == 'Allow' && Resource == '*']" value_type: "jsonpath"
规则详解
resource_types:指定检查的Terraform资源类型为aws_iam_policyattribute:定位到资源的policy字段(即jsonencode生成的JSON策略串)value_type: "jsonpath":告知Checkov用JSONPath语法解析policy字段的内容value中的JSONPath表达式:查找所有Effect为Allow且Resource为*的Statement,operator: "not_exists"表示一旦找到这类语句就判定为违规
使用步骤
- 将上述规则保存为
.yaml文件(比如iam_no_full_resource.yaml),放入自定义规则目录(默认~/.checkov/rules,或用--external-checks-dir指定路径) - 运行Checkov扫描你的Terraform代码目录:
checkov -d ./your-terraform-project --external-checks-dir ./custom-rules
扫描后会自动检测出权限过度宽松的IAM策略。
扩展场景
如果要检查特定Action搭配全资源的违规情况,可修改JSONPath表达式,比如检测ec2:Describe*动作配合*资源:
Statement[?Effect == 'Allow' && contains(Action, 'ec2:Describe*') && Resource == '*']
内容的提问来源于stack exchange,提问作者deals my
相关产品推荐
相关产品推荐

