我有一个堆栈,可以创建一个三层应用程序。我想保护我的堆栈免于意外删除。有没有办法保护AWS CloudFormation堆栈?
此外,我想知道,即使我的堆栈被删除,我如何能够停止与被删除的堆栈相关的资源。
答案 0 :(得分:6)
有多种方法可以保护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
。您可以将retain用于任何资源。例如,您可以保留Amazon S3存储桶或Amazon EC2实例,以便在删除堆栈后继续使用或修改这些资源。
这通常用于在故意堆栈删除后保留资源。例如,保留Amazon S3存储桶或Amazon RDS数据库。但是,它也可以用于保存资源,即使堆栈被意外删除。