如何在Azure Pipeline中认证Azure Blob Storage以读写Blob
在Azure DevOps Pipeline中实现DefaultAzureCredential认证
核心思路
DefaultAzureCredential会自动按顺序尝试多种认证方式,在DevOps Pipeline环境中,最适配的是托管标识或通过服务连接传递服务主体凭据两种方案,无需修改原有Python测试代码,以下是具体实现步骤:
方案一:使用Pipeline托管标识(推荐)
- 启用代理池系统托管标识
- 前往Azure门户,找到Pipeline代理对应的虚拟机/虚拟机规模集,在「标识」选项卡开启系统分配标识
- 为该托管标识分配Blob存储的对应权限(如
Storage Blob Data Contributor),权限范围与本地测试使用的安全组保持一致
- 配置Pipeline运行测试
- 无需额外添加凭据配置,
DefaultAzureCredential会自动触发ManagedIdentityCredential完成认证,直接执行测试即可 - 示例YAML片段:
steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.10' - script: | pip install -r requirements.txt pytest tests/ displayName: '运行Python测试'
- 无需额外添加凭据配置,
方案二:通过服务连接传递服务主体凭据
- 创建Azure资源管理器服务连接
- 在Azure DevOps项目的「项目设置」→「服务连接」中,新建「Azure资源管理器」类型连接,选择「服务主体(自动)」模式完成创建
- 在Pipeline中注入凭据环境变量
- 使用
AzureCLI任务并开启「允许脚本访问OAuth令牌」,DefaultAzureCredential会自动读取任务注入的AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID环境变量完成认证 - 示例YAML片段:
steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.10' - task: AzureCLI@2 inputs: azureSubscription: '你的服务连接名称' scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | pip install -r requirements.txt pytest tests/ addSpnToEnvironment: true # 关键:将服务主体凭据注入环境变量
- 使用
- 为服务主体分配Blob存储的对应权限,权限范围与本地测试一致
注意事项
- 两种方案均无需修改原有Python代码中的
DefaultAzureCredential逻辑,它会自动适配运行环境 - 务必确保托管标识/服务主体的权限与本地测试使用的安全组权限匹配,避免出现权限不足的问题
内容的提问来源于stack exchange,提问作者masih
相关产品推荐
相关产品推荐

