如何修复校验IAM角色名含区域的Checkov自定义策略失效问题
Checkov自定义IAM角色命名校验方案
Checkov完全支持校验IAM角色名称,你的策略未生效主要是正则写法、YAML转义、匹配逻辑三类问题导致,调整方法如下:
原策略存在的问题
- 正则格式错误:Checkov的
regex_match运算符使用Python正则语法,不需要JavaScript风格的/定界符和g全局修饰符 - 匹配逻辑错误:
regex_match默认要求整个属性值完全匹配正则表达式,你当前的正则只能匹配「值完全等于区域名」的情况,无法匹配「包含区域名」的要求 - YAML转义问题:正则中的
\d在YAML字符串中需要转义为\\d,否则YAML解析时会把反斜杠当作转义符处理,导致正则失效 - 可选冗余配置:如果你只需要校验IAM角色,可移除
aws_s3_bucket的资源类型配置
修正后的策略代码
definition: and: - cond_type: "attribute" resource_types: - "aws_iam_role" # 如需要同时校验S3桶命名可保留该配置,否则删除下一行即可 - "aws_s3_bucket" attribute: "name" operator: "regex_match" value: ".*(us(-gov)?|ap|ca|cn|eu|sa)-(central|(north|south)?(east|west)?)-\\d.*"
可选规则调整
如果需要严格要求区域名出现在命名的固定位置,可按需调整正则即可:例如要求区域名为前缀时,将value修改为"(us(-gov)?|ap|ca|cn|eu|sa)-(central|(north|south)?(east|west)?)-\\d-.*"即可。
内容的提问来源于stack exchange,提问作者Andrew Striletskyi
相关产品推荐
相关产品推荐

