Hantera hemligheter i mallar

Slutförd

När du skickar ett säkert värde (till exempel ett lösenord) som en parameter under distributionen kan du hämta värdet från ett Azure Key Vault.

Referera till Key Vault och hemligheten i parameterfilen.

Värdet exponeras aldrig eftersom du bara refererar till dess Key Vault-ID.

Key Vault kan finnas i en annan prenumeration än den resursgrupp som du distribuerar den till.

Distribuera ett nyckelvalv och en lösenord

Om du vill skapa ett Key Vault och en hemlighet använder du antingen Azure CLI eller PowerShell.

Om du vill komma åt hemligheterna i det här Nyckelvalvet från en Resource Manager-distribution måste egenskapen Key Vault enabledForTemplateDeployment vara true.

Använda Azure CLI

Följande kodfragment är ett exempel på hur du kan distribuera ett Key Vault och en hemlighet med Azure CLI:

keyVaultName='{your-unique-vault-name}'
resourceGroupName='{your-resource-group-name}'
location='centralus'
userPrincipalName='{your-email-address-associated-with-your-subscription}'

# Create a resource group
az group create --name $resourceGroupName --location $location

# Create a Key Vault
az keyvault create \
  --name $keyVaultName \
  --resource-group $resourceGroupName \
  --location $location \
  --enabled-for-template-deployment true
az keyvault set-policy --upn $userPrincipalName --name $keyVaultName --secret-permissions set delete get list

# Create a secret with the name, vmAdminPassword
password=$(openssl rand -base64 32)
echo $password
az keyvault secret set --vault-name $keyVaultName --name 'vmAdminPassword' --value $password

Aktivera åtkomst till hemligheten

Förutom att ange egenskapen Key Vault enabledForTemplateDeploymenttruemåste användaren som distribuerar mallen ha Microsoft.KeyVault/vaults/deploy/action behörighet för Key Vault-omfånget.

Inkluderar även resursgruppen och Key Vault. Rollerna Ägare och Deltagare beviljar båda den här åtkomsten.

Om du skapar Key Vault är du ägare, så du har automatiskt behörighet.

Men om Key Vault är under en annan prenumeration måste ägaren till Key Vault bevilja åtkomst.

Referera till en hemlighet med statiskt ID

Key Vault refereras till i parameterfilen och inte i mallen.

Följande bild visar hur parameterfilen refererar till hemligheten och skickar det värdet till mallen.

diagram som visar bilden av flödet av en hemlighet under malldistributionen. Parameterfilen refererar till hemligheten från mallen och skickar värdet till mallen.

Följande mall distribuerar en SQL-databas som innehåller ett administratörslösenord.

Lösenordsparametern är inställd på en säker sträng. Mallen anger dock inte var värdet kommer ifrån:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "adminLogin": {
      "type": "string"
    },
    "adminPassword": {
      "type": "securestring"
    },
    "sqlServerName": {
      "type": "string"
    }
  },
  "resources": [
    {
      "name": "[parameters('sqlServerName')]",
      "type": "Microsoft.Sql/servers",
      "apiVersion": "2015-05-01-preview",
      "location": "[resourceGroup().location]",
      "tags": {},
      "properties": {
        "administratorLogin": "[parameters('adminLogin')]",
        "administratorLoginPassword": "[parameters('adminPassword')]",
        "version": "12.0"
      }
    }
  ],
  "outputs": {
  }
}

Nu kan du skapa en parameterfil för föregående mall. I parameterfilen anger du en parameter som matchar parameterns namn i mallen.

För parametervärdet refererar du till hemligheten från Key Vault. Du refererar till hemligheten genom att skicka resursidentifieraren för Key Vault och hemlighetens namn.

Key Vault-hemligheten måste redan finnas i följande parameterfil och du anger ett statiskt värde för dess resurs-ID.

Kopiera den här filen lokalt och ange prenumerations-ID, valvnamn och SQL-servernamn:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "adminLogin": {
            "value": "exampleadmin"
        },
        "adminPassword": {
            "reference": {
              "keyVault": {
                "id": "/subscriptions/<subscription-id>/resourceGroups/examplegroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
              },
              "secretName": "examplesecret"
            }
        },
        "sqlServerName": {
            "value": "<your-server-name>"
        }
    }
}

Du skulle behöva distribuera mallen och skicka parameterfilen till mallen.

För mer information, använd Azure Key Vault för att skicka säkra parametervärden under distributionen.

Det finns också information på den här webbsidan för referens till en hemlighet med ett dynamiskt ID.