从 Azure 管道任务访问 Microsoft.Azure.WebSites 资源提供程序(Microsoft Azure 应用服务)的服务主体

用户14207973

我想创建一个将存储 TLS 证书的密钥保管库。此密钥保管库需要可从 Azure 管道任务访问,这将检索所述证书并将其绑定到其应用程序。微软提到

默认情况下,“Microsoft.Azure.WebSites”资源提供程序 (RP) 无权访问模板中指定的 Key Vault,因此您需要在部署模板之前通过执行以下 PowerShell 命令对其进行授权:

Login-AzureRmAccount
Set-AzureRmContext -SubscriptionId AZURE_SUBSCRIPTION_ID
Set-AzureRmKeyVaultAccessPolicy -VaultName KEY_VAULT_NAME -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd -PermissionsToSecrets get

当我手动执行此操作时,这适用于我的密钥保管库。但是,我想将此自动化作为我的主管道的一部分。我试过定义这个任务:

- task: AzurePowerShell@5
  displayName: 'Set key vault policy'
  inputs:
    azureSubscription: …
    azurePowerShellVersion: 'LatestVersion'
    ScriptType: 'InlineScript'
    Inline: |
      Set-AzKeyVaultAccessPolicy -VaultName … -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd -PermissionsToSecrets get

但它失败了:

##[error]Operation returned an invalid status code 'Forbidden'

我还注意到“Microsoft Azure App Service”的这个服务主体甚至无法用于我的任务;以下打印空白:

 $azureAppServicePrincipal = Get-AzADServicePrincipal -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd
 Write-Output "azureAppServicePrincipalId = $($azureAppServicePrincipal.Id)"

有没有办法让我的管道可以访问这个服务主体?

Levi Lu-MSFT

当我用参数Set-AzKeyVaultAccessPolicy -ServicePrincipalName other-service-principal. 我犯了同样的错误。

您可以使用 ObjectId 并-BypassObjectIdValidationSet-AzKeyVaultAccessPolicy命令中添加参数作为解决方法。请参阅他的文档中的注释

使用服务主体授予访问策略权限时,必须使用 -BypassObjectIdValidation 参数。

Set-AzKeyVaultAccessPolicy -VaultName myvault -ObjectId "ObjectId" -PermissionsToSecrets get -BypassObjectIdValidation 

Object id 是 ObjectId 所在的 Managed application in local directory

在此处输入图片说明

您还可以在 Azure CLI 任务中使用以下 Az cli 命令

az keyvault set-policy -n levikeyv --secret-permissions get --object-id "object-id"

因为命令Get-AzADServicePrincipal没有返回任何结果。可能是与您的 ARM 连接服务关联的服务主体Read Directory DataMicrosoft Grap 中没有权限

您可以尝试转到服务主体应用程序的 Api 权限并添加适当的权限。它可能需要您的管理员同意。请参阅此线程信息以获取信息。

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章