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

如何在单个AWS账户创建策略并共享至多账户的IAM角色?

AWS跨账户IAM策略&角色共享实现方案

原模板问题修正

你提交的原有CloudFormation模板存在属性归属错误:

  • AssumeRolePolicyDocument、ManagedPolicyArns是AWS::IAM::Role资源的专属属性,不能写在AWS::IAM::Policy资源的配置中
  • 托管策略ARN拼写错误,官方AmazonEC2ReadOnlyAccess策略名称少写了末尾的c

核心实现逻辑

针对你的需求,我们采用以下方案实现:

  • 使用CommaDelimitedList类型参数接收多环境(Prod/Dev/Sandbox)的12位AWS账号ID,支持手动录入
  • 支持批量绑定AWS托管策略到创建的角色,也支持自定义策略跨账户共享给其他环境的角色使用
  • 通过CloudFormation原生Fn::ForEach循环能力,批量创建多个角色,无需重复编写资源块

完整可运行CloudFormation模板

AWSTemplateFormatVersion: '2010-09-09'
Description: '跨账户共享IAM角色/策略'
Metadata:
  Version: 1.0
Parameters:
  # 多角色名称列表,逗号分隔
  RoleNames:
    Type: CommaDelimitedList
    Default: R_EC2-Describe-Instance,R_S3-ReadOnly
    Description: 要创建的IAM角色名称列表,多个用逗号分隔
  # 中心账户ID
  MainAccountId:
    Type: String
    Default: 111111111111
    MaxLength: 12
    MinLength: 12
    Description: 部署当前模板的中心AWS账户ID
  # 多环境账号列表,逗号分隔
  EnvAccountIds:
    Type: CommaDelimitedList
    Default: 222222222222,333333333333,444444444444
    Description: Prod/Dev/Sandbox环境的AWS账号ID列表,多个用逗号分隔
  # AWS托管策略ARN列表,逗号分隔
  ManagedPolicyArns:
    Type: CommaDelimitedList
    Default: arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess,arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
    Description: 要绑定到角色的AWS托管策略ARN列表,多个用逗号分隔

# 转换能力声明,开启ForEach循环
Transform: AWS::LanguageExtensions

Resources:
  # 批量创建多个IAM角色
  Fn::ForEach::Roles:
    - RoleName: !Ref RoleNames
    - "${RoleName}":
        Type: AWS::IAM::Role
        Properties:
          RoleName: !Ref RoleName
          # 绑定AWS托管策略
          ManagedPolicyArns: !Ref ManagedPolicyArns
          # 配置跨账户AssumeRole权限
          AssumeRolePolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Principal:
                  AWS: !Split [ ",", !Join [ ",root,arn:aws:iam::", [ "", !Join [ ",", !Ref EnvAccountIds ], ":root" ] ] ]
                Action: sts:AssumeRole

  # 可选:创建自定义共享策略,允许其他环境账户的角色附加该策略
  SharedCustomPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: CoreSVC-Common-Policy
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - 'ec2:DescribeInstances'
              - 'ec2:DescribeVpcs'
            Resource: "*"
      # 配置策略共享权限,允许所有环境账户的角色附加该策略
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - 'iam:AttachRolePolicy'
              - 'iam:DetachRolePolicy'
            Resource: !Split [ ",", !Join [ ",role/*,arn:aws:iam::", [ "", !Join [ ",", !Ref EnvAccountIds ], ":role/*" ] ] ]

使用说明

  1. 将模板部署到你作为中心节点的AWS账户中
  2. 部署时按需修改参数:
    • 手动输入所有需要授权的Prod、Dev、Sandbox环境的12位AWS账号ID,多个用英文逗号分隔
    • 调整需要绑定的AWS托管策略ARN列表,多个用英文逗号分隔
    • 调整需要创建的角色名称列表,多个用英文逗号分隔
  3. 部署完成后,所有配置的环境账户的根身份、用户或角色都可以调用sts:AssumeRole接口获取中心账户对应角色的访问权限
  4. 若使用可选的自定义共享策略,你可以将该策略的ARN提供给各个环境账户的管理员,直接附加到对应环境的角色上使用

内容的提问来源于stack exchange,提问作者T Paul Manohar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:18:03