Cloudformation创建,修改或者删除Stack的时候,都有可能无意中对我们配置的架构造成意外的影响。一般说来,有4种方式来保护我们的stack。

1. termination protection.

在创建stack的最后一部分,我们可以选择termination protection,可以禁止删除我们的Stack。但是需要注意的是,用户可以手动disable掉termination protection,然后删除,因此IAM的权限很重要

AWS Cloudformation Stack 保护性措施

2. Stackpolicy

stackpolicy可以限制我们在这个stack里面可以对什么resource资源进行修改。和IAM类似,他也是JSON格式

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html

他的配置地点也是最后一页

AWS Cloudformation Stack 保护性措施

例如,下面的stackpolicy允许修改所有资源,除了数据库

{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    },
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "LogicalResourceId/ProductionDatabase"
    }
  ]
}

3. Deletionpolicy

这个是我们在定义resource的时候的一个参数。他的作用是决定当我们删除stack时候,我们创建的这个resource应该做什么操作。默认操作是一起删除,但是我们指定了deletionpolicy之后,我们有三个选项:delete,retain和snapshot,分别代表删除,保留和快照

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html

例如:

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Resources" : {
    "myS3Bucket" : {
      "Type" : "AWS::S3::Bucket",
      "DeletionPolicy" : "Retain"
    }
  }
}

4. IAM Policy/Role

和其他的AWS 服务一样,我们同样可以使用IAM来配置对应的权限。正如第一个方式termination protection里面说的,我们必须限制用户的权限,不然他可以通过修改配置选项来绕过各种保护性措施。