如何在Terraform中获取azurerm_managed_disk的disk_encryption_key的SecretURL
如何在Terraform中获取Azure托管磁盘加密所需的Secret URL?
你当前的配置存在核心误区:磁盘加密密钥(disk_encryption_key)需要的是Azure密钥保管库中Secret的URL,但你现在用的是azurerm_key_vault_key数据源(用于获取非对称密钥),两者属于不同资源类型,不能混用。
根据文档说明:
secret_url - (必填) 用作磁盘加密密钥的密钥保管库Secret的URL,可在azurerm_key_vault_secret资源的id字段找到。
解决方案步骤
- 添加
azurerm_key_vault_secret数据源,用于获取目标Secret的URL信息 - 在
azurerm_managed_disk的disk_encryption_key块中,引用该数据源的id作为secret_url
修改后的完整配置
data "azurerm_key_vault" "kv" { name = var.disk_encryption_key_vault_name resource_group_name = var.disk_encryption_key_rg } # 新增:获取磁盘加密用的Secret资源 data "azurerm_key_vault_secret" "disk_encryption_secret" { name = var.disk_encryption_secret_name # 需替换为你的Secret名称变量 key_vault_id = data.azurerm_key_vault.kv.id } data "azurerm_key_vault_key" "encryption-kv" { name = var.disk_encryption_key_name key_vault_id = data.azurerm_key_vault.kv.id } resource "azurerm_managed_disk" "data" { count = var.data_disk_count name = "${var.vm_name}-DataDisk-${count.index + 1}" location = var.location resource_group_name = var.resource_group_name storage_account_type = var.data_disk_storage_account_type create_option = "Empty" disk_size_gb = var.data_disk_size_gb tags = var.tags encryption_settings { enabled = true disk_encryption_key { secret_url = data.azurerm_key_vault_secret.disk_encryption_secret.id # 引用Secret的URL source_vault_id = data.azurerm_key_vault.kv.id # 直接引用密钥保管库ID更简洁 } key_encryption_key { key_url = "https://${data.azurerm_key_vault.kv.name}.vault.usgovcloudapi.net/keys/${var.disk_encryption_key_name}/${data.azurerm_key_vault_key.encryption-kv.version}" source_vault_id = data.azurerm_key_vault_key.encryption-kv.key_vault_id } } }
关键注意事项
- 确保密钥保管库中已创建对应Secret(磁盘加密使用对称密钥,存储为Secret类型),并正确设置
var.disk_encryption_secret_name变量指向该Secret名称 source_vault_id直接引用密钥保管库ID即可,无需通过Key资源间接获取,避免冗余
内容的提问来源于stack exchange,提问作者NickP
相关产品推荐
相关产品推荐

