amazon-web-services - 在 AWS 云形成中承担的角色

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

使用 AWS,我正在构建一个 cloud formation堆栈定义如下:

  1. 一些资源(为了简单起见,下面不再转录)
  2. 名为 MyPolicy 的策略,允许使用这些资源(为了简单起见,下面不再转录)
  3. 提交给该政策的名为 MyRole 的角色

堆栈将由管理员创建;创建后,目标是允许(从堆栈外部)一些用户承担 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" ] } ],
        }
    }
}

最佳答案

好问题!只需使用您的根用户 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,您就可以轻松地跨账户承担角色。

关于amazon-web-services - 在 AWS 云形成中承担的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50756537/

相关文章:

amazon-web-services - 我什么时候需要 CAPABILITY_NAMED_IAM

amazon-web-services - 如何创建基于身份的策略策略允许 iam :CreateRole action

linux - 使用 Linux Find 并将内容通过管道传送到 S3 存储桶

amazon-web-services - Amazon Hive 中的多分隔符 SerDe 设置

python - CLI 命令的 boto 解释

python - cfn-init 退出并出现错误 - DistributionNotFound : pystache>=0. 4.0

amazon-web-services - 如何在aws cloudformation中启动Web服务器?

ios - 无法将带有框架的应用程序上传到 iTunes Connect

aws-cloudformation - 具有方法限制的使用计划的 Cloudformation