You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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_policy
  • attribute:定位到资源的policy字段(即jsonencode生成的JSON策略串)
  • value_type: "jsonpath":告知Checkov用JSONPath语法解析policy字段的内容
  • value中的JSONPath表达式:查找所有Effect为Allow且Resource为*的Statement,operator: "not_exists"表示一旦找到这类语句就判定为违规

使用步骤

  1. 将上述规则保存为.yaml文件(比如iam_no_full_resource.yaml),放入自定义规则目录(默认~/.checkov/rules,或用--external-checks-dir指定路径)
  2. 运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:02:42