向用户授予权限以将角色传递给 AWS 服务 - AWS Identity and Access Management

向用户授予权限以将角色传递给 AWS 服务

要配置多项 AWS 服务,您必须将 IAM 角色传递给相应服务。这样可允许服务稍后担任此角色并代表您执行操作。对于大多数服务,您只需要在设置期间(而不是服务每次担任角色时)将角色传递给服务。例如,假定您的一款应用程序在 Amazon EC2 实例上运行。该应用程序需要临时凭证来进行身份验证,以及授权应用程序在 AWS 中执行操作的权限。在设置该应用程序时,您必须将角色传递给 EC2,以便与提供这些凭证的实例一起使用。通过向角色附加 IAM 策略,您为在实例上运行的应用程序定义权限。该应用程序每次需要执行角色允许的操作时都会担任该角色。

要将角色(及其权限)传递至 AWS 服务,用户必须具有传递角色 至服务的权限。这有助于管理员确保仅批准的用户可配置具有能够授予权限的角色的服务。要允许用户将角色传递至 AWS 服务,您必须向用户的 IAM 用户、角色或组授予 PassRole 权限。

注意

您无法使用 ResourceTag/key-name 条件键限制根据附加的标签传递角色的权限。有关更多信息,请参阅 控制对 AWS 资源的访问

在创建服务相关角色时,您还必须拥有将该角色传递给服务的权限。在某些服务中执行操作时,该服务自动在您的账户中创建一个服务相关角色。例如,在首次创建 Auto Scaling 组时,Amazon EC2 Auto Scaling 为您创建 AWSServiceRoleForAutoScaling 服务相关角色。如果您在不具备 PassRole 权限的情况下尝试创建 Auto Scaling 组,则会收到错误。如果选择默认角色,则 iam:PassRole 权限可能不是必需的。要了解哪些服务支持服务相关角色,请参阅使用 IAM 的 AWS 服务。要了解在哪些服务中执行操作时自动创建服务相关角色,请选择链接并查看该服务的服务相关角色文档。

在任何使用角色分配服务权限的 API 操作中,用户都可以将角色 ARN 作为参数进行传递。该服务随后检查该用户是否拥有 iam:PassRole 权限。要限制用户只传递批准的角色,您可以使用 IAM 策略语句的 iam:PassRole 元素筛选 Resources 权限。

您可以在 JSON 策略中使用 Condition 元素来测试所有 AWS 请求的请求上下文中所包含键的值。要了解有关在策略中使用条件键的更多信息,请参阅 IAM JSON 策略元素:Conditioniam:PassedToService 条件键可用于指定可将角色传递到的服务的服务委托人。要了解有关在策略中使用 iam:PassedToService 条件键的更多信息,请参阅 iam:PassedToService

示例 1

假设您要授予用户在启动实例时能够将任意批准角色组传递至 Amazon EC2 服务的能力。您需要三个部分:

  • IAM 权限策略附加到确定角色可执行哪些任务的角色。将权限范围限定为仅角色必须执行的操作,以及角色进行这些操作所需的资源。您可以使用 AWS 管理的或客户创建的 IAM 权限策略。

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "A list of the permissions the role is allowed to use" ], "Resource": [ "A list of the resources the role is allowed to access" ] } }
  • 允许服务担任角色的信任策略。例如,您可以将以下信任策略与具有 UpdateAssumeRolePolicy 操作的角色进行附加。该信任策略允许 Amazon EC2 使用角色和附加在角色上的权限。

    { "Version": "2012-10-17", "Statement": { "Sid": "TrustPolicyStatementThatAllowsEC2ServiceToAssumeTheAttachedRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  • 附加至 IAM 用户的权限策略,允许该用户仅传递已获批准的那些策略。iam:PassRole 通常与 iam:GetRole 共同使用,使用户能够获取准备进行传递的角色的详细信息。在此示例中,用户只能传递位于指定账户中并且名称以 EC2-roles-for-XYZ- 开头的角色:

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::<account-id>:role/EC2-roles-for-XYZ-*" }] }

现在用户可以启动具有所分配角色的 Amazon EC2 实例。实例上运行的应用程序可以通过实例配置文件元数据访问角色的临时许可。附加到角色的许可策略确定实例可以执行的任务。

示例 2

Amazon Relational Database Service (Amazon RDS) 支持名为“增强监控”的功能。此功能使 Amazon RDS 能够使用代理监控数据库实例。它还允许 Amazon RDS 将指标记录到 Amazon CloudWatch Logs 中。要启用此功能,您必须创建一个服务角色,以便为 Amazon RDS 提供监控指标和将指标写入日志的权限。

为 Amazon RDS 增强监控创建角色

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

  2. 选择 Role,然后选择 Create role

  3. 选择 AWS Service 角色类型,然后选择 Amazon RDS Role for Enhanced Monitoring 服务。然后选择 Next: Permissions (下一步:权限)

  4. 选择 AmazonRDSEnhancedMonitoringRole 权限策略。

  5. 选择下一步: 标签

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

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

  8. 对于 Role name,键入有助于识别此角色的作用的角色名称。角色名称在您的 AWS 账户内必须是唯一的。名称不区分大小写。例如,您无法同时创建名为 PRODROLEprodrole 的角色。由于多个单位可能引用该角色,角色创建完毕后无法编辑角色名称。

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

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

角色自动获得授予 monitoring.rds.amazonaws.com 服务担任角色权限的信任策略。在此之后,Amazon RDS 可执行 AmazonRDSEnhancedMonitoringRole 策略允许的所有操作。

您希望启用强化监控的用户需要包括允许用户传递角色语句的策略,如下。使用您的账户号码,然后使用您在步骤 8 中提供的名称替换角色名称:

{ "Sid": "PolicyStatementToAllowUserToPassOneSpecificRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::<account-id>:role/RDS-Monitoring-Role" }

您可以将该语句与另一策略中的语句进行合并,或将此语句放在其自身策略中。如要指定用户可传递以 RDS-开始的任何角色,您可以在资源 ARN 中使用通配符替换角色名称,例如:

"Resource": "arn:aws:iam::<account-id>:role/RDS-*"