如何保护 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]

我应该如何通过 cloudformation 部署我的 aws 状态机?

AWS - 如何使用 CDK/CloudFormation 将服务链接角色传递给自动缩放组?