如何通过具有联合凭证而不是客户端密钥的服务主体登录

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

由于最近推动从 Azure 中删除 Entra App 机密并在服务连接中采用工作负载联合身份验证,我已从服务主体中删除了客户端机密,并向其中添加了联合凭据。

如何通过此服务主体登录 Azure?

早些时候,此登录是通过下面提到的代码进行的:

Write-Host Object Id = $objectId
    $key = ConvertTo-SecureString -String  $env:servicePrincipalKey -AsPlainText -Force
    $Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $env:servicePrincipalId, $key
    Connect-AzAccount -ServicePrincipal -TenantId $env:tenantId -Credential $Credential

我尝试了很多文档,但找不到任何可以接受的内容。寻求帮助。

还有其他方法可以通过管道实现此目的吗? 我有一个发布管道,它使用基于工作负载身份联合(自动)的服务连接。通过此步骤创建的服务主体具有联合凭据。在我的管道的下一步中,我使用具有此登录步骤的 powershell 脚本。

enter image description here

这是我与 Federated Creds 的服务主体: enter image description here

azure azure-devops azure-web-app-service federated-identity azure-service-principal
1个回答
0
投票

在管道中你可以尝试如下:

  1. 添加 Azure CLI 任务,并在任务上启用选项

    addSpnToEnvironment
    在脚本中访问服务主体详细信息)。此选项将提供变量来让您获取登录凭据。

    enter image description here

    您可以对任务运行以下命令,将登录凭据作为管道变量传递,以便同一作业中的后续步骤可以使用这些凭据。

    echo "##vso[task.setvariable variable=SP_CLIENT_ID]$servicePrincipalId" 
    echo "##vso[task.setvariable variable=SP_ID_TOEKN]$idToken"
    echo "##vso[task.setvariable variable=TENANT_ID]$tenantId"
    
  2. 然后在后续步骤中,您可以使用 Azure CLI 命令“

    az login --service-principal
    ”或 Azure PowerShell cmdlet“
    Connect-AzAccount -ServicePrincipal
    ”使用上面获取的凭据登录 Azure。

    az login --service-principal --tenant $(TENANT_ID) -u $(SP_CLIENT_ID) --federated-token $(SP_ID_TOEKN) --allow-no-subscriptions
    
    Connect-AzAccount -ServicePrincipal -Tenant $(TENANT_ID) -ApplicationId $(SP_CLIENT_ID) -FederatedToken $(SP_ID_TOEKN) -Environment AzureCloud -Scope Process
    

以下是管道示例供参考。

  • 要在管道中运行 Azure CLI 命令,请确保代理计算机上已安装 Azure CLI 工具
  • 对于管道中的 Azure PowerShell cmdlet,请确保代理计算机上已安装 Azure PowerShell
    steps:
    - task: AzureCLI@2
      displayName: 'Get login Credentials'
      inputs:
        addSpnToEnvironment: true
        azureSubscription: MyArmConnection
        scriptType: bash
        scriptLocation: inlineScript
        inlineScript: |
          echo "##vso[task.setvariable variable=SP_CLIENT_ID]$servicePrincipalId" 
          echo "##vso[task.setvariable variable=SP_ID_TOEKN]$idToken"
          echo "##vso[task.setvariable variable=TENANT_ID]$tenantId"
    
    - bash: az login --service-principal --tenant $(TENANT_ID) -u $(SP_CLIENT_ID) --federated-token $(SP_ID_TOEKN) --allow-no-subscriptions
      displayName: 'Login Azure using az login'
    
    - pwsh: Connect-AzAccount -ServicePrincipal -Tenant $(TENANT_ID) -ApplicationId $(SP_CLIENT_ID) -FederatedToken $(SP_ID_TOEKN) -Environment AzureCloud -Scope Process
      displayName: 'Login Azure using Connect-AzAccount'

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