如何保护 AWS CloudFormation 堆栈不被删除?
Posted
技术标签:
【中文标题】如何保护 AWS CloudFormation 堆栈不被删除?【英文标题】:How to protect an AWS CloudFormation stack from deletion? 【发布时间】:2015-12-12 15:45:33 【问题描述】:我有一个创建三层应用程序的堆栈。我想保护我的堆栈不被意外删除。有什么方法可以保护 AWS CloudFormation 堆栈?
我还想知道,即使我的堆栈被删除,我如何才能停止与正在删除的堆栈相关的资源。
【问题讨论】:
【参考方案1】:有多种方法可以保护由 AWS CloudFormation 创建的资源。
保护堆栈
AWS CloudFormation 采用描述所需资源的模板并将其部署为资源堆栈。当堆栈被删除时,资源也会被删除。
因此,第一种方法是控制哪些用户有权删除堆栈。这可以通过身份和访问管理 (IAM) 分配。
这是来自Controlling Access with AWS Identity and Access Management 文档的示例:
拒绝 MyProductionStack 的删除和更新堆栈操作的示例策略:
"Version":"2012-10-17",
"Statement":[
"Effect":"Deny",
"Action":[
"cloudformation:DeleteStack",
"cloudformation:UpdateStack"
],
"Resource":"arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/*"
]
策略还可以在执行敏感操作之前require use of a Multi-factor Authentication (MFA) code,例如删除堆栈。
保护资源
任何拥有适当权限的用户仍然可以删除/修改由 CloudFormation 创建的资源。因此,保护重要资源免受未经授权的用户的影响非常重要。 AWS 建议授予最低权限,以便用户只能控制他们需要的资源,而不能控制更多。
CloudFormation 删除政策
删除策略定义了在堆栈被删除时不应删除的资源。
来自CloudFormation documentation:
使用
DeletionPolicy
属性,您可以在删除堆栈时保留或(在某些情况下)备份资源。您为要控制的每个资源指定DeletionPolicy
属性。如果资源没有DeletionPolicy
属性,AWS CloudFormation 默认会删除该资源。要在删除堆栈时保留资源,请为该资源指定
Retain
。您可以对任何资源使用保留。例如,您可以保留一个 Amazon S3 存储桶或一个 Amazon EC2 实例,以便在删除它们的堆栈后继续使用或修改这些资源。
这通常用于在有意删除堆栈后保留资源。例如,保留 Amazon S3 存储桶或 Amazon RDS 数据库。但是,即使堆栈被意外删除,它也可以用于保留资源。
【讨论】:
以上是关于如何保护 AWS CloudFormation 堆栈不被删除?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Cloudformation 向 OpsWorks 堆栈注册 RDS 实例?
AWS::CloudFormation::Init 它是如何工作的?
如何修复与 AWS::CloudFormation::Init 一起创建 EC2 的 cloudformation 模板
如何更改 cloudformation 中的默认根 EBS 大小? [AWS]