Terraform未更新SQL Server新TDE密钥问题排查
问题分析与解决
核心问题:重复创建TDE资源而非更新
每个Azure SQL Server仅允许存在一个azurerm_mssql_server_transparent_data_encryption资源,你的代码尝试创建新的tde-key-new资源,但实际应更新已有的TDE配置而非新建。Azure不支持同一SQL Server绑定多个TDE资源,因此新配置无法生效,旧密钥会持续显示。
具体解决步骤
1. 修正Terraform代码
- 若此前已有Terraform管理的TDE资源,直接修改该资源的
key_vault_key_id指向新密钥:
data "azurerm_key_vault" "root_keyvault" { name = var.keyvault_name resource_group_name = var.resource_group } data "azurerm_key_vault_key" "tde_key" { key_vault_id = data.azurerm_key_vault.root_keyvault.id name = var.tde_key_name } # 修改已有TDE资源的密钥,而非新建 resource "azurerm_mssql_server_transparent_data_encryption" "tde-key" { server_id = var.server_id key_vault_key_id = data.azurerm_key_vault_key.tde_key.id }
- 若此前TDE是手动在Azure门户配置的,先将现有TDE资源导入Terraform状态:
terraform import azurerm_mssql_server_transparent_data_encryption.tde-key <你的SQL Server资源ID>
导入完成后使用上述代码配置新密钥,执行terraform apply完成更新。
2. 验证Key Vault权限
确保SQL Server的托管身份(系统托管或用户托管)对新密钥拥有以下权限:
GetWrap KeyUnwrap Key
权限需直接授予SQL Server的身份,避免通过组或其他间接方式授权。
3. 确认Terraform执行结果
执行terraform plan,确认输出显示为更新现有TDE资源而非创建新资源。执行terraform apply后,检查Terraform输出是否提示TDE资源已成功更新。
4. 排除门户缓存问题
若Terraform确认更新成功但门户仍显示旧密钥,等待5-10分钟后刷新页面,Azure门户存在数据同步延迟的可能。
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

