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

CloudFormation:如何将现有IAM托管策略附加到现有IAM角色

IAM托管策略与角色关联场景

已知场景1:向现有IAM角色添加新的IAM托管策略

Parameters:
  awsExampleRolesParameter:
    Type: CommaDelimitedList
    Description: 需要关联新托管策略的现有IAM角色名称列表

Resources:
  SampleManagedPolicy:
    Type: 'AWS::IAM::ManagedPolicy'
    Properties:
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Sid: AllowAllUsersToListAccounts
            Effect: Allow
            Action:
              - 'iam:ListAccountAliases'
              - 'iam:ListUsers'
              - 'iam:GetAccountSummary'
            Resource: '*'
      Roles: !Ref awsExampleRolesParameter

已知场景2:向新IAM角色添加现有IAM托管策略

Parameters:
  awsExampleManagedPolicyParameterOne:
    Type: String
    Description: 要添加到新角色的第一个IAM托管策略ARN
  awsExampleManagedPolicyParameterTwo:
    Type: String
    Description: 要添加到新角色的第二个IAM托管策略ARN

Resources:
  RootRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - 'sts:AssumeRole'
      Path: /
      ManagedPolicyArns:
        - !Ref awsExampleManagedPolicyParameterOne
        - !Ref awsExampleManagedPolicyParameterTwo

问题场景:将现有IAM托管策略附加到现有IAM角色

问题代码框架

Parameters:
  awsExampleRolesParameter:
    Type: CommaDelimitedList
    Description: 需要附加托管策略的现有IAM角色名称列表
  awsExampleManagedPolicyParameterOne:
    Type: String
    Description: 要附加的第一个IAM托管策略ARN
  awsExampleManagedPolicyParameterTwo:
    Type: String
    Description: 要附加的第二个IAM托管策略ARN

# 此处需要编写资源配置,实现将指定托管策略附加到指定现有角色

解决方案代码

要实现该需求,需使用AWS::IAM::RolePolicyAttachment资源类型,它专门用于关联现有IAM角色和现有IAM托管策略。若参数包含多个角色,可通过CloudFormation的!ForEach循环批量生成关联资源:

Parameters:
  awsExampleRolesParameter:
    Type: CommaDelimitedList
    Description: 需要附加托管策略的现有IAM角色名称列表
  awsExampleManagedPolicyParameterOne:
    Type: String
    Description: 要附加的第一个IAM托管策略ARN
  awsExampleManagedPolicyParameterTwo:
    Type: String
    Description: 要附加的第二个IAM托管策略ARN

Resources:
  # 遍历所有目标角色
  !ForEach RoleName in !Ref awsExampleRolesParameter:
    # 遍历所有要附加的托管策略
    !ForEach PolicyArn in [!Ref awsExampleManagedPolicyParameterOne, !Ref awsExampleManagedPolicyParameterTwo]:
      # 生成唯一的资源名称:角色名+策略名(从ARN中提取)
      RolePolicyAttachment-${RoleName}-${!Select(-1, !Split('/', !Ref PolicyArn))}:
        Type: AWS::IAM::RolePolicyAttachment
        Properties:
          # 指定现有角色名称
          RoleName: !Ref RoleName
          # 指定现有托管策略的ARN
          PolicyArn: !Ref PolicyArn

说明

  • AWS::IAM::RolePolicyAttachment无需创建新角色或策略,仅负责建立两者的关联关系
  • !ForEach可批量处理多角色多策略的组合,避免重复编写资源配置
  • 资源名称通过角色名和策略名拼接,确保每个关联资源的唯一性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:40:03