本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
的服务角色 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 Elastic Compute Cloud(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 策略元素参考。有关操作、资源和条件键的完整列表,请参阅 Actions, resources, and condition keys for Identity And Access Management。
向 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 服务角色的权限。