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

Terraform获取object_id为空时如何配置Azure Key Vault访问策略

问题原因

data.azurerm_client_config.current.object_id 返回空值,是Azure CLI 2.37.0及以上版本调整了身份信息接口返回结构导致的兼容问题:3.10.0版本之前的AzureRM Terraform Provider没有适配这个结构变更,无法从新版CLI的登录上下文里读取到当前身份的对象ID,和Terraform配置逻辑本身无关。

修复方案

按落地成本从低到高排序:

  • 优先升级AzureRM Provider版本
    将Key Vault模块里的azurerm provider版本约束调整为>=3.10.0,该版本官方已经完成新版Azure CLI的适配。调整后在对应Terraform工作目录执行terraform init -upgrade拉取适配版本的Provider,后续执行plan/apply时就能正常读取到object_id值,原有Key Vault访问策略的配置代码不需要改动,和现有逻辑兼容性最好。
  • 无法升级Provider时手动传入对象ID
    跳过azurerm_client_config数据源的自动读取逻辑,本地执行Azure CLI命令直接获取当前登录身份的对象ID:
    # 个人用户登录时执行
    az ad signed-in-user show --query id -o tsv
    
    # 服务主体登录时执行
    az ad sp show --id $(az account show --query user.name -o tsv) --query id -o tsv
    
    拿到命令返回的ID字符串后,直接作为object_id参数传入Key Vault访问策略资源,也可以通过Terraform变量统一注入,绕开自动读取失败的问题。
  • 临时兼容方案:降级本地Azure CLI
    如果既不能升级Provider也不方便手动传值,可以将本地Azure CLI降级到2.36.0及以下版本,旧版CLI的身份返回结构和老版本AzureRM Provider的读取逻辑匹配,可以正常读到对象ID。该方案仅适合临时调试使用,不推荐长期保留,旧版CLI存在已知安全漏洞和后续云服务兼容问题。
额外可选优化

如果你的Key Vault不需要用传统访问策略模式做权限控制,可以直接给Key Vault设置azure_rbac_authorization = true,改用Azure RBAC做权限管控,直接移除原有访问策略相关配置,从根源上绕开读取客户端object_id的逻辑,注意该操作需要你持有Key Vault的Owner或User Access Administrator权限才能生效。

配置完成后可以执行terraform state show azurerm_key_vault_access_policy.<你的资源命名>校验,确认object_id字段不为空、权限配置符合预期即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:27:27