在Azure Pipeline中检索管道服务主体的客户端ID

问题描述

在我的Azure Pipeline(YAML)中,我正在部署一个ARM模板来创建密钥库(以及其他资源),然后运行PowerShell脚本来生成证书并将其存储在密钥库中。这给我一个Forbidden错误。在Use secrets from Azure Key Vault in Azure Pipelines中,Microsoft建议我需要在密钥库中为管道服务主体创建访问策略。当我这样做时,脚本成功。

Service connections

来自cache404图片

我现在想以编程方式作为ARM模板的一部分来创建此访问策略,但是我不知道如何以编程方式在管道中检索管道服务主体的对象ID。有人可以帮忙吗?

解决方法

我现在想以编程方式创建此访问策略 的ARM模板,但我不知道如何检索对象ID 以编程方式在 管道。

如果要在ARM模板中自动获取服务主体对象ID,恐怕是不可能的。

您可以尝试创建脚本(Get-AzADServicePrincipal)来获取服务主体并将其传递到手臂模板。

这里是ticket,您可以参考类似的问题。

,

虽然Hugh Lin的答案是正确的,但我发现更容易采用Nick Graham's answer作为PowerShell脚本本身的一部分来授予对管道服务主体的密钥库访问权限:

$Context = Get-AzContext
Set-AzKeyVaultAccessPolicy -VaultName $vaultName -ServicePrincipalName $Context.Account.Id -PermissionsToCertificates Get,List,Create