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

如何在GitHub Actions工作流中用联合凭据运行Python Azure SDK

解决GitHub Actions中Azure联合凭据传递到Python脚本的问题

问题场景

我有一个需与Azure SDK交互(列出和上传Blob)的Python工具,核心代码如下:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

creds = DefaultAzureCredential()
client = BlobServiceClient("https://<你的存储账户>.blob.core.windows.net/", credential=creds)

我需要在GitHub Actions工作流中运行该脚本,必须使用联合凭据进行认证。已配置好带有联合身份的服务主体,能通过azure/login Action完成登录,但运行Python脚本时出现权限错误:

azure.core.exceptions.HttpResponseError: This request is not authorized to perform this operation using this permission.

我的简化工作流配置如下:

jobs:
  execute:
    runs-on: ubuntu-latest
    steps:
      # checkout及其他前置步骤
      # ...

      - name: AZ Login
        uses: Azure/login@v1
        with:
          client-id: ${{ vars.AZURE_CLIENT_ID }}
          subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
          tenant-id: ${{ vars.AZURE_TENANT_ID }}

      # 配置Python环境步骤
      # ...

      - name: Run script
        run: |
          .venv/bin/python script.py

问题

如何将azure/login步骤中的凭据传递到Python运行时环境中?

解决方案

1. 确保Azure Identity SDK版本达标

DefaultAzureCredential自动识别GitHub Actions环境变量的功能需要azure-identity版本≥1.12.0。在依赖安装步骤明确指定版本:

- name: Install dependencies
  run: |
    .venv/bin/pip install azure-identity>=1.12.0 azure-storage-blob

2. 无需修改Python代码,依赖默认认证链

azure/login Action会自动在工作流环境中设置以下关键变量:

  • AZURE_CLIENT_ID
  • AZURE_TENANT_ID
  • AZURE_ACCESS_TOKEN
  • AZURE_SUBSCRIPTION_ID

DefaultAzureCredential的默认认证链会自动检测这些环境变量,使用EnvironmentCredential完成认证,因此你无需修改原有的Python代码,保持creds = DefaultAzureCredential()即可。

3. 验证服务主体的权限配置

权限错误大概率是服务主体权限不足导致的,而非凭据传递问题:

  • 给服务主体分配Storage Blob Data Contributor角色(不要用普通的Contributor角色,Blob操作需要专属的数据权限)
  • 确保角色分配的范围覆盖目标存储账户(或其所在的资源组/订阅)

4. 可选:显式使用EnvironmentCredential(默认链失效时)

如果默认认证链未自动拾取环境变量,可以显式指定EnvironmentCredential:

from azure.identity import EnvironmentCredential
from azure.storage.blob import BlobServiceClient

creds = EnvironmentCredential()
client = BlobServiceClient("https://<你的存储账户>.blob.core.windows.net/", credential=creds)

5. 调试环境变量(可选)

可以在运行脚本前添加调试步骤,确认azure/login是否正确设置了环境变量:

- name: 检查Azure环境变量
  run: |
    echo "AZURE_CLIENT_ID: $AZURE_CLIENT_ID"
    echo "AZURE_TENANT_ID: $AZURE_TENANT_ID"
    echo "AZURE_ACCESS_TOKEN 是否存在: $([ -n "$AZURE_ACCESS_TOKEN" ] && echo "是" || echo "否")"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:48:37