本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
的服务角色 CloudFormation
服务角色是允许 AWS CloudFormation 创建、更新或删除堆栈资源的 AWS Identity and Access Management (IAM) 角色。如果您不提供服务角色,则 CloudFormation使用 IAM 委托人的证书执行堆栈操作。如果您为创建服务角色 CloudFormation 并在创建堆栈期间指定服务角色,则 CloudFormation 使用该服务角色的证书来执行操作,而不是 IAM 委托人的证书。
使用服务角色时,附加到 IAM 委托人的基于身份的策略不需要配置模板中定义的所有 AWS 资源的权限。 CloudFormation如果您还没有准备好通过开发管道为关键业务运营配置 AWS 资源( AWS 推荐的最佳实践),那么使用服务角色可以为中的资源管理增加一层额外的保护 AWS。这种方法的好处是:
-
您组织中的 IAM 委托人遵循最低权限模式,防止他们在您的环境中手动创建或更改 AWS 资源。
-
要创建、更新或删除 AWS 资源,IAM 委托人必须使用 CloudFormation。这通过基础架构即代码实现了资源配置的标准化。
例如,要创建包含亚马逊弹性计算云 (Amazon EC2) 实例的堆栈,IAM 委托人需要拥有通过其基于身份的策略创建 EC2 实例的权限。相反, CloudFormation 可以扮演一个有权代表委托人创建 EC2实例的服务角色。通过这种方法,IAM 委托人可以创建堆栈,并且您无需为 IAM 委托人授予他们不应该定期访问的服务的过于宽泛的权限。
要使用服务角色创建 CloudFormation 堆栈,IAM 委托人必须拥有将服务角色传递给的权限 CloudFormation,并且该服务角色的信任策略必须 CloudFormation 允许代入该角色。
本节包含以下主题:
实现 CloudFormation服务角色的最低权限
在服务角色中,您可以定义一个权限策略,该策略明确指定服务可以执行哪些操作。这些操作可能与 IAM 委托人可以执行的操作不同。我们建议您从 CloudFormation 模板向后移动,创建符合最低权限原则的服务角色。
正确界定 IAM 委托人的基于身份的策略范围以仅传递特定的服务角色,并将服务角色的信任策略范围限定为仅允许特定的委托人担任该角色,这有助于防止可能通过服务角色进行权限升级。
配置服务角色
注意
服务角色是在 IAM 中配置的。要创建服务角色,您必须具有创建服务角色的权限。有权创建角色和附加任何策略的 IAM 委托人可以提升自己的权限。 AWS 建议 AWS 服务 为每个用例分别创建一个服务角色。为用例创建 CloudFormation 服务角色后,您可以允许用户仅将已批准的服务角色传递给 CloudFormation。有关允许用户创建服务角色的基于身份的策略示例,请参阅 IAM 文档中的服务角色权限。
有关如何创建服务角色的说明,请参阅创建向委派权限的角色 AWS 服务。指定 CloudFormation (cloudformation.amazonaws.com
) 作为可代入此角色的服务。这可以防止 IAM 委托人自己担任角色或将其传递给其他服务。配置服务角色时,Effect
Action
、和Resource
元素是必需的。你也可以选择定义一个Condition
元素。
有关这些元素的更多信息,请参阅 IAM JSON 策略元素参考。有关操作、资源和条件键的完整列表,请参阅身份和访问管理的操作、资源和条件键。
向 IAM 委托人授予使用 CloudFormation 服务角色的权限
要使用 CloudFormation 服务角色 CloudFormation 通过配置资源,IAM 委托人必须具有传递服务角色的权限。通过在委托人的权限中指定角色的 ARN,您可以将 IAM 委托人的权限限制为仅传递某些角色。有关更多信息,请参阅 IAM 文档 AWS 服务中的授予用户将角色传递给的权限。
以下基于 IAM 身份的策略声明允许委托人传递路径中的角色,包括服务角色。cfnroles
委托人无法传递不同路径的角色。
{ "Sid": "AllowPassingAppRoles", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::
<account ID>
:role/cfnroles/*" }
将委托人限制为某些角色的另一种方法是使用 CloudFormation 服务角色名称的前缀。以下策略声明允许 IAM 委托人仅传递带有CFN-
前缀的角色。
{ "Sid": "AllowPassingAppRoles", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::
<account ID>
:role/CFN-*" }
除了之前的策略声明外,您还可以使用cloudformation:RoleARN
条件键在基于身份的策略中提供进一步的精细控制,以实现最低权限的访问权限。以下政策声明仅允许 IAM 委托人创建、更新和删除堆栈,前提是堆栈传递了特定的 CloudFormation 服务角色。作为变体,您可以在条件键中定义多个 CloudFormation服务角色。 ARNs
{ "Sid": "RestrictCloudFormationAccess", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:iam::
<account ID>
:role/CFN-*", "Condition": { "StringEquals": { "cloudformation:RoleArn": [ "<ARN of the specific CloudFormation service role>
" ] } } }
此外,您还可以使用cloudformation:RoleARN
条件键限制 IAM 委托人为堆栈操作传递高权限 CloudFormation 服务角色。唯一需要更改的是条件运算符,从StringEquals
到StringNotEquals
。
{ "Sid": "RestrictCloudFormationAccess", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:iam::
<account ID>
:role/CFN-*", "Condition": { "StringNotEquals": { "cloudformation:RoleArn": [ "<ARN of a privilege CloudFormation service role>
" ] } } }
为 CloudFormation 服务角色配置信任策略
角色信任策略是附加到 IAM 角色的必需的基于资源的策略。信任策略定义了哪些 IAM 委托人可以担任该角色。在信任策略中,您可以将用户、角色、账户或服务指定为委托人。为防止 IAM 委托人将的服务角色传递 CloudFormation 给其他服务,您可以在角色的信任策略中指定 CloudFormation 为委托人。
以下信任策略仅允许 CloudFormation 服务担任服务角色。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } }
将服务角色与堆栈关联
创建服务角色后,可以在创建堆栈时将其与堆栈关联。有关更多信息,请参阅配置堆栈选项。在指定服务角色之前,请确保 IAM 委托人有权传递该角色。有关更多信息,请参阅 向 IAM 委托人授予使用 CloudFormation 服务角色的权限。