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

如何在GitHub Actions中通过OIDC联邦身份登录AzCopy?

在GitHub Actions中通过OIDC登录Azure后完成AzCopy认证的解决方案

问题背景

已通过GitHub Actions的azure/login@v2动作,利用OIDC联邦身份凭证成功登录Azure,对应服务主体可在同一租户的两个订阅中生效。此前使用SAS Token实现AzCopy认证,随着团队规模扩大,需替换为无需密钥轮换、更安全的凭证方案。当前az登录正常,但azcopy login status报错,需解决AzCopy的身份认证问题,满足以下要求:

  • 可通过azcopy login status确认登录状态
  • 支持在GitHub Actions中使用OIDC服务主体
  • 提供本地基于客户端密钥/证书的验证方案
  • 给出从SAS Token向新方案迁移的步骤

解决方案

一、GitHub Actions中OIDC模式下的AzCopy认证

azure/login@v2完成OIDC登录后,会在环境中注入Azure CLI的上下文,但AzCopy需要针对存储服务的专属访问令牌,而非默认的管理令牌。具体步骤:

  1. 确保OIDC登录完成
    保留现有azure/login@v2步骤,确保服务主体拥有目标存储账户的权限(如Storage Blob Data Contributor)。

  2. 获取存储服务访问令牌并登录AzCopy
    在工作流中添加以下步骤:

    # 获取存储服务的访问令牌
    AZCOPY_TOKEN=$(az account get-access-token --resource https://storage.azure.com/ --query accessToken -o tsv)
    # 用令牌登录AzCopy
    azcopy login --aad-token $AZCOPY_TOKEN
    
  3. 验证登录状态

    azcopy login status
    

二、本地验证方案

1. 客户端密钥方式

  • 确保服务主体已配置并拥有存储账户权限,本地设置环境变量:
    export AZURE_CLIENT_ID="<服务主体ID>"
    export AZURE_TENANT_ID="<租户ID>"
    export AZURE_CLIENT_SECRET="<客户端密钥>"
    
  • 登录Azure CLI并获取存储令牌:
    az login --service-principal -u $AZURE_CLIENT_ID -t $AZURE_TENANT_ID -p $AZURE_CLIENT_SECRET
    AZCOPY_TOKEN=$(az account get-access-token --resource https://storage.azure.com/ --query accessToken -o tsv)
    
  • 登录AzCopy并验证:
    azcopy login --aad-token $AZCOPY_TOKEN
    azcopy login status
    

2. 客户端证书方式

  • 服务主体已配置证书认证,本地持有证书文件(.pfx/.pem):
    # 用证书登录Azure CLI
    az login --service-principal -u "<服务主体ID>" -t "<租户ID>" --password "<证书文件路径>" --certificate-password "<证书密码>"
    # 获取存储令牌并登录AzCopy
    AZCOPY_TOKEN=$(az account get-access-token --resource https://storage.azure.com/ --query accessToken -o tsv)
    azcopy login --aad-token $AZCOPY_TOKEN
    
  • 验证登录状态:azcopy login status

三、从SAS Token迁移的步骤

1. 权限配置

  • 为服务主体授予所有目标存储账户的必要权限(如Storage Blob Data Contributor),覆盖两个订阅下的资源
  • 回收不再使用的SAS Token,避免权限泄露

2. GitHub Actions工作流修改

移除所有与SAS Token相关的生成/传递步骤,替换为OIDC登录+AzCopy令牌认证流程,示例工作流片段:

jobs:
  storage-operation:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Azure OIDC Login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          # 若需指定默认订阅,添加此行;否则服务主体有权限的订阅均可用
          # subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      - name: Install AzCopy
        run: |
          wget https://aka.ms/downloadazcopy-v10-linux
          tar -xvf downloadazcopy-v10-linux
          sudo cp ./azcopy_linux_amd64_*/azcopy /usr/bin/

      - name: Authenticate AzCopy
        run: |
          AZCOPY_TOKEN=$(az account get-access-token --resource https://storage.azure.com/ --query accessToken -o tsv)
          azcopy login --aad-token $AZCOPY_TOKEN

      - name: Verify Login Status
        run: azcopy login status

      - name: Example AzCopy Transfer
        run: azcopy copy "./src/*" "https://<storage-account>.blob.core.windows.net/<target-container>" --recursive

3. 本地开发环境迁移

  • 按照本地验证方案配置服务主体认证
  • 替换所有使用SAS Token的AzCopy命令,改为令牌认证模式,确保本地操作与CI流程一致

关键注意事项

  • AzCopy所需令牌必须针对https://storage.azure.com/资源,不可使用Azure管理资源的默认令牌
  • 服务主体权限需覆盖所有需要操作的存储账户(两个订阅),否则会出现权限不足错误
  • GitHub Actions中,azure/login@v2会自动管理会话令牌,无需手动处理过期问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:35:04