本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CloudFormation 基于身份的策略示例
本节包含演示如何授予和拒绝 CloudFormation 权限的基于身份的策略示例。您可以使用这些示例策略开始设计自己的策略,这些策略遵循最低权限原则。
有关 CloudFormation 特定操作和条件的列表,请参阅 AWS CloudFormation 的操作、资源和条件键和 AWS CloudFormation 条件。有关可与条件结合使用的资源类型列表,请参阅 AWS 资源和属性类型参考。
本节包含以下示例策略:
允许查看访问权限
查看访问权限是对 CloudFormation 的最低权限访问类型。这种策略可能适用于那些希望查看 AWS 账户中所有 CloudFormation 堆栈的 IAM 主体。以下示例策略授予查看账户中任何 CloudFormation 堆栈详细信息的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResource", "cloudformation:DescribeStackResources" ], "Resource": "*" } ] }
允许基于模板创建堆栈
以下示例策略允许 IAM 主体仅使用存储在特定 Amazon Simple Storage Service(Amazon S3)存储桶中的 CloudFormation 模板创建堆栈。此存储桶名称为 my-CFN-templates。您可以将批准的模板上传到此存储桶。策略中的 cloudformation:TemplateUrl 条件键可防止 IAM 主体使用任何其他模板来创建堆栈。
重要
允许 IAM 主体对此 S3 存储桶具有只读访问权限。这有助于防止 IAM 主体添加、删除或修改已批准的模板。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:CreateStack" ], "Resource": "*", "Condition": { "StringLike": { "cloudformation:TemplateUrl": "https:// my-CFN-templates.s3.amazonaws.com/*" } } } ] }
拒绝更新或删除堆栈
为了帮助保护预调配关键业务 AWS 资源的特定 CloudFormation 堆栈,您可以限制该特定堆栈的更新和删除操作。您只能允许少数指定的 IAM 主体执行这些操作,而拒绝环境中的任何其他 IAM 主体执行这些操作。以下策略声明拒绝在特定 AWS 区域和 AWS 账户中更新或删除特定 CloudFormation 堆栈的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/<stack_ID>" } ] }
此策略声明拒绝更新或删除 MyProductionStack CloudFormation 堆栈的权限,该堆栈位于 us-east-1 AWS 区域和 123456789012 AWS 账户中。您可以在 CloudFormation 控制台中查看堆栈 ID。以下是如何根据使用案例修改此语句的 Resource 元素的一些示例:
-
您可以在此策略的
Resource元素中添加多个 CloudFormation 堆栈 ID。 -
您可以使用
arn:aws:cloudformation:us-east-1:123456789012:stack/*防止 IAM 主体更新或删除123456789012账户中us-east-1AWS 区域中的任何堆栈。
重要的一步是决定哪个策略应包含此声明。您可以将此声明添加到以下策略:
-
附加到 IAM 主体的基于身份的策略:将声明置于此策略中会限制特定的 IAM 主体创建或删除特定的 CloudFormation 堆栈。
-
附加到 IAM 主体的权限边界:将声明放在此策略中会创建权限护栏。它限制多个 IAM 主体创建或删除特定的 CloudFormation 堆栈,但不限制您环境中的所有主体。
-
附加到账户、组织单位或组织的 SCP:将声明放入此策略中会创建权限护栏。它限制目标账户、组织单位或组织中的所有 IAM 主体创建或删除特定的 CloudFormation 堆栈。
但是,如果您不允许至少一个 IAM 主体(特权主体)更新或删除 CloudFormation 堆栈,则在必要时将无法对通过此堆栈预调配的资源进行任何更改。用户或开发管线(推荐)可以代入此特权主体。如果您想将限制部署为 SCP,那么我们建议改用以下策略声明。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/<stack_ID>", "Condition": { "ArnNotLike": { "aws:PrincipalARN": [ "<ARN of the allowed privilege IAM principal>" ] } } } ] }在此语句中,
Condition元素定义了从 SCP 中排除的 IAM 主体。此声明拒绝任何 IAM 主体更新或删除 CloudFormation 堆栈的权限,除非 IAM 主体的 ARN 与Condition元素中的 ARN 匹配。aws:PrincipalARN条件键接受一个列表,这意味着您可以根据环境需要,从限制中排除多个 IAM 主体。有关防止修改 CloudFormation 资源的类似 SCP,请参阅 SCP-CLOUDFORMATION-1(GitHub)。