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 zelf wordt nooit getoond, omdat u alleen verwijst naar de Key Vault-id.

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

Een sleutelkluis en geheim implementeren

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

Voor toegang tot de geheimen in deze Key Vault vanuit een Resource Manager-implementatie moet de eigenschap Key Vault enabledForTemplateDeployment waar zijn.

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 key vault-eigenschap enabledForTemplateDeployment op true, moet de gebruiker die de sjabloon implementeert, machtigingen hebben Microsoft.KeyVault/vaults/deploy/action 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 showing the illustration of the flow of a secret during template deployment. The parameter file references the secret from the template and passes that value to the template.

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 voor meer informatie om beveiligde parameterwaarden door te geven tijdens de implementatie voor meer informatie.

Er zijn ook details op deze webpagina voor verwijzing naar een geheim met een dynamische id.