View a markdown version of this page

限制和要求堆栈策略 - AWS 规范性指导

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

限制和要求堆栈策略

作为最低权限许可的最佳实践,请考虑要求 IAM 主体分配堆栈策略并限制 IAM 主体可以分配的堆栈策略。许多 IAM 主体不应有权为自己的堆栈创建和分配自定义堆栈策略。

创建堆栈策略后,我们建议您将这些策略上传到 S3 存储桶。然后,您可以使用 cloudformation:StackPolicyUrl 条件键并在 S3 存储桶中提供堆栈策略的 URL,来引用这些堆栈策略。

授予附加堆栈策略的权限

作为最低权限权限的最佳实践,可以考虑限制 IAM 委托人可以附加到堆栈的堆栈策略。 CloudFormation 在 IAM 主体的基于身份的策略中,您可以指定 IAM 主体有权分配哪些堆栈策略。这可防止 IAM 主体附加任何堆栈策略,从而降低配置错误的风险。

例如,一个组织可能拥有不同的团队,每个团队都有不同的要求。因此,每个团队都会为其团队特定的 CloudFormation 堆栈制定堆栈策略。在共享环境中,如果所有团队都将其堆栈策略存储在同一 S3 存储桶中,则团队成员可能会附加一个可用但不适用于其团队堆栈的 CloudFormation 堆栈策略。为避免这种情况,您可以定义一个策略声明,允许 IAM 主体仅附加特定的堆栈策略。

以下示例策略允许 IAM 主体附加存储在 S3 存储桶中特定于团队的文件夹中的堆栈策略。您可以在此存储桶中存储已批准的堆栈策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:SetStackPolicy" ], "Resource": "*", "Condition": { "StringLike": { "cloudformation:StackPolicyUrl": "<Bucket URL>/<Team folder>/*" } } } ] }

此策略声明不要求 IAM 主体为每个堆栈分配堆栈策略。即使 IAM 主体有权使用特定的堆栈策略创建堆栈,他们也可以选择创建没有堆栈策略的堆栈。

需要堆栈策略

为确保所有 IAM 主体为其堆栈分配堆栈策略,您可以将服务控制策略(SCP)或权限边界定义为预防性护栏。

以下示例策略显示了如何配置要求 IAM 主体在创建堆栈时分配堆栈策略的 SCP。如果 IAM 主体未附加堆栈策略,则无法创建堆栈。此外,此策略可防止具有堆栈更新权限的 IAM 主体在更新期间删除堆栈策略。该策略使用 cloudformation:StackPolicyUrl 条件键限制 cloudformation:UpdateStack 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "cloudformation:CreateStack", "cloudformation:UpdateStack" ], "Resource": "*", "Condition": { "Null": { "cloudformation:StackPolicyUrl": "true" } } } ] }

通过将此策略声明包含在 SCP 而不是权限边界中,您可以将护栏应用于组织中的所有账户。这可以执行以下操作:

  1. 减少将策略单独附加到 AWS 账户中的多个 IAM 主体的工作量。权限边界只能直接附加到 IAM 主体。

  2. 减少为不同 AWS 账户创建和管理多个权限边界副本的工作量。这样可以降低在多个相同权限边界中出现配置错误的风险。

注意

SCPs 权限边界是权限防护栏,用于定义账户或组织中 IAM 委托人的最大可用权限。这些策略不会向 IAM 主体授予任何权限。如果您想要标准化您的账户或组织中的所有 IAM 主体分配堆栈策略的要求,则需要同时使用权限护栏和基于身份的策略。