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

如何在Azure DevOps流水线中获取AD用户订阅列表及验证PR创建者身份

实现Azure DevOps流水线中的两个AD用户订阅相关需求

一、流水线构建过程中获取AD用户的订阅列表

  • 核心API:Azure Resource Manager (ARM) 订阅列表接口
    GET https://management.azure.com/subscriptions?api-version=2020-01-01
    
  • 实现要点:
    1. 身份验证:需要目标AD用户的有效访问令牌,可通过Azure CLI的az account get-access-token命令获取,或调用Azure AD令牌端点https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token生成。
    2. 权限要求:目标用户需拥有Microsoft.Subscriptions/subscriptions/read权限(可通过Reader角色或自定义RBAC角色分配),同时需Azure AD的User.Read权限用于身份验证。
    3. 流水线示例(Azure CLI步骤):
      - task: AzureCLI@2
        inputs:
          azureSubscription: '你的服务连接名称'
          scriptType: 'bash'
          inlineScript: |
            # 获取当前服务连接关联用户的订阅列表
            az account list --output table
            # 切换到指定AD用户上下文并获取订阅(需用安全变量存储凭据)
            az login --username "$TARGET_USER_EMAIL" --password "$TARGET_USER_PWD" --tenant "$TENANT_ID"
            az account list --output json
      
    注意:生产环境禁止硬编码凭据,需使用Azure DevOps安全变量管理敏感信息。

二、PR验证步骤:检查创建者身份并获取其订阅列表

  • 关键API组合:
    1. Azure DevOps PR详情接口:获取创建者的AD关联信息
      GET https://dev.azure.com/{org}/{proj}/_apis/git/repositories/{repo-id}/pullrequests/{pr-id}?api-version=7.1-preview.1
      
      从响应中提取createdBy.uniqueName(用户AD邮箱)或createdBy.aadObjectId(AD对象ID)。
    2. Microsoft Graph用户详情接口:验证用户身份合法性
      GET https://graph.microsoft.com/v1.0/users/{user-id-or-email}
      
    3. ARM订阅列表接口:同第一部分的API,获取用户有权访问的订阅
  • 实现步骤:
    1. 触发配置:确保流水线设置为PR触发,使用预定义变量System.PullRequest.PullRequestId获取当前PR ID。
    2. 获取PR创建者信息(PowerShell示例):
      $prId = $(System.PullRequest.PullRequestId)
      $orgUri = $(System.TeamFoundationCollectionUri)
      $project = $(System.TeamProject)
      $accessToken = $(System.AccessToken)
      
      $prDetails = Invoke-RestMethod -Uri "$orgUri/$project/_apis/git/repositories/$(Build.Repository.ID)/pullrequests/$prId?api-version=7.1-preview.1" -Headers @{Authorization = "Bearer $accessToken"}
      $creatorEmail = $prDetails.createdBy.uniqueName
      Write-Host "PR创建者邮箱:$creatorEmail"
      
    3. 身份验证与订阅获取(Azure CLI示例):
      - task: AzureCLI@2
        inputs:
          azureSubscription: '你的服务连接名称'
          scriptType: 'bash'
          inlineScript: |
            # 获取PR创建者的AD对象ID
            creator_object_id=$(az ad user show --id "$CREATOR_EMAIL" --query id -o tsv)
            if [ -z "$creator_object_id" ]; then
              echo "PR创建者未在Azure AD中找到,终止流水线"
              exit 1
            fi
            # 获取该用户有权访问的订阅列表
            az account list --user $creator_object_id --output json
            # 添加自定义验证逻辑,比如检查是否包含指定订阅
            if ! az account list --user $creator_object_id --query "[?name=='目标订阅名称']" | grep -q "目标订阅名称"; then
              echo "PR创建者无目标订阅访问权限,终止流水线"
              exit 1
            fi
        env:
          CREATOR_EMAIL: $(creatorEmail)
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:05:24