创建向 Amazon 服务委派权限的角色
许多 Amazon 服务要求您使用角色来允许该服务代表您访问其他服务中的资源。由一项服务担任、代表您执行操作的角色称为服务角色。如果按服务角色适用的特定目的进行分类,可分为 EC2 实例的服务角色 (举例),或服务相关角色。要查看哪些服务支持使用服务相关角色,或服务是否支持任何形式的临时凭证,请参阅 使用 IAM 的Amazon服务。要了解单个服务如何使用角色,请选择表格中的服务名称以查看该服务对应的文档。
有关如何通过角色委派权限的信息,请参阅角色术语和概念。
服务角色权限
您必须配置权限以允许 IAM 实体(用户或角色)创建或编辑服务角色。
注意
服务相关角色的 ARN 包括服务主体,它在以下策略中显示为
。请勿尝试猜测服务主体,因为它区分大小写,并且格式会因 Amazon 服务而异。要查看服务的服务主体,请参阅其服务相关角色文档。SERVICE-NAME
.amazonaws.com
允许 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 实体创建任何服务角色
Amazon 建议您只允许管理用户创建任何服务角色。拥有创建角色和附加任何策略权限的人员可以升级自己的权限。相反,应创建一个策略,允许他们仅创建他们所需的角色,或者让管理员代表他们创建服务角色。
要附加允许管理员访问您整个 Amazon Web Services 账户 的策略,请使用 AdministratorAccess
允许 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 实体删除任何服务相关角色
Amazon 建议您只允许管理用户删除任何服务角色。相反,应创建一个策略,允许他们仅删除他们所需的角色,或者让管理员代表他们删除服务角色。
要附加到允许管理员访问您整个 Amazon Web Services 账户 的策略,请使用 AdministratorAccess
创建用于 Amazon 服务的角色(控制台)
您可使用 Amazon Web Services Management Console创建用于服务的角色。由于某些服务支持多个服务角色,请参阅您的服务的 Amazon 文档以查看要选择的使用案例。您可以了解如何为角色分配必要的信任策略和权限策略,以便服务能够代表您担任角色。可用于控制您的角色的权限的步骤可能会有所不同,具体取决于服务如何定义使用案例,以及您是否创建了服务相关角色。
创建用于 Amazon 服务的角色(控制台)
登录Amazon Web Services Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在 IAM 控制台的导航窗格中,选择 Roles,然后选择 Create role。
-
对于选择可信实体,选择 Amazon 服务。
-
选择用于您的服务的使用案例。使用案例由服务定义以包含服务所需的信任策略。然后选择下一步。
-
如果可能,选择要用作权限策略的策略,或选择 Create policy(创建策略)以打开新的浏览器选项卡并从头开始创建新策略。有关更多信息,请参阅创建 IAM policy。在您创建策略后,关闭该选项卡并返回到您的原始选项卡。选中您希望服务具有的权限策略旁边的复选框。
根据您选择的使用案例,该服务可能允许您执行以下任意操作:
-
不执行任何操作,因为该服务为角色定义了权限。
-
从一组有限的权限中进行选择。
-
从任何权限中进行选择。
-
此时可以不选择任何策略,稍后创建策略,然后将其附加到角色。
-
-
(可选)设置权限边界。这是一项高级功能,可用于服务角色,但不可用于服务相关角色。
展开 Permissions boundary(权限边界)部分,然后选择 Use a permissions boundary to control the maximum role permissions(使用权限边界控制最大角色权限)。IAM 包括您的账户中的 Amazon 托管策略和客户托管策略的列表。选择要用于权限边界的策略,或选择 Create policy(创建策略)以打开新的浏览器选项卡并从头开始创建新策略。有关更多信息,请参阅创建 IAM policy。在您创建策略后,关闭该选项卡并返回到您的原始选项卡,以选择要用于权限边界的策略。
-
选择 Next(下一步)。
-
对于 Role name (角色名称),角色名称自定义的程度由服务定义。如果服务定义角色的名称,则此选项不可编辑。在其他情况下,服务可能定义角色的前缀并允许您键入可选的后缀。某些服务允许您指定角色的整个名称。
如果可能,输入有助于识别该角色的作用的角色名称或角色名称后缀。角色名称在您的 Amazon Web Services 账户 内必须是唯一的。名称不区分大小写。例如,您无法同时创建名为
PRODROLE
和prodrole
的角色。由于其他 Amazon 资源可能引用该角色,角色创建完毕后无法编辑角色名称。 -
(可选)对于 Description(描述),输入新角色的描述。
-
在 Step 1: Select trusted entities(步骤 1:选择可信实体)或 Step 2: Add permissions(步骤 2:添加权限)部分中的 Edit(编辑),以编辑角色的用户案例和权限。
-
(可选)通过以键值对的形式附加标签来向角色添加元数据。有关在 IAM 中使用标签的更多信息,请参阅 标记 IAM 资源。
-
检查角色,然后选择 Create role。
创建用于服务的角色 (Amazon CLI)
从 Amazon CLI 创建角色涉及几个步骤。当您使用控制台创建角色时,很多步骤会自动完成,但是使用 Amazon CLI 时,您必须自行完成每一个步骤。您必须创建角色,然后为角色分配权限策略。如果您使用的服务是 Amazon EC2,则还必须创建实例配置文件并向其添加角色。(可选)您还可以为您的角色设置权限边界。
从 Amazon CLI 为 Amazon 服务创建角色
-
以下
create-role
命令创建了一个名为 Test-Role 的角色并向其附加了信任策略:aws iam create-role --role-name Test-Role --assume-role-policy-document file://Test-Role-Trust-Policy.json
-
将托管权限策略附加到角色:aws iam attach-role-policy。
例如,以下内容
attach-role-policy
命令将名为ReadOnlyAccess
的附加 Amazon 托管策略附加到了名为ReadOnlyRole
的 IAM 角色:aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess --role-name ReadOnlyRole
or
为角色创建内联权限策略:aws iam put-role-policy
要添加内联权限策略,请参阅以下示例:
aws iam put-role-policy --role-name Test-Role --policy-name ExamplePolicy --policy-document file://AdminPolicy.json
-
(可选)通过附加标签来向角色添加自定义属性:aws iam tag-role
有关更多信息,请参阅管理 IAM 角色(Amazon CLI 或 Amazon API)的标签。
-
(可选)为角色设置权限边界:aws iam put-role-permissions-boundary
权限边界控制角色可以具有的最大权限。权限边界是一项高级 Amazon 功能。
如果要将角色与 Amazon EC2 或使用 Amazon EC2 的其他 Amazon 服务结合使用,则必须将角色存储在实例配置文件中。实例配置文件是一个角色容器,可在启动时附加到 Amazon EC2 实例。一个实例配置文件只能包含一个 角色,不能提高该限制。如果使用 Amazon Web Services Management Console创建角色,则会为您创建具有与角色相同的名称的实例配置文件。有关实例配置文件的更多信息,请参阅使用实例配置文件。有关如何通过角色启动 EC2 实例的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的控制对 Amazon EC2 资源的访问。
创建实例配置文件并在其中存储角色 (Amazon CLI)
-
创建实例配置文件:aws iam create-instance-profile
-
向实例配置文件添加角色:aws iam add-role-to-instance-profile
以下 Amazon CLI 示例命令集演示了创建角色并附加权限的前两个步骤。它还演示了创建实例配置文件并将角色添加到该配置文件中的两个步骤。此示例信任策略允许 Amazon EC2 服务担任角色并查看 example_bucket
Amazon S3 存储桶。该示例还假设您使用运行 Windows 的客户端计算机,并且已使用您的账户凭证和区域配置了命令行界面。有关更多信息,请参阅配置 Amazon 命令行界面。
在此示例中,在您创建角色时,在第一个命令中包括以下信任策略。此信任策略允许 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 实例时,如果您使用 Amazon 控制台,请在 Configure Instance Details (配置实例详细信息) 页面中指定实例配置文件名称。如果使用 aws ec2 run-instances
CLI 命令,请指定 --iam-instance-profile
参数。
创建用于服务的角色 (Amazon API)
从 Amazon API 创建角色涉及几个步骤。当您使用控制台创建角色时,很多步骤会自动完成,但是使用 API 时,您必须自行完成每一个步骤。您必须创建角色,然后为角色分配权限策略。如果您使用的服务是 Amazon EC2,则还必须创建实例配置文件并向其添加角色。(可选)您还可以为您的角色设置权限边界。
为 Amazon 服务创建角色 (Amazon API)
-
创建角色:CreateRole
您可以指定一个文件位置作为角色的信任策略。
-
将托管权限策略附加到角色:AttachRolePolicy
or
为角色创建内联权限策略:PutRolePolicy
-
(可选)通过附加标签来向用户添加自定义属性:TagRole
有关更多信息,请参阅管理 IAM 用户(Amazon CLI 或 Amazon API)的标签。
-
(可选)为角色设置权限边界:PutRolePermissionsBoundary
权限边界控制角色可以具有的最大权限。权限边界是一项高级 Amazon 功能。
如果要将角色与 Amazon EC2 或使用 Amazon EC2 的其他 Amazon 服务结合使用,则必须将角色存储在实例配置文件中。实例配置文件是角色的容器。每个实例配置文件只能包含一个角色,不能提高该限制。如果在 Amazon Web Services Management Console中创建角色,则为您创建具有与角色相同的名称的实例配置文件。有关实例配置文件的更多信息,请参阅使用实例配置文件。有关如何通过角色启动 Amazon EC2 实例的信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的控制对 Amazon EC2 资源的访问。
创建实例配置文件并在其中存储角色 (Amazon API)
-
创建实例配置文件:CreateInstanceProfile
-
向实例配置文件添加角色:AddRoleToInstanceProfile