如何配置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
相关产品推荐
相关产品推荐

