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

使用Terraform配置Azure VM时azurerm_disk_encryption_set创建失败求助

解决Azure Disk Encryption Set创建失败的问题

遇到DiskEncryptionSetCreationFailed报错,通常是Key Vault配置、权限设置或Terraform资源依赖这几个环节出了问题,以下是具体排查和解决步骤:

一、检查Key Vault核心配置

  • 区域与订阅一致性:Disk Encryption Set和关联的Key Vault必须在同一Azure区域,且属于同一个订阅,跨区域或跨订阅会直接导致创建失败。
  • 软删除与清除保护:Azure要求Key Vault必须开启软删除(保留天数≥7)和清除保护功能,否则无法绑定到Disk Encryption Set。
  • 密钥与SKU合规性:Key Vault的SKU需为Standard或Premium(Basic SKU不支持磁盘加密);用于加密的密钥必须是RSA类型,密钥大小≥2048位,且密钥状态为启用、未过期。

二、配置Key Vault访问权限

Disk Encryption Set需要具备访问Key Vault密钥的权限,操作步骤如下:

  1. 若使用系统分配身份创建Disk Encryption Set,先在Azure门户找到该资源的“标识”页,复制其对象ID。
  2. 进入关联的Key Vault,在“访问策略”页添加新策略:
    • 选择“密钥管理操作”中的获取、包装密钥、解包密钥权限
    • 将复制的Disk Encryption Set对象ID添加为主体
    • 保存并应用访问策略

三、修正Terraform配置问题

  • 资源依赖处理:确保Key Vault和密钥资源完全创建后,再创建Disk Encryption Set。可以通过depends_on显式声明依赖,或通过资源引用(如key_vault_key_id = azurerm_key_vault_key.example.id)实现隐式依赖。
  • 身份配置正确:若使用系统分配身份,需在azurerm_disk_encryption_set的identity块中设置type = "SystemAssigned";若使用用户分配身份,需正确指定identity_ids。

正确的Terraform配置示例

# 创建资源组
resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "East US"
}

# 创建符合要求的Key Vault
resource "azurerm_key_vault" "example" {
  name                       = "example-keyvault"
  location                   = azurerm_resource_group.example.location
  resource_group_name        = azurerm_resource_group.example.name
  tenant_id                  = data.azurerm_client_config.current.tenant_id
  soft_delete_retention_days = 7
  purge_protection_enabled   = true
  sku_name                   = "standard"
}

# 创建加密密钥
resource "azurerm_key_vault_key" "example" {
  name         = "example-encryption-key"
  key_vault_id = azurerm_key_vault.example.id
  key_type     = "RSA"
  key_size     = 2048

  key_opts = [
    "decrypt",
    "encrypt",
    "unwrapKey",
    "wrapKey",
  ]
}

# 创建Disk Encryption Set
resource "azurerm_disk_encryption_set" "example" {
  name                = "example-disk-encryption-set"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name

  identity {
    type = "SystemAssigned"
  }

  key_vault_key_id = azurerm_key_vault_key.example.id

  # 显式声明依赖,确保Key Vault和密钥先完成创建
  depends_on = [azurerm_key_vault.example, azurerm_key_vault_key.example]
}

# 获取当前客户端配置(用于Tenant ID)
data "azurerm_client_config" "current" {}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:52:27