创建向 IAM 用户委派权限的角色 - AWS Identity and Access Management

创建向 IAM 用户委派权限的角色

您可以使用 IAM 角色委派对 AWS 资源的访问权限。利用 IAM 角色,您可以在您的信任账户和其他 AWS 受信任账户之间建立信任关系。信任账户拥有要访问的资源,受信任账户包含需要资源访问权限的用户。但是,其他账户可以拥有您的账户中的资源。例如,信任账户可能允许受信任账户创建新资源,例如在 Amazon S3 存储桶中创建新对象。在这种情况下,创建资源的账户拥有资源并控制谁可以访问该资源。

创建信任关系后,来自受信任账户的 IAM 用户或应用程序可以使用 AWS Security Token Service ( AWS STS ) AssumeRole API 操作。此操作提供临时安全凭证,可用于访问您账户中的 AWS 资源。

账户可由您进行控制,或者具有用户的账户可由第三方进行控制。如果另一个具有用户的账户是您无法控制的 AWS 账户,则可使用 externalId 属性。外部 ID 可以是您和第三方账户管理员之间达成一致的任何字词或数字。此选项会在信任策略中自动添加一个条件,即仅当请求包括正确的 sts:ExternalID 时,该用户才担任该角色。有关更多信息,请参阅 如何在向第三方授予对 AWS 资源的访问权时使用外部 ID

有关如何使用角色委派权限的信息,请参阅角色术语和概念。有关使用服务角色以允许服务访问账户中的资源的信息,请参阅创建向 AWS 服务委派权限的角色

创建 IAM 角色(控制台)

您可以使用 AWS Management Console 创建 IAM 用户可担任的角色。例如,假设贵组织拥有多个 AWS 账户以便将开发环境与生产环境隔离。有关设置和使用角色(该角色允许开发账户中的用户访问生产账户中的资源)的必要步骤的描述,请参阅 使用不同的开发和生产账户的示例方案

创建角色(控制台)

  1. 登录 AWS Management Console,打开 IAM 控制台 https://console.aws.amazon.com/iam/

  2. 在控制台的导航窗格中,选择 Roles,然后选择 Create role

  3. 选择 Another AWS account(其他亚马逊云科技账户)角色类型。

  4. 对于 Account ID (账户 ID),键入您希望向其授予对资源的访问权限的 AWS 账户 ID。

    指定账户的管理员可向该账户中的任何 IAM 用户授予担任该角色的权限。为此,管理员需要将策略附加到用户或组来授予 sts:AssumeRole 操作的权限。该策略必须指定角色的 ARN 作为 Resource

  5. 如果您向不受您控制的账户的用户授予权限,并且用户将以编程方式担任此角色,请选择需要外部 ID。外部 ID 可以是您和第三方账户管理员之间达成一致的任何字词或数字。此选项会在信任策略中自动添加一个条件,即仅当请求包括正确的 sts:ExternalID 时,该用户才担任该角色。有关更多信息,请参阅 如何在向第三方授予对 AWS 资源的访问权时使用外部 ID

    重要

    选择此选项将仅允许通过 AWS CLI、Tools for Windows PowerShell 或 AWS API 访问该角色。这是因为,您不能使用 AWS 控制台切换到其信任策略中有 externalId 条件的角色。但您可以通过使用相关开发工具包编写脚本或应用程序,以编程方式创建此类访问。有关更多信息和示例脚本,请参阅 AWS 安全博客中的如何启用对 AWS Management Console 的跨账户访问

  6. 如果需要将该角色限制为使用多重身份验证 (MFA) 进行登录的用户,请选择 Require MFA。这将向角色的信任策略中添加用于检查 MFA 登录的条件。需要担任角色的用户必须使用配置的 MFA 设备中的临时一次性密码进行登录。没有经过 MFA 身份验证的用户无法担任该角色。有关 MFA 的更多信息,请参阅在 AWS 中使用多重身份验证 (MFA)

  7. 选择下一步:权限

  8. IAM 包括您的账户中的 AWS 托管策略和客户托管策略的列表。选择要用于权限策略的策略,或选择创建策略以打开新的浏览器选项卡并从头开始创建新策略。有关更多信息,请参阅过程创建 IAM 策略中的步骤 4。在您创建策略后,关闭该选项卡并返回到您的原始选项卡。选中您希望担任角色的任何人具有的权限策略旁边的复选框。如果您愿意,此时可以不选择任何策略,稍后将策略附加到角色。默认情况下,角色没有权限。

  9. (可选)设置权限边界。这是一项高级功能。

    打开设置权限边界部分,然后选择使用权限边界控制最大角色权限。选择要用于权限边界的策略。

  10. 选择下一步: 标签

  11. (可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅 标记 IAM 资源

  12. 选择 Next: Review (下一步: 审核)

  13. 对于 Role name,为您的角色键入一个名称。角色名称在您的 AWS 账户内必须是唯一的。名称不区分大小写。例如,您无法同时创建名为 PRODROLEprodrole 的角色。由于其他 AWS 资源可能引用该角色,角色创建完毕后无法编辑角色名称。

  14. (可选) 对于 Role description,键入新角色的描述。

  15. 检查角色,然后选择 Create role

    重要

    请注意,这只是所需配置的前半部分。您还必须向受信任账户中的各个用户授予在控制台中切换到此角色或以编程方式担任此角色的权限。有关这一步骤的更多信息,请参阅向用户授予切换角色的权限

创建 IAM 角色 (AWS CLI)

从 AWS CLI 创建角色涉及几个步骤。当您使用控制台创建角色时,很多步骤会自动完成,但是使用 AWS CLI 时,您必须自行完成每一个步骤。您必须创建角色,然后为角色分配权限策略。(可选)您还可以为您的角色设置权限边界

创建用于跨账户访问的角色 (AWS CLI)

  1. 创建角色:aws iam create-role

  2. 将托管权限策略附加到角色:aws iam attach-role-policy

    为角色创建内联权限策略:aws iam put-role-policy

  3. (可选)通过附加标签来向角色添加自定义属性:aws iam tag-role

    有关更多信息,请参阅 管理 IAM 角色(AWS CLI 或 AWS API)的标签

  4. (可选)为角色设置权限边界aws iam put-role-permissions-boundary

    权限边界控制角色可以具有的最大权限。权限边界是一项高级 AWS 功能。

以下示例演示了在简单环境中创建跨账户角色的前两个最常见的步骤。此示例允许 123456789012 账户中的任何用户担任角色并查看 example_bucket Amazon S3 存储桶。该示例还假设您使用运行 Windows 的客户端计算机,并且已使用您的账户凭证和区域配置了命令行界面。有关更多信息,请参阅配置 AWS 命令行界面

在此示例中,在您创建角色时,在第一个命令中包括以下信任策略。此信任策略允许 123456789012 账户中的用户使用 AssumeRole 操作担任角色,但前提是用户使用 SerialNumberTokenCode 参数提供 MFA 身份验证。有关 MFA 的更多信息,请参阅 在 AWS 中使用多重身份验证 (MFA)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } } ] }
重要

如果 Principal 元素中包含特定 IAM 角色或用户的 ARN,在保存策略时该 ARN 将转换为唯一的委托人 ID。如果有人希望通过删除并重新创建角色或用户来提升权限,这样有助于减轻此类风险。您通常不会在控制台中看到这个 ID,因为显示信任策略时它还会反向转换为 ARN。但是,如果您删除角色或用户,则委托人 ID 会显示在控制台中,因为 AWS 无法再将其映射回 ARN。因此,如果您删除并重新创建了信任策略的 Principal 元素所引用的用户或角色,您必须编辑角色以替换 ARN。

当您使用第二个命令时,您必须将现有托管策略附加到角色。下面的权限策略仅允许担任角色的任何人对 example_bucket Amazon S3 存储桶执行 ListBucket 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example_bucket" } ] }

要创建此 Test-UserAccess-Role 角色,您必须先将名为 trustpolicyforacct123456789012.json 的上述信任策略保存到本地 policies 驱动器中的 C: 文件夹。然后,使用名称 AWS 将上述权限策略保存为您的 PolicyForRole 账户中的客户托管策略。然后您可以使用以下命令来创建角色并附加托管策略。

# Create the role and attach the trust policy file that allows users in the specified account to assume the role. $ aws iam create-role --role-name Test-UserAccess-Role --assume-role-policy-document file://C:\policies\trustpolicyforacct123456789012.json # Attach the permissions policy (in this example a managed policy) to the role to specify what it is allowed to do. $ aws iam attach-role-policy --role-name Test-UserAccess-Role --policy-arn arn:aws:iam::123456789012:role/PolicyForRole
重要

请注意,这只是所需配置的前半部分。您还必须对受信任账户中的各个用户授予切换角色的权限。有关这一步骤的更多信息,请参阅向用户授予切换角色的权限

在创建角色并向该角色授予执行 AWS 任务或访问 AWS 资源的权限后,123456789012 账户中的任何用户都可以担任该角色。有关更多信息,请参阅 切换到 IAM 角色 (AWS CLI)

创建 IAM 角色 (AWS API)

从 AWS API 创建角色涉及几个步骤。当您使用控制台创建角色时,很多步骤会自动完成,但是使用 API 时,您必须自行完成每一个步骤。您必须创建角色,然后为角色分配权限策略。(可选)您还可以为您的角色设置权限边界

在代码中创建角色 (AWS API)

  1. 创建角色:CreateRole

    您可以指定一个文件位置作为角色的信任策略。

  2. 将托管权限策略附加到角色:AttachRolePolicy

    为角色创建内联权限策略:PutRolePolicy

    重要

    请注意,这只是所需配置的前半部分。您还必须对受信任账户中的各个用户授予切换角色的权限。有关这一步骤的更多信息,请参阅向用户授予切换角色的权限

  3. (可选)通过附加标签来向用户添加自定义属性:TagRole

    有关更多信息,请参阅 管理 IAM 用户(AWS CLI 或 AWS API)的标签

  4. (可选)为角色设置权限边界PutRolePermissionsBoundary

    权限边界控制角色可以具有的最大权限。权限边界是一项高级 AWS 功能。

在创建角色并向该角色授予执行 AWS 任务或访问 AWS 资源的权限后,您必须向账户中的用户授予允许他们担任该角色的权限。有关担任角色的更多信息,请参阅 切换到 IAM 角色 (AWS API)

创建 IAM 角色 (AWS CloudFormation)

有关在 AWS CloudFormation 中创建 IAM 角色的信息,请参阅 AWS CloudFormation 用户指南中的资源和属性参考示例

有关 AWS CloudFormation 中的 IAM 模板的更多信息,请参阅AWS CloudFormation用户指南中的 AWS Identity and Access Management 模板代码段