Azure资源管理器-无法在访问策略中使用Microsoft应用程序服务部署Keyvault

Azure资源管理器-无法在访问策略中使用Microsoft应用程序服务部署Keyvault,azure,azure-devops,azure-keyvault,Azure,Azure Devops,Azure Keyvault,因此,我正试图使用Azure Devops管道和ARM模板对我的所有Azure基础设施进行编码。这是相当困难的,但我可以看到的好处是,部署在5分钟内为我提供20个资源,这一切都很好 然而,我遇到了一个问题。我想部署一个新的Keyvault。别紧张!我想存储x509证书,它是我的Web应用程序使用的通配符证书。打勾很容易。现在我想创建一个“Microsoft.Web/Certificates”证书资源,然后可以使用它为我的Web应用创建SSL自定义绑定。这失败了: "The service doe

因此,我正试图使用Azure Devops管道和ARM模板对我的所有Azure基础设施进行编码。这是相当困难的,但我可以看到的好处是,部署在5分钟内为我提供20个资源,这一切都很好

然而,我遇到了一个问题。我想部署一个新的Keyvault。别紧张!我想存储x509证书,它是我的Web应用程序使用的通配符证书。打勾很容易。现在我想创建一个“Microsoft.Web/Certificates”证书资源,然后可以使用它为我的Web应用创建SSL自定义绑定。这失败了:

"The service does not have access to '...microsoft.keyvault/vaults/gs-prd1-kv-apps' 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命令添加到新的构建任务中,但运行管道的服务原则也没有添加该命令的正确权限


有人能帮忙吗?一定有办法部署带有x509 cert的Keyvault,并将此资源分配给Web应用程序?

我想我会分享我目前正在解决的这个问题的解决方案。因此,让我们澄清一下我们希望在ARM模板中部署什么:

  • 一个新的KeyVault(Microsoft.KeyVault/vaults),其中包含一个以pkcs12格式存储为机密的x509证书
  • 新的应用程序服务计划(Microsoft.Web/serverfarms)
  • 应用程序服务计划中的新web证书(Microsoft.web/certificates),可用于使用HTTPS定义自定义域名。这是已放置在新密钥库中的x509证书
除了用于创建应用程序服务计划的资源提供程序没有新Keyvault的访问策略,因此无法提取x509证书外,这一切都可以正常工作。问题中引用的示例模板中记录了这一点。指南是运行命令为资源提供程序添加访问策略。然而,正如我在问题中所说的,我们正试图完全在ARM模板中实现这一点

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

  • 我不确定使用哪个资源提供者
  • 我不知道如何获取此资源提供者使用的服务主体的ObjectId

  • 我从中得到了一个暗示,并做了以下事情

    1.创建新的Keyvault并将x509证书作为机密添加到其中

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

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

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

    4.为其创建应用服务计划和新的Web证书资源



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

    您可以看看这个:将Az powershell模块与Azure Devops一起使用,谢谢Nancy。是的,它确实突出显示了创建和使用服务principal以启用创建资源。但是,我想为我正在ARM模板本身中创建的Keyvault的服务主体添加访问策略。我可以看到如何执行此操作,但我需要服务主体的ObjectId。
    az ad sp list --display-name "Microsoft Azure App Service"