Azure资源管理器-无法在访问策略中使用Microsoft App Service部署Keyvault

时间:2019-05-27 20:11:18

标签: azure azure-devops azure-keyvault

因此,我试图使用Azure Devops Pipelines和ARM模板来整理我所有的Azure基础结构。这是相当艰难的,但是当部署在5分钟内为我提供20个资源(这些都是好事)时,我会看到好处!

但是,我遇到了一个问题。我想部署一个新的Keyvault。打勾,简单!我想存储一个x509证书,这是我的Web应用程序使用的通配符证书。打勾轻松完成。现在,我想创建一个“ Microsoft.Web / Certificates”证书资源,然后可以将其用于为Web Apps创建SSL自定义绑定。失败:

"The service does not have access to '...microsoft.keyvault/vaults/gs-prd1-kv-apps' Key Vault.

合理在以下示例模板中得到了很好的记录:https://github.com/Azure/azure-quickstart-templates/tree/master/201-web-app-certificate-from-key-vault。事实证明,** Microsoft.Azure.Websites“资源提供者无权访问Keyvault。要解决此问题,指南是运行powershell或az cli命令将RP添加到我的新Keyvault

Set-AzureRmKeyVaultAccessPolicy -VaultName KEY_VAULT_NAME -ServicePrincipalName abfa0a7c-a6b6-4736-8310-5855508787cd -PermissionsToSecrets get

问题是,我需要在Devops管道或ARM模板中执行此操作,而我完全不知道如何操作。

我试图将az命令添加到新的构建任务中,但是运行管道ALSO的服务原理没有将其添加到其中的正确权限。

有人可以帮忙吗?必须有一种使用x509证书部署Keyvault并将此资源分配给Web App的方法吗?

1 个答案:

答案 0 :(得分:0)

我想我将分享我目前正在解决此问题的解决方案。因此,让我们澄清一下我们要在ARM模板中部署的内容:

  • 新的KeyVault (Microsoft.KeyVault /保险库),该文件具有作为密件存储的pkcs12格式的x509证书
  • 新的应用程序服务计划(Microsoft.Web /服务器场)
  • App服务计划中的
  • 新的Web证书(Microsoft.Web / certificates),可用于使用HTTPS定义自定义域名。这是已放置在新KeyVault中的x509证书

除了用于创建应用服务计划的资源提供者没有针对新Keyvault的访问策略并且无法提取x509证书之外,这一切都将正常工作。该问题记录在示例模板中。指导是运行命令以添加资源提供者的访问策略。但是,正如我在问题中指出的那样,我们正在尝试完全在ARM模板中执行此操作。

解决方案是在ARM模板中定义资源提供者的访问策略。但是,有两个问题:

  1. 我不确定要使用哪个资源提供商
  2. 我不知道如何获取该资源提供者使用的服务主体的ObjectId

我从this SO question那里得到了提示,并进行了以下操作。

1。创建新的Keyvault并将x509证书作为秘密添加到其中 enter image description here

2。运行az CLI命令以获取“ Microsoft Azure应用程序服务”的服务主体

az ad sp list --display-name "Microsoft Azure App Service"

这会显示该服务的许多属性,包括[objectId],我可以复制该属性以供在ARM模板中使用

3。使用上面的[objectId]在ARM模板中为“ Microsoft Azure App Service”服务主体创建Keyvault访问策略资源。授予此主体“获取”权限仅用于机密。

enter image description here

4。创建应用服务计划和新的Web证书资源 enter image description here


现在,当我运行模板时,Microsoft Azure App Service主体有权从新的Keyvault检索x509证书并在服务计划中创建Web证书资源。

相关问题