azure - 从 Azure 管道任务访问 Microsoft.Azure.WebSites 资源提供程序(Microsoft Azure 应用服务)的服务主体
问题描述
我想创建一个存储 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)"
有没有办法让我的管道可以访问这个服务主体?
解决方案
当我用参数测试时Set-AzKeyVaultAccessPolicy -ServicePrincipalName other-service-principal
。我犯了同样的错误。
您可以使用 ObjectId 并在命令中添加-BypassObjectIdValidation
参数作为解决方法。Set-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 Data
在Microsoft Grap中没有权限
推荐阅读
- python - 在 Django 中为多个查询编写视图的最佳方法?
- android - 最新的 google places api 有错误吗?
- laravel-5 - 类 App\Http\Controllers\API\UserController 不存在
- c# - 如何显示禁用复选框的弹出框?
- python - 最小化windows系统托盘中的window tkinter
- selenium - java.lang.IllegalArgumentException:替换字符串中的最后一个字符不能是\,需要转义的字符
- c++ - 在 CPP 中用单个引用表示两种或多种数据类型
- azure - 印度中部地区的 Azure 搜索
- javascript - 记录属性不呈现为字符串
- python - 如何与 HTTP 服务器的用户共享 anaconda 包