由于最近推动从 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 脚本。
在管道中你可以尝试如下:
添加 Azure CLI 任务,并在任务上启用选项
addSpnToEnvironment
(在脚本中访问服务主体详细信息)。此选项将提供变量来让您获取登录凭据。
您可以对任务运行以下命令,将登录凭据作为管道变量传递,以便同一作业中的后续步骤可以使用这些凭据。
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"
然后在后续步骤中,您可以使用 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
以下是管道示例供参考。
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'