如何为 DevOps 管道中的 API 调用提供服务主体的授权

问题描述 投票:0回答:1

我在发布管道中有一个 Azure CLI 任务,我想从同一项目进行 API 调用。该任务在服务主体下执行,并且它为脚本提供

servicePrincipalId
servicePrincipalKey
tenantId

如何使用服务主体的凭据来验证

Invoke-RestMethod
API 请求?

powershell azure-devops azure-pipelines-release-pipeline azure-service-principal
1个回答
0
投票

考虑到您使用

azure cli task
service principal
,我猜您的服务主体用于创建服务连接。我说得对吗?

如果我的猜测正确【如果不对,请忽略我的回答-_-】,你不需要获取服务主体的实际值,而是直接获取token,然后使用token发送

Invoke-RestMethod 
请求。 az 帐户获取访问令牌

下面是说明案例的示例(获取 azure 订阅):

pool:
  vmImage: windows-latest

steps:

- task: AzureCLI@2
  displayName: 'Azure CLI'
  inputs:
    scriptType: ps
    scriptLocation: inlineScript
    azureSubscription: 'DevOpsSub1Connection-Test'
    inlineScript: |
      $subscriptionId = 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxx'
      
      $token = $(az account get-access-token --resource-type arm --query accessToken --output tsv)

      $headers = @{
          "Content-Type" = "application/json"
          "Authorization" = "Bearer " + $token
      }

      $uri = "https://management.azure.com/subscriptions/{0}?api-version=2022-12-01" -f $subscriptionId

      $response = Invoke-RestMethod -Method Get -Uri $uri -Headers $headers

      $response | ConvertTo-Json -Depth 10

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.