向用户授予权限以将角色传递给 Amazon 服务
要配置多项 Amazon 服务,您必须将 IAM 角色传递给相应服务。这样可允许服务稍后担任此角色并代表您执行操作。对于大多数服务,您只需要在设置期间(而不是服务每次担任角色时)将角色传递给服务。例如,假定您的一款应用程序在 Amazon EC2 实例上运行。该应用程序需要临时凭证来进行身份验证,以及授权应用程序在 Amazon 中执行操作的权限。在设置该应用程序时,您必须将角色传递给 EC2,以便与提供这些凭证的实例一起使用。通过向角色附加 IAM 策略,您为在实例上运行的应用程序定义权限。该应用程序每次需要执行角色允许的操作时都会担任该角色。
要将角色(及其权限)传递至 Amazon 服务,用户必须具有传递角色 至服务的权限。这有助于管理员确保仅批准的用户可配置具有能够授予权限的角色的服务。要允许用户将角色传递至 Amazon 服务,您必须向用户的 IAM 用户、角色或组授予 PassRole
权限。
您无法使用 ResourceTag/
条件键限制根据附加的标签传递角色的权限。有关更多信息,请参阅 控制对 Amazon 资源的访问。key-name
在创建服务相关角色时,您还必须拥有将该角色传递给服务的权限。在某些服务中执行操作时,该服务自动在您的账户中创建一个服务相关角色。例如,在首次创建 Auto Scaling 组时,Amazon EC2 Auto Scaling 为您创建 AWSServiceRoleForAutoScaling
服务相关角色。如果您在不具备 PassRole
权限的情况下尝试创建 Auto Scaling 组,则会收到错误。如果选择默认角色,则 iam:PassRole
权限可能不是必需的。要了解哪些服务支持服务相关角色,请参阅Amazon使用 IAM 的 服务。要了解在哪些服务中执行操作时自动创建服务相关角色,请选择是链接并查看该服务的服务相关角色文档。
在任何使用角色分配服务权限的 API 操作中,用户都可以将角色 ARN 作为参数进行传递。该服务随后检查该用户是否拥有 iam:PassRole
权限。要限制用户只传递批准的角色,您可以使用 IAM 策略语句的 iam:PassRole
元素筛选 Resources
权限。
您可以在 JSON 策略中使用 Condition
元素来测试所有 Amazon 请求的请求上下文中所包含键的值。要了解有关在策略中使用条件键的更多信息,请参阅 IAM JSON 策略元素:Condition。iam:PassedToService
条件键可用于指定可将角色传递到的服务的服务主体。要了解有关在策略中使用 iam:PassedToService
条件键的更多信息,请参阅 iam:PassedToService。
示例 1
假设您要授予用户在启动实例时能够将任意批准角色组传递至 Amazon EC2 服务的能力。您需要三个部分:
-
IAM 权限策略附加到确定角色可执行哪些任务的角色。将权限范围限定为仅角色必须执行的操作,以及角色进行这些操作所需的资源。您可以使用 Amazon 管理的或客户创建的 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 permissions policy(权限策略),允许该用户仅传递已获批准的那些策略。您通常将
iam:GetRole
添加至iam:PassRole
,使用户能够获取准备进行传递的角色的详细信息。在此示例中,用户只能传递位于指定账户中并且名称以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) 支持名为 Enhanced Monitoring(增强监控)的功能。此功能使 Amazon RDS 能够使用代理监控数据库实例。它还允许 Amazon RDS 将指标记录到 Amazon CloudWatch Logs 中。要启用此功能,您必须创建一个服务角色,以便为 Amazon RDS 提供监控指标和将指标写入日志的权限。
为 Amazon RDS 增强监控创建角色
登录 Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
选择 Role,然后选择 Create role。
-
选择 Amazon Service 角色类型,然后选择 Amazon RDS Role for Enhanced Monitoring 服务。然后选择 Next: Permissions (下一步:权限)。
-
选择 AmazonRDSEnhancedMonitoringRole 权限策略。
-
选择下一步: 标签。
-
(可选) 通过以键值对的形式附加标签来向用户添加元数据。有关在 IAM 中使用标签的更多信息,请参阅 标记 IAM 资源。
-
选择 Next: Review (下一步:审核)。
-
对于 Role name,键入有助于识别此角色的作用的角色名称。角色名称在您的 Amazon 账户内必须是唯一的,并且不区分大小写。例如,您无法同时创建名为
PRODROLE
和prodrole
的角色。由于可能有多种实体引用该角色,在您创建角色后不能编辑角色名称。 -
(可选) 对于 Role description,键入新角色的描述。
-
检查角色,然后选择 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-*"