创建向 AWS 服务委派权限的角色 - AWS Identity and Access Management

创建向 AWS 服务委派权限的角色

许多 AWS 服务要求您使用角色来允许该服务代表您访问其他服务中的资源。由一项服务担任、代表您执行操作的角色称为服务角色。如果按服务角色适用的特定目的进行分类,可分为 EC2 实例的服务角色 (举例),或服务相关角色。要查看哪些服务支持使用服务相关角色,或服务是否支持任何形式的临时凭证,请参阅 使用 IAM 的AWS服务。要了解单个服务如何使用角色,请选择表格中的服务名称以查看该服务对应的文档。

设置 PassRole 权限时,应确保用户所传递角色的权限不会超过您希望该用户拥有的权限。例如,可能不允许 Alice 执行任何 Amazon S3 操作。如果 Alice 可以将角色传递给允许 Amazon S3 操作的服务,则该服务可以在执行作业时代表 Alice 执行 Amazon S3 操作。

有关如何通过角色委派权限的信息,请参阅角色术语和概念

服务角色权限

您必须配置权限以允许 IAM 实体(用户或角色)创建或编辑服务角色。

注意

服务相关角色的 ARN 包括服务主体,它在以下策略中显示为 SERVICE-NAME.amazonaws.com。请勿尝试猜测服务主体,因为它区分大小写,并且格式会因 AWS 服务而异。要查看服务的服务主体,请参阅其服务相关角色文档。

允许 IAM 实体创建特定服务角色

将以下策略添加到需要创建服务角色的 IAM 实体中。此策略允许您为指定服务创建具有特定名称的服务角色。然后,可将托管或内联策略附加到该角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreateRole", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" } ] }

允许 IAM 实体创建任何服务角色

AWS 建议您只允许管理用户创建任何服务角色。拥有创建角色和附加任何策略权限的人员可以升级自己的权限。相反,应创建一个策略,允许他们仅创建他们所需的角色,或者让管理员代表他们创建服务角色。

要附加允许管理员访问您整个 AWS 账户 的策略,请使用 AdministratorAccess AWS 托管策略。

允许 IAM 实体编辑服务角色

将以下策略添加到需要编辑服务角色的 IAM 实体中。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EditSpecificServiceRole", "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:PutRolePolicy", "iam:UpdateRole", "iam:UpdateRoleDescription" ], "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" }, { "Sid": "ViewRolesAndPolicies", "Effect": "Allow", "Action": [ "iam:GetPolicy", "iam:ListRoles" ], "Resource": "*" } ] }

允许 IAM 实体删除特定服务角色

将以下语句添加到需要删除指定服务角色的 IAM 实体的权限策略。

{ "Effect": "Allow", "Action": "iam:DeleteRole", "Resource": "arn:aws:iam::*:role/SERVICE-ROLE-NAME" }

允许 IAM 实体删除任何服务相关角色

AWS 建议您只允许管理用户删除任何服务角色。相反,应创建一个策略,允许他们仅删除他们所需的角色,或者让管理员代表他们删除服务角色。

要附加到允许管理员访问您整个 AWS 账户 的策略,请使用 AdministratorAccess AWS 托管策略。

创建用于 AWS 服务的角色(控制台)

您可使用 AWS Management Console创建用于服务的角色。由于某些服务支持多个服务角色,请参阅您的服务的 AWS 文档以查看要选择的使用案例。您可以了解如何为角色分配必要的信任策略和权限策略,以便服务能够代表您担任角色。可用于控制您的角色的权限的步骤可能会有所不同,具体取决于服务如何定义使用案例,以及您是否创建了服务相关角色。

创建用于 AWS 服务 的角色(IAM 控制台)
  1. 登录 AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在 IAM 控制台的导航窗格中,选择角色,然后选择创建角色

  3. 对于 Trusted entity type(可信实体类型),选择 AWS 服务

  4. 对于服务或使用案例,请选择服务,然后选择使用案例。用例由服务定义以包含服务要求的信任策略。

  5. 选择下一步

  6. 对于权限策略,选项取决于您选择的使用案例:

    • 如果服务定义了角色的权限,则您无法选择权限策略。

    • 从一组有限的权限策略中进行选择。

    • 从所有权限策略中进行选择。

    • 不选择任何权限策略,创建角色后创建策略,然后将这些策略附加到该角色。

  7. (可选)设置权限边界。这是一项高级特征,可用于服务角色,但不可用于服务相关角色。

    1. 打开设置权限边界部分,然后选择使用权限边界控制最大角色权限

      IAM 包括您的账户中的 AWS 托管式策略和客户管理型策略的列表。

    2. 选择要用于权限边界的策略。

  8. 选择下一步

  9. 对于角色名称,选项取决于服务:

    • 如果服务定义角色名称,则您无法编辑角色名称。

    • 如果服务定义角色名称的前缀,您可以输入可选的后缀。

    • 如果服务未定义角色名称,您可以为该角色命名。

      重要

      命名角色时,请注意以下事项:

      • 角色名称在您的 AWS 账户 中必须是唯一的,且不能因大小写而变得唯一。

        例如,不要同时创建名为 PRODROLEprodrole 的角色。当角色名称在策略中使用或者作为 ARN 的一部分时,角色名称区分大小写,但是当角色名称在控制台中向客户显示时(例如,在登录期间),角色名称不区分大小写。

      • 创建角色后,您无法编辑该角色的名称,因为其他实体可能会引用该角色。

  10. (可选)对于描述,输入角色的描述。

  11. (可选)要编辑角色的使用案例和权限,请在步骤 1:选择可信实体步骤 2:添加权限部分中选择编辑

  12. (可选)为了帮助识别、组织或搜索角色,请以键值对形式添加标签。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》中的标记 IAM 资源

  13. 检查该角色,然后选择创建角色

创建用于服务的角色 (AWS CLI)

从 AWS CLI 创建角色涉及几个步骤。当您使用控制台创建角色时,很多步骤会自动完成,但是使用 AWS CLI 时,您必须自行完成每一个步骤。您必须创建角色,然后为角色分配权限策略。如果您使用的服务是 Amazon EC2,则还必须创建实例配置文件并向其添加角色。(可选)您还可以为您的角色设置权限边界

从 AWS CLI 为 AWS 服务创建角色
  1. 以下 create-role 命令创建了一个名为 Test-Role 的角色并向其附加了信任策略:

    aws iam create-role --role-name Test-Role --assume-role-policy-document file://Test-Role-Trust-Policy.json

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

    例如,以下内容 attach-role-policy 命令将名为 ReadOnlyAccess 的附加 AWS 托管策略附加到了名为 ReadOnlyRole 的 IAM 角色:

    aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess --role-name ReadOnlyRole

    或者

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

    要添加内联权限策略,请参阅以下示例:

    aws iam put-role-policy --role-name Test-Role --policy-name ExamplePolicy --policy-document file://AdminPolicy.json

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

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

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

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

如果要将角色与 Amazon EC2 或使用 Amazon EC2 的其他 AWS 服务结合使用,则必须将角色存储在实例配置文件中。实例配置文件是一个角色容器,可在启动时附加到 Amazon EC2 实例。一个实例配置文件只能包含一个 角色,不能提高该限制。如果使用 AWS Management Console创建角色,则会为您创建具有与角色相同的名称的实例配置文件。有关实例配置文件的更多信息,请参阅使用实例配置文件。有关如何通过角色启动 EC2 实例的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的控制对 Amazon EC2 资源的访问

创建实例配置文件并在其中存储角色 (AWS CLI)
  1. 创建实例配置文件:aws iam create-instance-profile

  2. 向实例配置文件添加角色:aws iam add-role-to-instance-profile

以下 AWS CLI 示例命令集演示了创建角色并附加权限的前两个步骤。它还演示了创建实例配置文件并将角色添加到该配置文件中的两个步骤。此示例信任策略允许 Amazon EC2 服务担任角色并查看 example_bucket Amazon S3 存储桶。该示例还假设您使用运行 Windows 的客户端计算机,并且已使用您的账户凭证和区域配置了命令行界面。有关更多信息,请参阅配置 AWS 命令行界面

在此示例中,在您创建角色时,在第一个命令中包括以下信任策略。此信任策略允许 Amazon EC2 服务代入角色。

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

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

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

要创建此 Test-Role-for-EC2 角色,您必须先将上述名为 trustpolicyforec2.json 的信任策略和上述名为 permissionspolicyforec2.json 的权限策略保存到您的本地 C: 驱动器中的 policies 目录。然后,您可以使用以下命令来创建角色,附加策略,创建实例配置文件,并将角色添加到实例配置文件中。

# Create the role and attach the trust policy that allows EC2 to assume this role. $ aws iam create-role --role-name Test-Role-for-EC2 --assume-role-policy-document file://C:\policies\trustpolicyforec2.json # Embed the permissions policy (in this example an inline policy) to the role to specify what it is allowed to do. $ aws iam put-role-policy --role-name Test-Role-for-EC2 --policy-name Permissions-Policy-For-Ec2 --policy-document file://C:\policies\permissionspolicyforec2.json # Create the instance profile required by EC2 to contain the role $ aws iam create-instance-profile --instance-profile-name EC2-ListBucket-S3 # Finally, add the role to the instance profile $ aws iam add-role-to-instance-profile --instance-profile-name EC2-ListBucket-S3 --role-name Test-Role-for-EC2

启动 EC2 实例时,如果您使用 AWS 控制台,请在 Configure Instance Details (配置实例详细信息) 页面中指定实例配置文件名称。如果使用 aws ec2 run-instances CLI 命令,请指定 --iam-instance-profile 参数。

创建用于服务的角色 (AWS API)

从 AWS API 创建角色涉及几个步骤。当您使用控制台创建角色时,很多步骤会自动完成,但是使用 API 时,您必须自行完成每一个步骤。您必须创建角色,然后为角色分配权限策略。如果您使用的服务是 Amazon EC2,则还必须创建实例配置文件并向其添加角色。(可选)您还可以为您的角色设置权限边界

为 AWS 服务创建角色 (AWS API)
  1. 创建角色:CreateRole

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

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

    或者

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

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

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

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

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

如果要将角色与 Amazon EC2 或使用 Amazon EC2 的其他 AWS 服务结合使用,则必须将角色存储在实例配置文件中。实例配置文件是角色的容器。每个实例配置文件只能包含一个角色,不能提高该限制。如果在 AWS Management Console中创建角色,则为您创建具有与角色相同的名称的实例配置文件。有关实例配置文件的更多信息,请参阅使用实例配置文件。有关如何通过角色启动 Amazon EC2 实例的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的控制对 Amazon EC2 资源的访问

创建实例配置文件并在其中存储角色 (AWS API)
  1. 创建实例配置文件:CreateInstanceProfile

  2. 向实例配置文件添加角色:AddRoleToInstanceProfile