CloudFormation 基于身份的策略示例 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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-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 与 Condition 元素中的 ARN 匹配。aws:PrincipalARN 条件键接受一个列表,这意味着您可以根据环境需要,从限制中排除多个 IAM 主体。有关防止修改 CloudFormation 资源的类似 SCP,请参阅 SCP-CLOUDFORMATION-1(GitHub)。