如何在Azure DevOps Pipeline中对PythonScript任务进行身份验证
Azure DevOps流水线Python脚本DefaultAzureCredential认证配置方案
1. 环境变量方式安全传递认证参数
Azure DevOps的机密变量出于安全考虑,默认不会自动注入到任务的运行环境中,需要你手动在任务的env字段做显式映射,操作步骤如下:
- 先把客户端ID、租户ID、客户端密钥3个参数存入流水线变量或者变量组,其中客户端密钥需设置为机密变量
- 在PythonScript任务的
env字段,将3个变量映射为DefaultAzureCredential预设读取的环境变量名,YAML示例如下:
- task: PythonScript@0 inputs: scriptPath: './get_azure_resources.py' # 替换为你的脚本路径 env: # 变量名必须严格对应DefaultAzureCredential识别的环境变量名 AZURE_CLIENT_ID: $(az_client_id) # 替换为你存客户端ID的变量名 AZURE_TENANT_ID: $(az_tenant_id) # 替换为你存租户ID的变量名 AZURE_CLIENT_SECRET: $(az_client_secret) # 替换为你存客户端密钥的机密变量名
配置完成后,DefaultAzureCredential运行时会自动读取这三个环境变量完成身份验证,机密变量的内容不会输出到流水线日志。
2. 托管身份方式指定目标身份
根据你使用的托管身份类型和代理类型,有两种常见配置方案:
2.1 使用自托管代理绑定的托管身份
如果你的流水线运行在部署于Azure的自托管代理(如VM、VMSS、ACI)上,已经给代理所在的Azure资源分配了托管身份:
- 如果是系统分配托管身份:无需额外配置,
DefaultAzureCredential会自动调用Azure实例元数据服务获取身份凭证完成认证 - 如果是用户分配托管身份:在初始化
DefaultAzureCredential时传入对应托管身份的客户端ID参数即可,Python代码示例:
from azure.identity import DefaultAzureCredential from azure.mgmt.managementgroups import ManagementGroupsAPI from azure.mgmt.resource import SubscriptionClient # 传入用户分配托管身份的客户端ID即可指定使用的身份 cred = DefaultAzureCredential(managed_identity_client_id="你的用户分配托管身份客户端ID") # 后续正常调用Azure API即可 subscription_client = SubscriptionClient(cred) sub_list = subscription_client.subscriptions.list()
2.2 使用服务连接绑定的托管身份
如果你使用微软托管代理,可以先创建绑定了托管身份的Azure资源管理器服务连接,运行Python脚本前先调用Azure CLI任务获取访问令牌,或者直接将托管身份的客户端ID存入流水线变量,按上述用户分配托管身份的方式传入代码即可。
内容的提问来源于stack exchange,提问作者John Topley
相关产品推荐
相关产品推荐

