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

如何使用for_each为每个Azure虚拟机传递不同Key Vault密钥

为每个虚拟机分配独立Key Vault密钥的解决方案

核心思路

在虚拟机映射变量中添加每个实例对应的密钥标识,通过Terraform的Key Vault数据源批量获取不同密钥,再关联到对应虚拟机。

步骤1:更新虚拟机映射变量

修改var.vm_map,为每个虚拟机条目添加对应的Key Vault密钥名称:

variable "vm_map" {
  type = map(object({
    name         = string
    size         = string
    secret_name  = string # 新增:对应Key Vault中该VM的密钥名称
  }))
  example = {
    vm-01 = {
      name        = "win-vm-01"
      size        = "Standard_D2s_v3"
      secret_name = "vm-01-admin-password"
    }
    vm-02 = {
      name        = "win-vm-02"
      size        = "Standard_D2s_v3"
      secret_name = "vm-02-admin-password"
    }
  }
}

步骤2:添加Key Vault密钥数据源

通过azurerm_key_vault_secret数据源,配合for_each遍历vm_map,批量获取每个虚拟机对应的密钥值:

# 获取Key Vault的基础信息(需提前创建好Key Vault)
data "azurerm_key_vault" "main" {
  name                = "your-key-vault-name" # 替换为你的Key Vault名称
  resource_group_name = var.m_resource_group_name
}

# 批量获取每个VM对应的密钥
data "azurerm_key_vault_secret" "vm_admin_pw" {
  for_each     = var.vm_map
  name         = each.value.secret_name
  key_vault_id = data.azurerm_key_vault.main.id
}

步骤3:修改虚拟机资源引用独立密钥

将admin_password字段替换为对应数据源的密钥值,确保每个虚拟机调用自己的密钥:

resource "azurerm_windows_virtual_machine" "winservertest" {
  for_each = var.vm_map
  name                = each.value.name
  resource_group_name = var.m_resource_group_name
  location            = var.m_location
  size                = each.value.size
  admin_username      = var.m_admin_username
  # 引用对应VM的独立密钥
  admin_password      = data.azurerm_key_vault_secret.vm_admin_pw[each.key].value
  patch_mode               = "Manual" 
  enable_automatic_updates = false 
  network_interface_ids = [
    azurerm_network_interface.nic-multi-vms-01[each.key].id
  ]
}

额外说明

  • 如果不同虚拟机的密钥存储在不同Key Vault中,可在vm_map中新增key_vault_name和key_vault_rg字段,修改数据源时引用这些值即可。
  • 确保Terraform执行账号拥有Key Vault的Secret Get权限,否则无法读取密钥。
  • 密钥值会被Terraform标记为敏感数据,执行过程中不会明文输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:30:01