Geheimen beheren in sjablonen

Voltooid

Wanneer u tijdens de implementatie een beveiligde waarde (zoals een wachtwoord) doorgeeft als parameter, kunt u de waarde ophalen uit een Azure Key Vault.

Verwijs naar de Sleutelkluis en het geheim in uw parameterbestand.

De waarde wordt nooit weergegeven omdat u alleen verwijst naar de Key Vault-id.

De Sleutelkluis kan bestaan in een ander abonnement dan de resourcegroep waarin u deze implementeert.

Implementeren van een sleutelkluis en een geheim

Als u een sleutelkluis en geheim wilt maken, gebruikt u Azure CLI of PowerShell.

Als u toegang wilt krijgen tot de geheimen in deze Key Vault vanuit een Resource Manager-implementatie, moet de eigenschap Key Vault enabledForTemplateDeployment zijn waar waar.

Azure CLI gebruiken

Het volgende codefragment is een voorbeeld van hoe u een Sleutelkluis en geheim kunt implementeren met behulp van 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

Toegang tot het geheim inschakelen

Anders dan het instellen van de eigenschap Key Vault enabledForTemplateDeployment op true, moet de gebruiker die de sjabloon implementeert, Microsoft.KeyVault/vaults/deploy/action machtiging hebben voor het Key Vault-bereik.

Neem ook de resourcegroep en Key Vault op. De rollen Eigenaar en Inzender verlenen beide deze toegang.

Als u de Sleutelkluis maakt, bent u de eigenaar, dus u bent inherent gemachtigd.

Als de Key Vault zich echter onder een ander abonnement bevindt, moet de eigenaar van de Key Vault toegang verlenen.

Verwijzen naar een geheim met statische ID

Er wordt naar De Sleutelkluis verwezen in het parameterbestand en niet naar de sjabloon.

In de volgende afbeelding ziet u hoe het parameterbestand verwijst naar het geheim en deze waarde doorgeeft aan de sjabloon.

diagram met de afbeelding van de stroom van een geheim tijdens de sjabloonimplementatie. Het parameterbestand verwijst naar het geheim van de sjabloon en geeft die waarde door aan de sjabloon.

Met de volgende sjabloon wordt een SQL-database geïmplementeerd die een beheerderswachtwoord bevat.

De wachtwoordparameter is ingesteld op een beveiligde tekenreeks. De sjabloon geeft echter niet op waar die waarde vandaan komt:

{
  "$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": {
  }
}

U kunt nu een parameterbestand voor de voorgaande sjabloon maken. Geef in het parameterbestand een parameter op die overeenkomt met de naam van de parameter in de sjabloon.

Voor de parameterwaarde verwijst u naar het geheim uit de Sleutelkluis. U verwijst naar het geheim door de resource-id van de Sleutelkluis en de naam van het geheim door te geven.

Het Key Vault-geheim moet al bestaan in het volgende parameterbestand en u geeft een statische waarde op voor de resource-id.

Kopieer dit bestand lokaal en stel de abonnements-id, kluisnaam en SQL-servernaam in:

{
    "$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>"
        }
    }
}

U moet de sjabloon implementeren en het parameterbestand doorgeven aan de sjabloon.

Gebruik Azure Key Vault om beveiligde parameterwaarden door te geven tijdens de implementatie. voor meer details.

Er zijn ook details op deze webpagina ter referentie naar een geheim met een dynamische id.