是否应为重要Terraform资源新增deletion_protection属性以增强删除防护?
Terraform资源防误删机制解析
1. prevent_destroy的核心局限性
prevent_destroy是Terraform客户端层面的生命周期属性,只有当资源在配置文件中存在时,才能阻止terraform destroy或资源替换时的销毁动作。- 一旦资源被意外从配置中移除,Terraform会把它标记为待销毁,此时原配置里的
prevent_destroy已经失效,完全拦不住销毁操作。
2. 云厂商的deletion_protection是通用机制吗?
这是云厂商普遍采用的服务端级别的防误删方案,和prevent_destroy属于不同维度的防护:
- 这类属性(比如AWS的
aws_rds_cluster.deletion_protection、GCP的google_sql_database_instance.deletion_protection)是直接绑定在云资源本身的,哪怕Terraform配置里删了该资源,只要服务端的删除保护没关,云厂商会直接拒绝销毁请求。 - 部分资源甚至默认开启保护,比如GCP的
google_bigquery_table新版本默认deletion_protection = true,必须显式设为false并执行terraform apply更新资源属性后,才能发起销毁。
3. 其他可用的防误删方案
除了上面两种核心机制,还有这些补充手段:
- 状态文件锁:启用Terraform工作区状态锁,避免多人并行操作时的误修改,但没法直接阻止配置移除后的销毁。
- 云厂商IAM策略:给重要资源加特定标记(比如
resource_critical: yes),然后配置IAM策略拒绝删除带有该标记的资源,从权限层面加固防护。 - 配置审查工具:用
tflint、checkov这类工具扫描配置,及时发现是否意外移除了带prevent_destroy的资源,提前规避失误。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

