ARM模板中的KeyVault参考问题

时间:2017-02-09 10:38:37

标签: azure azure-powershell azure-keyvault arm-template

我正在尝试创建一个主密钥保管库,它将包含要作为特定用户进行身份验证的所有证书。

我有2个服务主体=>一个用于我的应用,一个用于部署。 我们的想法是部署服务主体可以访问密钥保管库,并将位于那里的证书添加到Web应用程序的商店中。

我已经创建了服务主体,并且我已经授予他关键保险库的所有权限。此外,我还为该密钥库的ARM模板启用了访问机密。

使用powershell我可以作为部署SP登录并检索秘密(证书)。

但是,在部署ARM模板并引用密钥保管库时,这不起作用。我收到以下错误:

FileNotFoundException: ../Desktop/test/test_Data/Plugins/vcredist.exe does not exist

我的ARM模板如下所示:

New-AzureRmResourceGroupDeployment : 11:16:44 - Resource Microsoft.Web/certificates 'test-certificate' failed with message '{
  "Code": "BadRequest",
  "Message": "The service does not have access to '/subscriptions/98f06e7e-1016-4088-843f-62690f3bb306/resourcegroups/rg-temp/providers/microsoft.keyvault/vaults/master-key-vault' Key 
Vault. Please make sure that you have granted necessary permissions to the service to perform the request operation.",
  "Target": null,
  "Details": [
    {
      "Message": "The service does not have access to '/subscriptions/xxxx/resourcegroups/xxx/providers/microsoft.keyvault/vaults/master-key-vault' Key 
Vault. Please make sure that you have granted necessary permissions to the service to perform the request operation."
    },

这是一个错误吗?因为我可以使用Deploy SP with:

来检索证书
    {
     "type":"Microsoft.Web/certificates",
     "name":"test-certificate",
     "apiVersion":"2016-03-01",
     "location":"[resourceGroup().location]",
     "properties":{
        "keyVaultId":"[resourceId('rg-temp', 'Microsoft.KeyVault/vaults', 'master-key-vault')]",
        "keyVaultSecretName":"kv-certificate-test",
        "serverFarmId":"[resourceId('Microsoft.Web/serverfarms', 'asp-test')]"
     }
  },

这是我的ARM模板:(注意,密钥保管库位于另一个资源组中,而不是ARM模板中的资源)

 $key = Get-AzureKeyVaultSecret -VaultName "master-key-vault" -Name "testenvironmentcertificate"

2 个答案:

答案 0 :(得分:4)

我相信您缺少资源提供程序访问密钥保管库的权限,因此WebApp使用自己的资源提供程序来执行此操作,您需要授予该密钥保管库的RP访问权限:

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

参考:

https://blogs.msdn.microsoft.com/appserviceteam/2016/05/24/deploying-azure-web-app-certificate-through-key-vault/

答案 1 :(得分:0)

我尝试了所有的答案,但都没有奏效。以下是对我有用的方法:

为 Key Vault 上的两个服务主体设置访问权限:

enter image description here


在此处阅读更多信息:

https://devsdaily.com/key-vault-failed-to-sync-the-certificate-the-service-does-not-have-access-to-key-vault/