【问题标题】:Assumable role in an AWS cloud formation在 AWS 云形成中的假定角色
【发布时间】:2018-11-18 06:32:27
【问题描述】:

使用 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" ] } ],
        }
    }
}

【问题讨论】:

  • 抱歉,您的问题有点不清楚。 “为了被用户接受”是什么意思?您是否要授予在用户可能没有必要权限自行部署这些资源的情况下创建堆栈的权限,或者您是否尝试在资源创建后授予使用这些资源的权限?请编辑您的问题以提供更多详细信息,并举例说明您希望他们能够做到的事情,而如果没有这样的配置,他们将无法做到。
  • 如果您询问如何将 IAM 用户指定为 IAM 角色中的委托人,请参阅docs.aws.amazon.com/IAM/latest/UserGuide/…

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 2019-06-18
    • 2017-12-02
    • 2017-05-21
    • 2021-04-29
    • 2020-01-19
    • 2020-04-14
    • 2019-07-02
    • 2020-07-22
    相关资源
    最近更新 更多