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

如何在CloudFormation的资源属性中使用条件判断?

解决方案

你原来的写法不被CloudFormation支持的原因是:CloudFormation不允许直接在资源属性的数组内嵌入Condition字段,Condition仅可作用于整个资源,或通过内置条件函数在属性值层面做动态判断,以下是两种可实现需求的方案:

方法1:使用Fn::If内置函数直接动态生成ManagedPolicyArns数组

这种方法适合逻辑简单、仅需少量条件判断的场景,直接在IAM角色的属性内完成配置。
首先需要在模板的Conditions段定义你的判断条件,示例如下:

"Conditions": {
  "MyCondition": {
    // 这里替换为你自己的条件判断逻辑,示例为参数EnableEMRAccess等于true时触发
    "Fn::Equals": [{"Ref": "EnableEMRAccess"}, "true"]
  }
}

之后修改IAM角色的ManagedPolicyArns配置:

"MyRole": {
  "Type": "AWS::IAM::Role",
  "Properties": {
    "ManagedPolicyArns": {
      "Fn::If": [
        "MyCondition",
        // 条件为真时返回的策略数组,可同时加入其他固定要绑定的策略
        [
          {"Ref": "EMRFullAccessManagedPolicy"},
          "arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess"
        ],
        // 条件为假时返回的策略数组,仅包含固定要绑定的策略
        [
          "arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess"
        ]
      ]
    },
    "RoleName": "myRole"
    // 剩余角色属性按需补充
  }
}

方法2:使用独立的AWS::IAM::ManagedPolicyAttachment资源绑定策略

这种方法逻辑更清晰,适合需要多个条件策略绑定的场景,不会出现数组拼接的冗余代码。
你可以将条件作用于整个策略绑定资源,条件为真时才会创建该绑定资源,自动将指定托管策略绑定到角色上,条件为假时不会创建该绑定:

// IAM角色本身不需要配置条件策略
"MyRole": {
  "Type": "AWS::IAM::Role",
  "Properties": {
    "ManagedPolicyArns": [
      // 仅放固定需要绑定的策略即可
      "arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess"
    ],
    "RoleName": "myRole"
    // 剩余角色属性按需补充
  }
},
// 单独定义策略绑定资源,添加条件控制
"MyRoleEMRPolicyAttachment": {
  "Type": "AWS::IAM::ManagedPolicyAttachment",
  "Condition": "MyCondition",
  "Properties": {
    "Roles": [{"Ref": "MyRole"}],
    "PolicyArn": {"Ref": "EMRFullAccessManagedPolicy"}
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:36:03