Verwalten von Geheimnissen in Vorlagen

Abgeschlossen

Wenn Sie während der Bereitstellung einen sicheren Wert (z. B. ein Kennwort) als Parameter übergeben, können Sie den Wert aus einem Azure Key Vault abrufen.

Verweisen Sie auf den Key Vault und das Geheimnis in Ihrer Parameterdatei.

Der Wert wird nie verfügbar gemacht, da lediglich die Key Vault-ID als Verweis verwendet wird.

Der Key Vault kann in einem anderen Abonnement als der Ressourcengruppe vorhanden sein, in der die Bereitstellung erfolgt.

Bereitstellen eines Key Vaults und Geheimnisses

Verwenden Sie entweder Azure CLI oder PowerShell, um einen Key Vault und ein Geheimnis zu erstellen.

Für den Zugriff auf die Geheimnisse in diesem Key Vault aus einer Resource Manager-Bereitstellung heraus muss die Key Vault-Eigenschaft enabledForTemplateDeployment auf true festgelegt sein.

Verwenden der Azure-Befehlszeilenschnittstelle

Der folgende Codeausschnitt ist ein Beispiel dafür, wie Sie über die Azure CLI eine Key Vault-Instanz und ein Geheimnis bereitstellen können:

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

Aktivieren des Zugriffs auf das Geheimnis

Anders als beim Festlegen der Key Vault-Eigenschaft enabledForTemplateDeployment auf true muss der Benutzer oder die Benutzerin, der/die die Vorlage bereitstellt, über die Berechtigung Microsoft.KeyVault/vaults/deploy/action für den Key Vault-Bereich verfügen.

Dies umfasst auch die Ressourcengruppe und die Key Vault-Instanz. Die Rollen Besitzer und Mitwirkender gewähren diesen Zugriff.

Wenn Sie den Key Vault erstellen, sind Sie der Besitzer, sodass Sie von Natur aus über die Berechtigung verfügen.

Wenn sich die Key Vault-Instanz jedoch in einem anderen Abonnement befindet, muss der Besitzer bzw. die Besitzerin der Key Vault-Instanz den Zugriff gewähren.

Verweisen auf ein Geheimnis mit einer statischen ID

Auf den Key Vault wird in der Parameterdatei verwiesen, nicht in der Vorlage.

Die folgende Abbildung zeigt, wie die Parameterdatei auf das Geheimnis verweist und diesen Wert an die Vorlage übergibt.

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.

Mit der folgenden Vorlage wird eine SQL-Datenbank bereitgestellt, die ein Administratorkennwort enthält.

Der Kennwortparameter ist auf eine sichere Zeichenfolge festgelegt. Die Vorlage gibt jedoch nicht an, woher dieser Wert stammt:

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

Nun können Sie eine Parameterdatei für die vorherige Vorlage erstellen. Geben Sie in der Parameterdatei einen Parameter an, der dem Namen des Parameters in der Vorlage entspricht.

Verweisen Sie für den Parameterwert auf das Geheimnis aus dem Key Vault. Sie verweisen auf das Geheimnis, indem Sie den Ressourcenbezeichner der Key Vault und den Namen des Geheimnisses übergeben.

Das Key Vault-Geheimnis muss bereits in der folgenden Parameterdatei vorhanden sein, und Sie geben einen statischen Wert für seine Ressourcen-ID an.

Kopieren Sie diese Datei lokal, und legen Sie die Abonnement-ID, den Tresornamen und den SQL-Servernamen fest:

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

Sie müssen die Vorlage bereitstellen und die Parameterdatei an die Vorlage übergeben.

Weitere Informationen finden Sie unter Verwenden von Azure Key Vault zum Übergeben eines sicheren Parameterwerts während der Bereitstellung.

Auf dieser Webseite sind auch Referenzdetails zu einem Geheimnis mit einer dynamischen ID vorhanden.