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

GitHub Actions多作业Azure登录Subject Identifier不一致问题排查

问题原因

GitHub Actions通过OIDC向Azure认证时,生成的身份令牌Subject Identifier(sub字段)是根据作业上下文动态生成的:

  • 当作业配置了environment参数时,sub会包含environment:{环境名}的标识,这就是你deploy-arm作业生成repo:OrganisationName/RepositoryName:environment:dev的原因
  • 如果作业没有绑定环境,sub就会默认使用当前触发分支的ref路径,也就是deploy-apps作业里的repo:OrganisationName/RepositoryName:ref:refs/heads/develop

你的Azure AD权限配置应该只允许了前者的sub值,所以deploy-apps作业的认证会失败。

解决办法

方法1:给所有部署作业绑定同一个环境

在deploy-apps作业的配置里加上environment: dev,让它和deploy-arm作业使用相同的sub格式。示例配置:

jobs:
  deploy-apps:
    runs-on: ubuntu-latest
    environment: dev  # 绑定和ARM部署相同的环境
    strategy:
      matrix:
        app: [app1, app2, app3]
    steps:
      - uses: azure/login@v1
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      # 后续应用部署步骤

方法2:在Azure AD中添加多个允许的Subject值

如果不想用环境绑定,可以在Azure AD的对应应用注册里,把两个sub值都加入允许列表:

  1. 登录Azure门户,找到GitHub OIDC对应的应用注册
  2. 进入令牌配置,添加并启用sub可选声明
  3. 在该应用的权限配置里,添加两个允许的sub值:repo:OrganisationName/RepositoryName:environment:dev和repo:OrganisationName/RepositoryName:ref:refs/heads/develop

这样不管哪个sub格式,都能通过Azure的身份验证。

方法3:移除ARM部署作业的环境配置

如果不需要用到GitHub环境功能,可以直接删掉deploy-arm作业里的environment参数,让它的sub也变成分支ref格式,和deploy-apps作业保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:47:10