Azure Key Vault access from ARM Template

假如想象 提交于 2020-01-24 11:18:18

问题


I was trying to add Azure key vault integration with our ARM deployment, so we can keep all password in Azure Key-Vault.

I was following this to try to access secret (adminPassword) I have created in Azure KeyVault (dSentienceAnalytics). Here is my template

I tried to deploy this template through powershell, but it asked me to enter value for variable “adminPassword”, which it supposed to retrieve from Azure key vault.

Do you see what I am missing here ? anyone can help me with this ?


回答1:


You cannot use a KeyVault reference in the template itself, only in the parameters file. So your template will not look any differently if you're using KeyVault, the adminPassword parameter will simply be defined as a secureString. The template's use of the password can look exactly like this:

https://github.com/Azure/azure-quickstart-templates/blob/master/101-vm-simple-linux/azuredeploy.json

The parameters file, is where the reference will be used. The first code sample here:

https://azure.microsoft.com/en-us/documentation/articles/resource-manager-keyvault-parameter/#reference-a-secret-with-static-id

Is showing you the parameters file, not the template file's parameter object (it is a bit confusing).

For a really simple example, see the KeyVaultUse.json and KeyVaultUse.parameters.json here:

https://github.com/rjmax/ArmExamples/tree/master/keyvaultexamples

Note that there's nothing unique or different about KeyVaultUse.json, the "key" is in the parameters file.

That help?




回答2:


You can create a linked template and pass the keyvault secret to that as a parameter. Your linked template will need to be accessible to Azure at some uri.

        "name": "linked-template",
        "type": "Microsoft.Resources/deployments",
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri":"<your linked template uri, e.g. a blob-store file with a sas token>"
            },
            "parameters": {

                "password": {
                    "reference": {
                        "keyVault": {
                            "id": "[variables('keyVaultId')]"
                        },
                    "secretName": "password"
                    }
                },

You will need the id of your key vault, e.g. here, it's assume to be in a variable constructed from parameters on the top-level template where the user specifies a resource group and name for the key-vault:

    "deploymentKeyVaultId" : "[resourceid(subscription().subscriptionId,
      parameters('keyVaultResourceGroup'), 'Microsoft.KeyVault/vaults',
      parameters('keyVaultName'))]",



回答3:


What are you trying to deploy? If it is an app service you can retrieve the secret from Key Vault with the combination of leveraging Managed Service Identity and access policy on the Key Vault. Here's how to turn on MSI authentication for App Service and add access policy

In the App Service can add something like this:

   {
          "apiVersion": "2018-11-01",
          "name": "appsettings",
          "type": "config",
          "dependsOn": [
            "[resourceId('Microsoft.Web/Sites', WEBSITE NAME))]",
            "Microsoft.ApplicationInsights.AzureWebSites",
            "[resourceId('Microsoft.KeyVault/vaults/', variables('keyVaultName'))]",
            "[resourceId('Microsoft.KeyVault/vaults/secrets', variables('keyVaultName'), variables('secretName'))]"

          ],
          "properties": {
            "ConnectionSecret": "[concat('@Microsoft.KeyVault(SecretUri=', reference(SECRET NAME).secretUriWithVersion, ')')]"


          }


来源:https://stackoverflow.com/questions/40597936/azure-key-vault-access-from-arm-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!