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

Terraform AzAPI Provider OIDC认证失败:Identity not found问题求助

问题原因及解决办法

核心原因分析

AzAPI Provider与Azurerm Provider在OIDC认证的处理逻辑上存在差异,导致前者无法自动继承GitHub Actions的OIDC登录上下文,具体可能的触发点包括:

1. AzAPI需要显式指定OIDC客户端ID

Azurerm Provider会自动读取GitHub Actions登录后生成的环境变量或上下文凭证,但AzAPI Provider在配置use_oidc=true时,必须显式指定client_id参数。如果缺失该参数,它会尝试从Azure实例元数据服务(IMDS)获取身份,而GitHub Actions运行环境并非Azure虚拟机,因此会返回"Identity not found"错误。

2. AzAPI Provider版本未指定或过旧

未指定版本的AzAPI Provider可能使用了对OIDC支持不完善的旧版本,导致无法正确处理GitHub Actions的OIDC凭证。

3. 目标订阅(Subscription ID 2)权限缺失

用于OIDC认证的服务主体可能未被授予订阅2的访问权限——虽然Azurerm在订阅1运行正常,但跨订阅的权限需要单独配置。


具体解决步骤

步骤1:完善AzAPI Provider配置,添加client_id

将Azure中注册的GitHub OIDC服务主体的客户端ID填入AzAPI Provider配置:

provider "azapi" {
  alias           = "alias1"
  tenant_id       = "<Tenant ID>"
  subscription_id = <Subscription ID 2>
  use_oidc        = true
  client_id       = "<GitHub OIDC服务主体Client ID>" # 新增该行
}

步骤2:指定AzAPI Provider的稳定版本

在required_providers中添加AzAPI的版本约束,确保使用支持OIDC的新版本:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "3.43.0"
    }
    azapi = {
      source  = "azure/azapi"
      version = ">=1.9.0" # 新增版本约束
    }
  }
}

步骤3:验证订阅2的服务主体权限

确认用于OIDC的服务主体在订阅2中拥有至少Contributor(或部署配额告警所需的最小权限)角色:

  • 登录Azure门户,进入订阅2
  • 依次点击「访问控制(IAM)」→「角色分配」
  • 检查是否存在该服务主体的对应角色分配,若没有则添加

步骤4:确保GitHub Actions登录上下文覆盖跨订阅权限

如果使用azure/login动作,只需确保服务主体拥有多订阅权限即可,Terraform会通过Provider配置的subscription_id自动切换目标订阅,无需额外操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:12:23