AWS云形成中的可配置角色

时间:2018-06-08 08:31:24

标签: amazon-web-services amazon-cloudformation amazon-iam

使用AWS,我正在构建一个cloud formation堆栈,用于定义以下内容:

  1. 一些资源(为简单起见,未在下文转录)
  2. 一项名为MyPolicy的政策允许使用这些资源(为简单起见,未在下文转录)
  3. 提交给该政策的名为MyRole的角色
  4. 堆栈将由管理员创建;一旦创建,目标是允许(从堆栈外部)一些用户假设MyRole以便使用多个资源。

    我的问题:如何定义角色以供用户使用(特定用户可以从堆栈外部获得)?

    在AWS帮助页面中,他们提供example其中"Service": [ "ec2.amazonaws.com" ],这意味着 ec2实例可以假设为...但我不明白它如何转化为用户,并没有给出关于该场景的例子。

    下面是我使用JSON格式的堆栈定义:

    {
        "AWSTemplateFormatVersion" : "2010-09-09",
        "Resources" : {
            "MyRole" : {
                "Type": "AWS::IAM::Role",
                "RoleName": "MyRole",
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": { "Service": [ "??" ] },
                            "Action": [ "sts:AssumeRole" ]
                        }
                    ]
                },
                "ManagedPolicyArns": [ { "Fn::GetAtt" : [ "MyPolicy", "Arn" ] } ],
            }
        }
    }
    

1 个答案:

答案 0 :(得分:2)

好问题!只需使用root用户ARN作为主体。这将允许您控制哪个用户可以使用IAM担任该角色。这是一个例子(在YAML中,为了我自己的理智):

  AdministratorRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: administrator
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            AWS: !Sub arn:aws:iam::${AWS::AccountId}:root
          Action: sts:AssumeRole
          Condition:
            Bool:
              aws:MultiFactorAuthPresent: 'true'
      Path: "/"
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/AdministratorAccess

  AssumeAdministratorRolePolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: "AssumeRolePolicy-Administrator"
      Description: "Assume the administrative role"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
        - Sid: "AssumeAdministratorRolePolicy"
          Effect: "Allow"
          Action:
          - "sts:AssumeRole"
          Resource: !GetAtt AdministratorRole.Arn

  AssumeAdministratorRoleGroup:
    Type: AWS::IAM::Group
    Properties:
      GroupName: "AssumeRoleGroup-Administrator"
      ManagedPolicyArns:
      - !Ref AssumeAdministratorRolePolicy

唯一剩下的就是将用户添加到 AssumeRoleGroup-Administrator 组。

奖励:我已添加条件,仅允许使用MFA记录的用户担任该角色。

此外,只需将您的${AWS::AccountId}换成您拥有的其他帐户ID,即可轻松交叉承担角色。