首页 > 解决方案 > 可以创建策略并将策略共享给多个帐户的角色

问题描述

我正在尝试在一个 AWS 账户中创建一个策略,并且需要将该策略共享给多个账户(Prod、Dev、Sandbox)中的一个角色。

我可以手动添加 AWS 帐号并将 AWS Managed Policy 分配给角色,并且还需要创建多个角色。

我们怎样才能做到这一点?

这是我写的代码

 AWSTemplateFormatVersion: '2010-09-09'
Description: 'Create a role that authorizes access to users in another account'
Metadata:
  Version: 0.7
Parameters:
  RoleName:
    Type: String
    Default: R_EC2-Describe-Instance
  MainAccountId:
    Type: String
    Description: >-
     Include the Managed Services Account ID(the account ID where the Main VPC is registered)
    Default: 111111111111
    MaxLength: 12
    MinLength: 12 

Resources:
  AssumeRole:
    Type: AWS::IAM::Policy
    Properties:
      RoleName: !Ref RoleName
      Policies:
          -
            PolicyName: "CoreSVC-Describe-EC2"
            PolicyDocument:
              Version: "2012-10-17"
              Statement:
                -
                  Effect: "Allow"
                  Action: 
                   - 'sts:AssumeRole'
                  Resource: !Join [ "", [ "arn:aws:iam::", !Ref MainAccountId, ":role/R_EC2-Describe-Instance" ] ]
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        ManagedPolicyName: 
          - "arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAcess"  
        Statement:
        - Effect: Allow
          Principal: 
            "AWS": !Join [ "", [ "arn:aws:iam::", !Ref MainAccountId, ":root" ] ]
          Action:
          - sts:AssumeRole
          Condition: {}

标签: amazon-web-servicesamazon-cloudformationamazon-iam

解决方案


您不能与其他账户共享 IAM策略,因为它没有资源策略来允许它。

您共享的代码示例是与多个账户共享 IAM角色,这可以通过角色的资源/信任策略来实现。

如果您想在多个账户之间共享相同的策略,那么您可能应该使用CloudFormation StackSets(如 @ervin-szilagyi 所述)或其他一些基础设施即代码方法。

如果您想与其他帐户共享角色,那么您已经完成了。所缺少的只是这些帐户中有权访问sts:AssumeRole操作的角色,以便它可以承担您在代码中共享的角色。


推荐阅读