You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CloudFormation阻止IAM角色与DynamoDB表被删除?

如何阻止CloudFormation变更中删除LambdaRole和DynamoTable资源?

嘿,我来帮你搞定这个问题——要防止CloudFormation在变更栈或者删除栈的时候误删你的LambdaRole和DynamoTable,有两个核心思路,咱们一个个说清楚:

1. 用CloudFormation自带的DeletionPolicy属性(最直接靠谱)

这是CloudFormation专门为资源删除控制设计的原生机制,完全不需要额外的IAM策略,直接在模板里配置就行。

你只需要给LambdaRole和DynamoTable资源加上DeletionPolicy: Retain属性:

  • 当你从模板里移除这些资源、或者删除整个CloudFormation栈时,AWS会保留这些资源在账户里,不会删掉它们。
  • 如果资源是通过条件创建的(比如你的DynamoTable依赖ShouldCreateTable参数),这个策略只会对实际被创建出来的资源生效,没创建的资源自然也不存在删除问题。

给你修改后的模板片段参考:

{ 
  ... 
  "Resources" : { 
    "Get" : { 
      "Type" : "AWS::Serverless::Function", 
      "Properties": { 
        ... 
        "Role": {"Fn::If" : ["CreateRole", {"Fn::GetAtt":["LambdaRole", "Arn"]}, {"Ref":"RoleARN"}]}, 
        "Environment" : { 
          "Variables" : { 
            "AppDynamoTable" : { 
              "Fn::If" : ["CreateDynamoTable", {"Ref":"DynamoTable"}, { "Ref" : "TableName" } ] 
            } 
          } 
        }, 
        ... 
      } 
    }, 
    "LambdaRole":{ 
      "Type":"AWS::IAM::Role", 
      "DeletionPolicy": "Retain",  // 新增:阻止删除角色
      ... 
    }, 
    "DynamoTable" : { 
      "Type" : "AWS::DynamoDB::Table", 
      "DeletionPolicy": "Retain",  // 新增:阻止删除表
      ... 
    } 
  }, 
}

另外,如果你的场景需要控制资源被替换时的旧资源保留(比如修改DynamoDB表主键导致CloudFormation要替换表),还可以加上UpdateReplacePolicy: Retain,这样旧的资源会被保留下来,不会被自动删除。

2. IAM策略:从权限层面限制删除(作为补充)

IAM策略不能直接阻止CloudFormation本身的删除逻辑,但可以限制执行CloudFormation操作的IAM用户/角色,不让他们拥有删除这些资源的权限。

比如你可以给执行CloudFormation的角色添加一条拒绝策略:

{
  "Effect": "Deny",
  "Action": [
    "iam:DeleteRole",
    "dynamodb:DeleteTable"
  ],
  "Resource": [
    "arn:aws:iam::YOUR_ACCOUNT_ID:role/LambdaRole",
    "arn:aws:dynamodb:YOUR_REGION:YOUR_ACCOUNT_ID:table/DynamoTable"
  ]
}

不过要注意:这种方式是“一刀切”的——如果后续你真的需要删除这些资源,得先调整IAM策略,不然会报错。而且如果CloudFormation栈的变更逻辑要求删除这些资源(比如你从模板里移除了它们),CloudFormation会因为权限不足而失败,栈会卡在错误状态,不如DeletionPolicy灵活。

总结

优先用DeletionPolicy: Retain,这是模板层面的原生控制,简单直接,不会影响正常的栈变更;IAM策略可以作为权限层面的补充,但要考虑后续运维的灵活性。

内容的提问来源于stack exchange,提问作者Efren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:31:35