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

使用Terraform配置ADF系统托管身份访问Key Vault报Invalid index错误

报错原因与解决方案

核心原因

你遇到的identity is empty list of object报错,是因为Terraform尝试索引azurerm_data_factory资源的identity列表第0位元素时,该列表为空,常见触发场景:

  • 首次执行资源创建时,访问策略资源尝试在ADF托管身份生成完成前读取principal_id,出现时序问题
  • 使用的azurerm provider版本过低,存在ADF托管身份属性返回的已知缺陷
  • 此前创建ADF时未配置identity块,新增配置后状态未同步导致临时读取异常

修复方案

方案1:使用one()函数安全读取(推荐)

Terraform 0.14及以上版本提供的one()函数可适配单元素列表场景,避免空列表索引报错,直接修改访问策略的object_id配置即可:

object_id = one(azurerm_data_factory.datafactory.identity).principal_id

该写法会自动等待ADF托管身份生成完成后再读取对应值,天然解决资源创建的时序问题。

方案2:添加显式依赖约束

如果你的Terraform版本不支持one()函数,可给访问策略添加显式依赖,确保ADF创建完成后再执行访问策略的配置:

resource "azurerm_key_vault_access_policy" "adfaccess" {
  key_vault_id = azurerm_key_vault.appvault.id
  tenant_id    = data.azurerm_client_config.current.tenant_id
  object_id    = azurerm_data_factory.datafactory.identity[0].principal_id
  # 其余权限配置保持不变
  lifecycle {
    prevent_destroy  = true
  }

  depends_on = [azurerm_data_factory.datafactory]
}

方案3:升级azurerm provider到稳定版

低于3.0版本的azurerm provider对ADF系统分配托管身份的属性返回逻辑存在已知问题,升级provider即可修复底层缺陷:
在Terraform的provider声明块中指定版本:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

执行terraform init -upgrade更新provider后重新执行terraform apply即可。

验证

配置修改完成后执行terraform plan不会再抛出无效索引错误,执行apply完成后即可在Azure Key Vault的访问策略列表中看到ADF系统托管身份的对应权限条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:15:10