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

能否仅通过Azure Key Vault名称在Terraform中连接现有密钥保管库?

无需资源组名称连接Azure Key Vault的Terraform实现

Azure Key Vault名称确实具备全局唯一性,不过Terraform默认的azurerm_key_vault数据源确实要求同时指定名称和资源组名称。但可以通过以下两种方式,实现仅凭借Key Vault名称完成连接,无需提前知晓资源组名称:

方法1:通过external数据源调用Azure CLI获取资源组

利用external数据源执行Azure CLI命令,动态查询目标Key Vault所属的资源组,再将结果传入azurerm_key_vault数据源:

# 定义Key Vault名称变量
variable "kv_name" {
  type = string
}

# 调用Azure CLI获取Key Vault的资源组名称
data "external" "kv_resource_group" {
  program = ["az", "keyvault", "show", "--name", var.kv_name, "--query", "resourceGroup", "-o", "tsv"]
}

# 通过获取到的资源组名称加载Key Vault数据源
data "azurerm_key_vault" "target" {
  name                = var.kv_name
  resource_group_name = data.external.kv_resource_group.result
}

方法2:使用azurerm_resource数据源定位资源

Key Vault对应的Azure资源类型为Microsoft.KeyVault/vaults,结合全局唯一的名称,可以用azurerm_resource数据源直接定位资源,再提取其所属的资源组名称:

# 定义Key Vault名称变量
variable "kv_name" {
  type = string
}

# 通过资源类型和名称定位Key Vault资源
data "azurerm_resource" "kv" {
  name = var.kv_name
  type = "Microsoft.KeyVault/vaults"
}

# 利用提取到的资源组名称加载Key Vault数据源
data "azurerm_key_vault" "target" {
  name                = var.kv_name
  resource_group_name = data.azurerm_resource.kv.resource_group_name
}

补充说明

Terraform的AzureRM provider默认要求资源组名称,是因为其设计遵循了Azure资源的通用定位逻辑(多数资源名称仅在资源组内唯一),但针对Key Vault这种全局唯一名称的资源,通过上述动态查询的方式,就能避免手动指定资源组的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:22:19