因此,我试图使用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的方法吗?
答案 0 :(得分:0)
我想我将分享我目前正在解决此问题的解决方案。因此,让我们澄清一下我们要在ARM模板中部署的内容:
除了用于创建应用服务计划的资源提供者没有针对新Keyvault的访问策略并且无法提取x509证书之外,这一切都将正常工作。该问题记录在示例模板中。指导是运行命令以添加资源提供者的访问策略。但是,正如我在问题中指出的那样,我们正在尝试完全在ARM模板中执行此操作。
解决方案是在ARM模板中定义资源提供者的访问策略。但是,有两个问题:
我从this SO question那里得到了提示,并进行了以下操作。
1。创建新的Keyvault并将x509证书作为秘密添加到其中
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访问策略资源。授予此主体“获取”权限仅用于机密。
现在,当我运行模板时,Microsoft Azure App Service主体有权从新的Keyvault检索x509证书并在服务计划中创建Web证书资源。