本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
基于身份的策略示例 CloudFormation
本节包含基于身份的策略示例,这些策略演示了如何授予和拒绝权限。 CloudFormation您可以使用这些示例策略开始设计符合最低权限原则的自己的策略。
有关 CloudFormation 特定操作和条件的列表,请参阅和条件的操作、资源 AWS CloudFormation和AWS CloudFormation 条件键。有关与条件配合使用的资源类型列表,请参阅AWS 资源和属性类型参考。
本节包含以下示例策略:
允许访问视图
查看访问权限是权限最低的访问类型。 CloudFormation这种策略可能适合那些想要查看所有 CloudFormation堆栈的 IAM 委托人。 AWS 账户以下示例策略授予查看账户中任何 CloudFormation 堆栈详细信息的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResource", "cloudformation:DescribeStackResources" ], "Resource": "*" } ] }
允许基于模板创建堆栈
以下示例策略允许 IAM 委托人仅使用存储在特定亚马逊简单存储服务 (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 区域 和中的特定 CloudFormation 堆栈的权限 AWS 账户。
{ "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
元素 IDs 中添加多个 CloudFormation 堆栈。 -
您可以使用
arn:aws:cloudformation:us-east-1:123456789012:stack/*
防止 IAM 委托人更新或删除123456789012
账户中us-east-1
AWS 区域 和中的任何堆栈。
一个重要的步骤是决定哪个策略应包含此声明。您可以将此声明添加到以下策略中:
-
附加到 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 与元素中的 ARN 相匹配。Condition
aws:PrincipalARN
条件键接受一个列表,这意味着您可以根据环境的需要将多个 IAM 委托人排除在限制之外。有关防止修改 CloudFormation 资源的类似 SCP,请参阅 SCP-CLOUDFORMATION-1(GitHub)。