如何保护AWS CloudFormation堆栈不被删除?

use*_*679 5 amazon-web-services aws-cloudformation

我有一个堆栈,它创建了一个三层应用程序.我想保护我的堆栈免于意外删除.有没有办法保护AWS CloudFormation堆栈?

另外我想知道,即使我的堆栈被删除,我如何能够停止与被删除的堆栈相关的资源.

Joh*_*ein 6

有几种方法可以保护AWS CloudFormation创建的资源.

保护堆栈

AWS CloudFormation采用描述所需资源的模板,并将其部署为一堆资源.删除堆栈时,也会删除资源.

因此,第一种方法是控制哪些用户有权删除堆栈.这可以通过身份和访问管理(IAM)分配.

以下是使用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/*"
    }]
}
Run Code Online (Sandbox Code Playgroud)

在执行敏感操作(例如删除堆栈)之前,策略还可能需要使用多重身份验证(MFA)代码.

保护资源

CloudFormation创建的资源仍然可以由具有适当权限的任何用户删除/修改.因此,保护​​重要资源免受未经授权用户的影响非常重要.AWS建议授予最小权限,以便用户只能控制所需的资源,而不再需要.

CloudFormation删除政策

删除策略定义应该资源不能当堆栈被删除被删除.

来自CloudFormation文档:

使用DeletionPolicy您可以保留的属性或(在某些情况下)删除其堆栈时的资源.您DeletionPolicy为要控制的每个资源指定一个属性.如果资源没有DeletionPolicy属性,AWS CloudFormation将默认删除该资源.

要在删除堆栈时保留资源,请指定Retain该资源.您可以将retain用于任何资源.例如,您可以保留Amazon S3存储桶或Amazon EC2实例,以便在删除堆栈后继续使用或修改这些资源.

这通常用于在故意堆栈删除后保留资源.例如,保留Amazon S3存储桶或Amazon RDS数据库.但是,即使堆栈被意外删除,它也可用于保留资源.