创建向 AWS 服务委派权限的角色
许多 AWS 服务要求您使用角色来允许该服务代表您访问其他服务中的资源。由一项服务担任、代表您执行操作的角色称为服务角色。当某角色为某项服务提供专门用途时,它会被归类为服务相关角色。要查看哪些服务支持使用服务相关角色,或服务是否支持任何形式的临时凭证,请参阅 使用 IAM 的AWS服务。要了解单个服务如何使用角色,请选择表格中的服务名称以查看该服务对应的文档。
设置 PassRole
权限时,应确保用户所传递角色的权限不会超过您希望该用户拥有的权限。例如,可能不允许 Alice 执行任何 Amazon S3 操作。如果 Alice 可以将角色传递给允许 Amazon S3 操作的服务,则该服务可以在执行作业时代表 Alice 执行 Amazon S3 操作。
有关如何通过角色委派权限的信息,请参阅角色术语和概念。
服务角色权限
您必须配置权限以允许 IAM 实体(用户或角色)创建或编辑服务角色。
注意
服务相关角色的 ARN 包括服务主体,它在以下策略中显示为
。请勿尝试猜测服务主体,因为它区分大小写,并且格式会因 AWS 服务而异。要查看服务的服务主体,请参阅其服务相关角色文档。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 实体创建任何服务角色
AWS 建议您只允许管理用户创建任何服务角色。拥有创建角色和附加任何策略权限的人员可以升级自己的权限。相反,应创建一个策略,允许他们仅创建他们所需的角色,或者让管理员代表他们创建服务角色。
要附加允许管理员访问您整个 AWS 账户 的策略,请使用 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 实体删除任何服务相关角色
AWS 建议您只允许管理用户删除任何服务角色。相反,应创建一个策略,允许他们仅删除他们所需的角色,或者让管理员代表他们删除服务角色。
要附加到允许管理员访问您整个 AWS 账户 的策略,请使用 AdministratorAccess
创建用于 AWS 服务的角色(控制台)
您可使用 AWS Management Console创建用于服务的角色。由于某些服务支持多个服务角色,请参阅您的服务的 AWS 文档以查看要选择的使用案例。您可以了解如何为角色分配必要的信任策略和权限策略,以便服务能够代表您担任角色。可用于控制您的角色的权限的步骤可能会有所不同,具体取决于服务如何定义使用案例,以及您是否创建了服务相关角色。
创建用于 AWS 服务 的角色(IAM 控制台)
登录 AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在 IAM 控制台的导航窗格中,选择角色,然后选择创建角色。
-
对于 Trusted entity type(可信实体类型),选择 AWS 服务。
-
对于服务或使用案例,请选择服务,然后选择使用案例。用例由服务定义以包含服务要求的信任策略。
-
选择下一步。
-
对于权限策略,选项取决于您选择的使用案例:
-
如果服务定义了角色的权限,则您无法选择权限策略。
-
从一组有限的权限策略中进行选择。
-
从所有权限策略中进行选择。
-
不选择任何权限策略,创建角色后创建策略,然后将这些策略附加到该角色。
-
-
(可选)设置权限边界。这是一项高级特征,可用于服务角色,但不可用于服务相关角色。
-
打开设置权限边界部分,然后选择使用权限边界控制最大角色权限。
IAM 包括您的账户中的 AWS 托管式策略和客户管理型策略的列表。
选择要用于权限边界的策略。
-
-
选择下一步。
-
对于角色名称,选项取决于服务:
-
如果服务定义角色名称,则您无法编辑角色名称。
-
如果服务定义角色名称的前缀,您可以输入可选的后缀。
-
如果服务未定义角色名称,您可以为该角色命名。
重要
命名角色时,请注意以下事项:
-
角色名称在您的 AWS 账户 中必须是唯一的,且不能因大小写而变得唯一。
例如,不要同时创建名为
PRODROLE
和prodrole
的角色。当角色名称在策略中使用或者作为 ARN 的一部分时,角色名称区分大小写,但是当角色名称在控制台中向客户显示时(例如,在登录期间),角色名称不区分大小写。 -
创建角色后,您无法编辑该角色的名称,因为其他实体可能会引用该角色。
-
-
-
(可选)对于描述,输入角色的描述。
-
(可选)要编辑角色的使用案例和权限,请在步骤 1:选择可信实体或步骤 2:添加权限部分中选择编辑。
-
(可选)为了帮助识别、组织或搜索角色,请以键值对形式添加标签。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》中的标记 IAM 资源。
-
检查该角色,然后选择创建角色。
创建用于服务的角色 (AWS CLI)
从 AWS CLI 创建角色涉及几个步骤。当您使用控制台创建角色时,很多步骤会自动完成,但是使用 AWS CLI 时,您必须自行完成每一个步骤。您必须创建角色,然后为角色分配权限策略。如果您使用的服务是 Amazon EC2,则还必须创建实例配置文件并向其添加角色。(可选)您还可以为您的角色设置权限边界。
从 AWS CLI 为 AWS 服务创建角色
-
以下
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
的附加 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
-
(可选)通过附加标签来向角色添加自定义属性:aws iam tag-role
有关更多信息,请参阅 管理 IAM 角色(AWS CLI 或 AWS API)的标签。
-
(可选)为角色设置权限边界:aws iam put-role-permissions-boundary
权限边界控制角色可以具有的最大权限。权限边界是一项高级 AWS 功能。
如果要将角色与 Amazon EC2 或使用 Amazon EC2 的其他 AWS 服务结合使用,则必须将角色存储在实例配置文件中。实例配置文件是一个角色容器,可在启动时附加到 Amazon EC2 实例。一个实例配置文件只能包含一个 角色,不能提高该限制。如果使用 AWS Management Console创建角色,则会为您创建具有与角色相同的名称的实例配置文件。有关实例配置文件的更多信息,请参阅使用实例配置文件。有关如何通过角色启动 EC2 实例的信息,请参阅《Amazon EC2 用户指南》中的控制对 Amazon EC2 资源的访问。
创建实例配置文件并在其中存储角色 (AWS CLI)
-
创建实例配置文件:aws iam create-instance-profile
-
向实例配置文件添加角色: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)
-
创建角色:CreateRole
您可以指定一个文件位置作为角色的信任策略。
-
将托管权限策略附加到角色:AttachRolePolicy
或者
为角色创建内联权限策略:PutRolePolicy
-
(可选)通过附加标签来向用户添加自定义属性:TagRole
有关更多信息,请参阅 管理 IAM 用户(AWS CLI 或 AWS API)的标签。
-
(可选)为角色设置权限边界:PutRolePermissionsBoundary
权限边界控制角色可以具有的最大权限。权限边界是一项高级 AWS 功能。
如果要将角色与 Amazon EC2 或使用 Amazon EC2 的其他 AWS 服务结合使用,则必须将角色存储在实例配置文件中。实例配置文件是角色的容器。每个实例配置文件只能包含一个角色,不能提高该限制。如果在 AWS Management Console中创建角色,则为您创建具有与角色相同的名称的实例配置文件。有关实例配置文件的更多信息,请参阅使用实例配置文件。有关如何通过角色启动 Amazon EC2 实例的信息,请参阅《Amazon EC2 用户指南》中的控制对 Amazon EC2 资源的访问。
创建实例配置文件并在其中存储角色 (AWS API)
-
创建实例配置文件:CreateInstanceProfile
-
向实例配置文件添加角色:AddRoleToInstanceProfile