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

Azure Key Vault需两次terraform destroy清理的原因及单步解决方法咨询

问题解答

1. 首次terraform destroy无法完成Key Vault清理的原因

Azure Key Vault启用软删除(soft_delete_retention_days=7)后,执行删除操作时,Vault不会被直接彻底删除,而是进入软删除状态。Terraform的azurerm provider在purge_protection_enabled=false的配置下,会在destroy流程中自动尝试调用purge操作,彻底清除处于软删除状态的Vault。

但purge软删除Vault的操作需要订阅级别的Microsoft.KeyVault/locations/deletedVaults/purge/action权限,你的服务主体(SPN)仅拥有资源组级权限,因此首次执行purge时触发权限错误,导致Key Vault无法被彻底清理。

第二次执行terraform destroy时,Terraform会再次检测到软删除状态的Vault,此时由于操作上下文的权限验证逻辑变化(或凭据缓存刷新),purge操作得以成功执行,最终完成清理。

2. 实现单次terraform destroy完成所有资源清理的方案

方案1:授予SPN最小权限的订阅级权限

创建仅包含purge软删除Vault权限的自定义Azure角色,分配给SPN至订阅范围,既满足清理需求,又符合安全约束(无需授予Owner权限)。

操作步骤:

  1. 创建自定义角色定义文件kv-purge-role.json:
{
  "Name": "Key Vault Purge Access",
  "IsCustom": true,
  "Description": "仅允许清理软删除状态的Key Vault",
  "Actions": [
    "Microsoft.KeyVault/locations/deletedVaults/purge/action"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/你的订阅ID"
  ]
}
  1. 通过Azure CLI创建角色并分配给SPN:
# 创建自定义角色
az role definition create --role-definition ./kv-purge-role.json

# 分配角色给SPN
az role assignment create --assignee 你的SPN对象ID --role "Key Vault Purge Access" --scope "/subscriptions/你的订阅ID"

方案2:调整Terraform配置(适合非紧急清理场景)

如果无需立即彻底删除Key Vault,可以修改配置,让Terraform在destroy时仅将Vault移入软删除状态,等待7天后自动彻底删除。

修改azurerm_key_vault资源的purge_protection_enabled为true:

resource "azurerm_key_vault" "kv" {
  # 原有配置...
  purge_protection_enabled   = true
  # 原有配置...
}

此配置下,执行terraform destroy时,Vault会进入软删除状态,无法被立即purge,7天后会自动彻底删除,无需额外权限。


内容的提问来源于stack exchange,提问作者Frédéric De Lène Mirouze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:05:39