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

如何配置CloudFormation Guard忽略!Ref,仅检查!Sub格式托管策略

CloudFormation Guard规则修正:忽略!Ref格式托管策略,仅检查!Sub中的AWS托管策略违规

问题背景

现有CloudFormation Guard规则会错误标记以!Ref开头的托管策略行,需要调整规则,完全忽略所有!Ref格式的托管策略,仅对使用!Sub的托管策略进行检查,拦截其中ARN以AWS开头的AWS托管策略配置。

修正后的完整规则代码

# 定义需要检查的IAM实体(排除已抑制规则的资源)
let aws_iam_entities_no_managed_policy = Resources.*[
  Type in [ /AWS::IAM::User/,
            /AWS::IAM::Role/,
            /AWS::IAM::Group/ ]
  Metadata.guard.SuppressedRules not exists or
  Metadata.guard.SuppressedRules.* != "IAM_ONLY_ALLOW_NONAWSManagedPolicies"
]

# 核心规则:仅检查!Sub格式的托管策略,忽略!Ref
rule IAM_ONLY_ALLOW_NONAWSManagedPolicies when %aws_iam_entities_no_managed_policy !empty {
  when %aws_iam_entities_no_managed_policy.Properties.ManagedPolicyArns !empty {
    # 筛选出使用Fn::Sub的托管策略项,同时排除使用Fn::Ref的项
    %aws_iam_entities_no_managed_policy.Properties.ManagedPolicyArns[*][
      "Fn::Sub" exists AND
      "Fn::Ref" not exists
    ]."Fn::Sub" !in [
      /^arn:aws:iam::\${AWS::AccountId}:policy\/AWS/,
      "arn:aws:iam::${AWS::AccountId}:policy/VMImportExportRoleForAWSConnector"
    ]

    <<
      Violation: Only select managed policies are allowed on IAM Users, Roles, or Groups.
      Fix: Remove the disallowed policies from any IAM Users, Roles, or Groups.
    >>
  }
}

关键修改点说明

  • 精准筛选检查范围:在遍历ManagedPolicyArns数组时,通过"Fn::Sub" exists AND "Fn::Ref" not exists的条件,只针对纯!Sub格式的托管策略项做检查,彻底排除!Ref格式的条目,避免误判。
  • 保留原有违规匹配逻辑:对筛选后的!Sub内容,继续沿用原有的正则表达式和固定字符串匹配规则,拦截以AWS开头的托管策略ARN。

验证逻辑

  • 若托管策略使用!Ref SomePolicy:因"Fn::Ref" exists会被排除在检查范围外,不会触发违规提示。
  • 若托管策略使用!Sub arn:aws:iam::${AWS::AccountId}:policy/AWSXXX:符合"Fn::Sub" exists且匹配禁止规则,会触发违规提示。
  • 若托管策略使用自定义!Sub非AWS托管策略ARN:不会触发违规提示。

内容的提问来源于stack exchange,提问作者user23794362

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:12:54