2017-02-09 1 views
0

Je tente de créer un coffre-fort de clé principale, qui contiendra tous les certificats à authentifier en tant qu'utilisateur particulier.Problème avec la référence KeyVault dans le modèle ARM

J'ai 2 principaux de service => Un pour mon application, Un pour le déploiement. L'idée est que le principal du service de déploiement accède au coffre-fort et y ajoute le certificat situé dans le magasin des applications Web.

J'ai créé le service principal et je lui ai donné toutes les autorisations sur le coffre-fort. J'ai également activé les secrets d'accès dans les modèles ARM pour ce coffre-fort. En utilisant PowerShell, je peux me connecter en tant que SP Déploiement et récupérer le secret (certificat). Toutefois, cela ne fonctionne pas lors du déploiement du modèle ARM avec une référence à l'emplacement de stockage de clés. Je suis l'erreur suivante:

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." },

Mon modèle ARM ressemble à ceci:

{ 
    "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')]" 
    } 
    }, 

Est-ce un bug? Parce que je suis en mesure de récupérer le certificat à l'aide du déploiement SP avec:

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

Ceci est mon modèle ARM: (note, la vie de voûte clés dans un autre groupe de ressources que les ressources dans le modèle ARM)

{ 
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", 
"contentVersion": "1.0.0.0", 
"parameters": {}, 
"variables": {}, 
"resources": [ 
    { 
    "type":"Microsoft.Web/certificates", 
    "name":"test-certificate", 
    "apiVersion":"2016-03-01", 
    "location":"[resourceGroup().location]", 
    "properties":{ 
     "keyVaultId":"/subscriptions/xxx/resourceGroups/rg-temp/providers/Microsoft.KeyVault/vaults/xxx", 
     "keyVaultSecretName":"testcert", 
     "serverFarmId":"[resourceId('Microsoft.Web/serverfarms', 'asp-test')]" 
    } 
    }, 
    { 
     "name": "wa-test1", 
     "type": "Microsoft.Web/sites", 
     "location": "[resourceGroup().location]", 
     "apiVersion": "2016-08-01", 
     "dependsOn": [ 
      "[concat('Microsoft.Web/serverfarms/', 'asp-test')]" 
     ], 
     "tags": { 
      "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/asp-test')]": "Resource", 
      "displayName": "wa-test1" 
     }, 
     "properties": { 
      "name": "wa-test1", 
      "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', 'asp-test')]" 
     } 
    }, 
    { 
     "name": "asp-test", 
     "type": "Microsoft.Web/serverfarms", 
     "location": "[resourceGroup().location]", 
     "apiVersion": "2014-06-01", 
     "dependsOn": [], 
     "tags": { 
      "displayName": "appServicePlan" 
     }, 
     "properties": { 
      "name": "asp-test", 
      "sku": "Free", 
      "workerSize": "Small", 
      "numberOfWorkers": 1 
     } 
    } 
], 
"outputs": {} 
} 
+0

pouvez-vous partager le modèle? vous pouvez supprimer les informations sensibles – 4c74356b41

+0

J'ai édité ma question :) – Identity

+0

ok, au premier coup d'oeil cela semble très bien, je ne suis pas sûr de ce qui pourrait être faux, pouvez-vous créer un autre coffre-fort et utilisez simplement votre administrateur d'abonnement pour déployer le template (et vérifiez que l'administrateur a tous les droits sur keyvault et keyvault permet les déploiements de templates?)? – 4c74356b41

Répondre

2

Je crois que vous manque une autorisation pour un fournisseur de ressources pour accéder à Key Vault, de sorte que le WebApp utilise son propre fournisseur de ressources pour le faire, vous devez accorder l'accès RP à voûte clé:

Set-AzureRmKeyVaultAccessPolicy -VaultName KEYVAULTNAME -Servi cePrincipalName -PermissionsToSecrets de abfa0a7c-a6b6-4736-8310-5855508787cd se

Référence:

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

+0

J'ai coché la deuxième case sous => Mon coffre-fort => Règles d'accès avancées. Même lors de l'utilisation de mon administrateur d'abonnement lors du déploiement du modèle ARM, me donne la même erreur, des idées? – Identity

+0

J'ai exécuté cette commande, mais je n'ai pas utilisé 'abfa0a7c-a6b6-4736-8310-5855508787cd', mais mon ID SP de déploiement à la place. Merci pour la réponse, ça marche! – Identity