AWS-IAM角色和信任关系

时间:2018-08-25 01:18:16

标签: aws-iam

我是AWS和IAM的新手,并试图了解角色和信任关系。

我完全理解为什么使用角色,如何创建角色及其用例。

我没有得到的是信任关系步骤。在几乎所有情况下,我都看到这是一对一的关系。 EC2需要与EC2的信任。为什么要执行额外的步骤?

如果我创建一个EC2实例和一个具有S3权限的角色,那还不够吗?

2 个答案:

答案 0 :(得分:1)

TLDR: 将 aws 信任关系视为哪些 aws 服务可以实现(承担角色)您授予的权限。

快速示例:如果我创建了一个角色,该角色包含从 s3 读取存储桶的权限,并且 ec2 是此角色中的受信任关系,则只有 ec2 实例可以实现此角色并且可以访问此角色s3 桶。例如 rds 不能承担这个角色,因此不能。您授予权限 x 只有 aws 服务 y 可以使用它们。

让我用一些简单的用例来解释一下:

<块引用>

我希望能够从 s3 下载一些配置文件 存储到我的 Web 应用程序中,Web 应用程序在 ec2 上运行 实例和 s3 存储桶名称是“configuration-for-app”

我正在创建一个名为“my-app-role”的角色,其中包含多个策略,其中一个是 s3 策略,它可以访问我的 s3 亚马逊资源“configuration-for-app”,并且具有仅获取它的明确权限(不删除 i,不更改它 - 只需获取它)。 由于应用程序在 ec2 上运行 - 这些服务之间的此要求中的可信关系为 <ec2> -> <s3> ,因此我在 ec2 上运行的应用程序可以承担该角色 (my-app-role) 并访问(其中包含正确的策略)到 s3 并获取配置文件。

角色包含此政策

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "s3:GetObject"
      "Resource": "arn:aws:s3:::configuration-for-app/*"
    }
  ]
}

可信策略

    {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

我向服务 <x>(运行我的应用程序的 ec2 实例)授予权限(承担“my-app-role”的角色)<y> 以完成操作<z> (从存储桶“configuration-for-app”中获取 s3 配置文件,该角色包含此特定 s3 策略)。

重要 - 如果 aws 中的不同服务(如 rds / elasticsearch / amplify 等...)想要承担此角色并获取此应用程序的配置文件,这是不可能的,因为此示例中只有 ec2 实例具有正确的可信策略。< /p>

答案 1 :(得分:0)

角色用于在特定时间段内向特定角色授予特定特权。因此,角色需要两件事:权限策略(可以访问哪些资源以及可以采取什么操作)和信任策略(实体可以承担什么角色)。

例如,以下CloudFormation片段创建了一个角色(MyInstanceRole)和一个策略(MyWritePolicy),该策略允许访问S3存储桶并允许EC2实例(Principal或信任部分)以承担角色:

MyInstanceRole:
Type: AWS::IAM::Role
Properties:
  AssumeRolePolicyDocument:
    Version: 2012-10-17
    Statement:
    - Effect: Allow
      Action: sts:AssumeRole
      Principal:
        Service: ec2.amazonaws.com
  Path: '/' 
  RoleName: MyInstanceRole
  Policies:
  - PolicyName: MyWritePolicy
    PolicyDocument:
      Version: 2012-10-17
      Statement:
      - Sid: WriteBackups
        Action: 
        - s3:PutObject
        Effect: Allow
        Resource: !Join ['', ['arn:aws:s3:::', !Join [ '-', [ 'bucketName', !Ref Environment ] ], '/*' ] ]

在许多情况下,只有一个Principal,但是如果需要,可以有多个(AWS帐户,IAM用户,IAM角色,联合用户或假定角色用户)。

Now Create and Manage AWS IAM Roles More Easily with the Updated IAM Console上有一个方便的博客文章,其中提供了更多详细信息。