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

时间:2015-09-16 07:19:37

标签: amazon-web-services amazon-cloudformation

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

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

1 个答案:

答案 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数据库。但是,它也可以用于保存资源,即使堆栈被意外删除。