Freigeben über


Automatisierung der Rotation eines Geheimnisses für Ressourcen mit zwei Sets von Authentifizierungsdaten

Die beste Methode zum Authentifizieren bei Azure-Diensten ist die Verwendung einer verwalteten Identität, aber es gibt einige Szenarien, in denen dies keine Option ist. In diesen Fällen werden Zugriffstasten oder Kennwörter verwendet. Sie sollten Zugriffstasten und Kennwörter häufig drehen.

In diesem Lernprogramm wird gezeigt, wie Sie die regelmäßige Rotation von Geheimnissen für Datenbanken und Dienste automatisieren, die zwei Sätze von Authentifizierungsanmeldeinformationen verwenden. Eine umfassende Übersicht über Autorotation-Konzepte und -Vorteile in verschiedenen Objekttypen finden Sie unter Grundlegendes zur Autorotation in Azure Key Vault.

Dieses Tutorial zeigt, wie Sie Azure Storage-Kontoschlüssel rotieren, die in Azure Key Vault als Geheimnisse gespeichert sind. Sie verwenden eine Funktion, die von der Azure Event Grid-Benachrichtigung ausgelöst wird.

Hinweis

Für Speicherkontodienste wird die Verwendung der Microsoft Entra-ID zum Autorisieren von Anforderungen empfohlen. Weitere Informationen finden Sie unter Autorisieren des Zugriffs auf Blobs mit Microsoft Entra ID. Es gibt Dienste, die Verbindungszeichenfolgen für Speicherkonten mit Zugriffsschlüsseln erfordern. Für dieses Szenario empfehlen wir diese Lösung.

Hier ist die Rotationslösung dargestellt, die in diesem Tutorial beschrieben wird:

Diagramm, das die Drehungslösung zeigt.

In dieser Lösung speichert Azure Key Vault die einzelnen Zugriffsschlüssel des Speicherkontos als Versionen desselben Geheimnisses und wechselt zwischen primärem und sekundärem Schlüssel in nachfolgenden Versionen. Wenn ein Zugriffsschlüssel in der neuesten Version des geheimen Schlüssels gespeichert wird, wird der alternative Schlüssel neu generiert und als neue version des geheimen Schlüssels dem Key Vault hinzugefügt. Die Lösung stellt den gesamten Rotationszyklus der Anwendung bereit, um auf den neuesten neu generierten Schlüssel zu aktualisieren.

  1. Dreißig Tage vor dem Ablaufdatum eines Geheimnisses veröffentlicht Key Vault das Beinahe-Ablauf-Ereignis im Event Grid.
  2. Das Ereignisraster überprüft die Ereignisabonnements und verwendet HTTP POST, um den Funktions-App-Endpunkt aufzurufen, der das Ereignis abonniert hat.
  3. Die Funktions-App identifiziert den alternativen Schlüssel (nicht das neueste Schlüssel) und ruft das Speicherkonto auf, um ihn neu zu generieren.
  4. Die Funktions-App fügt den neuen neu generierten Schlüssel als neue Version des geheimen Schlüssels zu Azure Key Vault hinzu.

Voraussetzungen

Hinweis

Die Rotation des Schlüssels des freigegebenen Speicherkontos widerruft die Shared Access Signature (SAS) auf Kontoebene, die basierend auf diesem Schlüssel generiert wurde. Nach der Erneuerung des Speicherkontoschlüssels müssen Sie SAS-Token auf Kontoebene neu generieren, um Unterbrechungen bei Anwendungen zu vermeiden.

Sie können den folgenden Bereitstellungslink verwenden, falls Sie nicht über einen vorhandenen Schlüsseltresor und vorhandene Speicherkonten verfügen:

Link für die Bereitstellung in Azure.

  1. Wählen Sie unter Ressourcengruppe die Option Neu erstellen aus. Benennen Sie die Gruppe Vault Rotation und wählen Sie dann „OK“ aus.

  2. Klicken Sie auf Überprüfen + erstellen.

  3. Klicken Sie auf Erstellen.

    Screenshot, der zeigt, wie Eine Ressourcengruppe erstellt wird.

Sie verfügen jetzt über einen Schlüsseltresor und zwei Speicherkonten. Sie können dieses Setup in der Azure CLI oder Azure PowerShell überprüfen, indem Sie den folgenden Befehl ausführen:

az resource list -o table -g vaultrotation

Das Ergebnis sieht in etwa wie diese Ausgabe aus:

Name                     ResourceGroup         Location    Type                               Status
-----------------------  --------------------  ----------  ---------------------------------  --------
vaultrotation-kv         vaultrotation      westus      Microsoft.KeyVault/vaults
vaultrotationstorage     vaultrotation      westus      Microsoft.Storage/storageAccounts
vaultrotationstorage2    vaultrotation      westus      Microsoft.Storage/storageAccounts

Erstellen und Bereitstellen der Funktion für die Schlüsselrotation

Als Nächstes erstellen Sie eine Funktions-App mit einer vom System verwalteten Identität zusätzlich zu anderen erforderlichen Komponenten. Außerdem stellen Sie die Drehungsfunktion für die Speicherkontoschlüssel bereit.

Für die Rotationsfunktion der Funktions-App werden die folgenden Komponenten und Konfigurationseinstellungen benötigt:

  • Ein Azure App Service-Plan
  • Ein Speicherkonto zum Verwalten von Funktions-App-Triggern
  • Eine Zugriffsrichtlinie für den Zugriff auf geheime Schlüssel im Key Vault
  • Eine Zuweisung der Dienstrolle „Speicherkonto-Schlüsseloperator“ zur Funktions-App, um den Zugriff auf die Zugriffsschlüssel des Speicherkontos zu ermöglichen
  • Eine Funktion für die Schlüsselrotation mit einem Ereignisauslöser und einem HTTP-Trigger (bedarfsgesteuerte Rotation)
  • Ein Event Grid-Ereignisabonnement für das SecretNearExpiry-Ereignis
  1. Wählen Sie den Azure-Vorlagenbereitstellungslink aus:

    Link zur Bereitstellung der Vorlage in Azure.

  2. Wählen Sie in der Ressourcengruppenliste"Vaultrotation" aus.

  3. Geben Sie im Feld " Speicherkonto RG " den Namen der Ressourcengruppe ein, in der sich Ihr Speicherkonto befindet. Behalten Sie den Standardwert [resourceGroup().name] bei, wenn sich Ihr Speicherkonto bereits in derselben Ressourcengruppe befindet, in der Sie die Schlüsseldrehungsfunktion bereitstellen.

  4. Geben Sie im Feld " Speicherkontoname " den Namen des Speicherkontos ein, das die zu drehenden Zugriffstasten enthält. Behalten Sie den Standardwert [concat(resourceGroup().name, 'storage')] bei, wenn Sie das in den Voraussetzungen erstellte Speicherkonto verwenden.

  5. Geben Sie im Feld Schlüsseltresor-RG den Namen der Ressourcengruppe ein, in der sich Ihr Schlüsseltresor befindet. Behalten Sie den Standardwert [resourceGroup().name] bei, wenn Ihr Schlüsseltresor bereits in derselben Ressourcengruppe vorhanden ist, in der Sie die Schlüsseldrehungsfunktion bereitstellen.

  6. Geben Sie im Feld Schlüsseltresorname den Namen des Schlüsseltresors ein. Behalten Sie den Standardwert [concat(resourceGroup().name, '-kv')], wenn Sie den in „Voraussetzungen“ erstellten Schlüsseltresor verwenden.

  7. Wählen Sie im Feld "App-Dienstplantyp " den Hostingplan aus. Premium-Plan wird nur benötigt, wenn Ihr Schlüsseltresor hinter der Firewall liegt.

  8. Geben Sie im Feld "Funktions-App-Name " den Namen der Funktions-App ein.

  9. Geben Sie im Feld "Geheimer Name " den Namen des geheimen Schlüssels ein, in dem Sie Zugriffstasten speichern.

  10. Geben Sie im Feld " Repository-URL " den GitHub-Speicherort des Funktionscodes ein. In dieser Anleitung können Sie https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git verwenden.

  11. Klicken Sie auf Überprüfen + erstellen.

  12. Klicken Sie auf Erstellen.

    Screenshot, der zeigt, wie Sie Funktionen erstellen und bereitstellen.

Nachdem Sie die vorstehenden Schritte abgeschlossen haben, verfügen Sie über ein Speicherkonto, eine Serverfarm, eine Funktions-App und Application Insights. Nach Abschluss der Bereitstellung wird diese Seite angezeigt:

Screenshot der Seite

Hinweis

Wenn ein Fehler auftritt, können Sie die Erneute Bereitstellung auswählen, um die Bereitstellung der Komponenten abzuschließen.

Sie finden Bereitstellungsvorlagen und Code für die Drehungsfunktion in Azure Samples.

Hinzufügen der Speicherkonto-Zugriffsschlüssel zu Key Vault-Geheimnissen

Legen Sie zuerst Ihre Zugriffsrichtlinie so fest, dass für Ihren Benutzerprinzipal Berechtigungen zum Verwalten von Geheimnissen gewährt werden:

az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list

Sie können jetzt einen neuen geheimen Schlüssel mit einem Speicherkontozugriffsschlüssel als Wert erstellen. Außerdem benötigen Sie die Ressourcen-ID des Speicherkontos, die Gültigkeitsdauer des Geheimnisses und die Schlüssel-ID, um diese dem Geheimnis hinzuzufügen, damit die Rotationsfunktion den Schlüssel im Speicherkonto neu generieren kann.

Ermitteln Sie die Ressourcen-ID des Speicherkontos. Sie finden diesen Wert in der id Eigenschaft.

az storage account show -n vaultrotationstorage

Listen Sie die Zugriffsschlüssel des Speicherkontos auf, um die Schlüsselwerte zu erhalten.

az storage account keys list -n vaultrotationstorage

Fügen Sie dem Schlüsseltresor ein Geheimnis mit einer Gültigkeitsdauer von 60 Tagen und der Ressourcen-ID des Speicherkontos hinzu. Setzen Sie das Ablaufdatum zu Demonstrationszwecken auf morgen, um eine sofortige Rotation auszulösen. Führen Sie diesen Befehl aus, indem Sie die abgerufenen Werte für key1Value und storageAccountResourceId verwenden.

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Dieses Geheimnis löst das Ereignis SecretNearExpiry innerhalb weniger Minuten aus. Dieses Ereignis löst wiederum die Funktion aus, um den geheimen Schlüssel mit dem Ablaufdatum zu rotieren, das auf 60 Tage festgelegt ist. In dieser Konfiguration würde das Ereignis „SecretNearExpiry“ alle 30 Tage (30 Tage vor Ablauf) ausgelöst, und die Rotationsfunktion würde zwischen key1 und key2 abwechseln.

Sie können überprüfen, ob Zugriffsschlüssel neu generiert wurden, indem Sie den Speicherkontoschlüssel und das Geheimnis des Schlüsseltresors abrufen und diese vergleichen.

Verwenden Sie diesen Befehl, um die geheimen Informationen abzurufen:

az keyvault secret show --vault-name vaultrotation-kv --name storageKey

Beachten Sie, dass CredentialId auf die alternative keyName aktualisiert wird und dass value neu generiert wird.

Screenshot: Ausgabe des Befehls „A Z keyvault secret show“ für das erste Speicherkonto.

Rufen Sie die Zugriffstasten ab, um die Werte zu vergleichen:

az storage account keys list -n vaultrotationstorage 

Beachten Sie, dass value des Schlüssels mit dem Geheimnis im Schlüsseltresor übereinstimmt:

Screenshot: Ausgabe des Befehls „A Z storage account keys list“ für das erste Speicherkonto.

Verwenden einer vorhandenen Drehungsfunktion für mehrere Speicherkonten

Sie können dieselbe Funktions-App wiederverwenden, um Schlüssel für mehrere Speicherkonten zu drehen.

Zum Hinzufügen von Speicherkontoschlüsseln zu einer vorhandenen Funktion zur Drehung benötigen Sie Folgendes:

  • Eine Zuweisung der Dienstrolle „Speicherkonto-Schlüsseloperator“ zur Funktions-App, um den Zugriff auf die Zugriffsschlüssel des Speicherkontos zu ermöglichen.
  • Ein Event Grid-Ereignisabonnement für das SecretNearExpiry-Ereignis .
  1. Wählen Sie den Azure-Vorlagenbereitstellungslink aus:

    Link zur Bereitstellung der Vorlage in Azure.

  2. Wählen Sie in der Ressourcengruppenliste"Vaultrotation" aus.

  3. Geben Sie im Feld " Speicherkonto RG " den Namen der Ressourcengruppe ein, in der sich Ihr Speicherkonto befindet. Behalten Sie den Standardwert [resourceGroup().name] bei, wenn sich Ihr Speicherkonto bereits in derselben Ressourcengruppe befindet, in der Sie die Schlüsseldrehungsfunktion bereitstellen.

  4. Geben Sie im Feld " Speicherkontoname " den Namen des Speicherkontos ein, das die zu drehenden Zugriffstasten enthält.

  5. Geben Sie im Feld Schlüsseltresor-RG den Namen der Ressourcengruppe ein, in der sich Ihr Schlüsseltresor befindet. Behalten Sie den Standardwert [resourceGroup().name] bei, wenn Ihr Schlüsseltresor bereits in derselben Ressourcengruppe vorhanden ist, in der Sie die Schlüsseldrehungsfunktion bereitstellen.

  6. Geben Sie im Feld Schlüsseltresorname den Namen des Schlüsseltresors ein.

  7. Geben Sie im Feld "Funktions-App-Name " den Namen der Funktions-App ein.

  8. Geben Sie im Feld "Geheimer Name " den Namen des geheimen Schlüssels ein, in dem Sie Zugriffstasten speichern.

  9. Klicken Sie auf Überprüfen + erstellen.

  10. Klicken Sie auf Erstellen.

    Screenshot, der zeigt, wie Sie ein zusätzliches Speicherkonto erstellen.

Hinzufügen eines Speicherkonto-Zugriffsschlüssels zu Key Vault-Geheimnissen

Ermitteln Sie die Ressourcen-ID des Speicherkontos. Sie finden diesen Wert in der id Eigenschaft.

az storage account show -n vaultrotationstorage2

Listen Sie die Zugriffsschlüssel des Speicherkontos auf, damit Sie den Wert von Schlüssel2 abrufen können.

az storage account keys list -n vaultrotationstorage2

Fügen Sie dem Schlüsseltresor ein Geheimnis mit einer Gültigkeitsdauer von 60 Tagen und der Ressourcen-ID des Speicherkontos hinzu. Setzen Sie das Ablaufdatum zu Demonstrationszwecken auf morgen, um eine sofortige Rotation auszulösen. Führen Sie diesen Befehl aus, indem Sie die abgerufenen Werte für key2Value und storageAccountResourceId verwenden.

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Verwenden Sie diesen Befehl, um die geheimen Informationen abzurufen:

az keyvault secret show --vault-name vaultrotation-kv --name storageKey2

Beachten Sie, dass CredentialId auf die alternative keyName aktualisiert wird und dass value neu generiert wird.

Screenshot: Ausgabe des Befehls „A Z keyvault secret show“ für das zweite Speicherkonto.

Rufen Sie die Zugriffstasten ab, um die Werte zu vergleichen:

az storage account keys list -n vaultrotationstorage 

Beachten Sie, dass value des Schlüssels mit dem Geheimnis im Schlüsseltresor übereinstimmt:

Screenshot: Ausgabe des Befehls „A Z storage account keys list“ für das zweite Speicherkonto.

Deaktivieren der Rotation für Geheimnisse

Sie können die Rotation eines Geheimnisses deaktivieren, indem Sie einfach das Event Grid-Abonnement für dieses Geheimnis löschen. Verwenden Sie das Azure PowerShell Remove-AzEventGridSubscription-Cmdlet oder den Azure CLI az event grid event-subscription delete command.

Key Vault-Rotationsfunktionen für zwei Sätze von Anmeldeinformationen

Vorlage für Rotationsfunktionen für zwei Sätze von Anmeldeinformationen und einige sofort einsatzbereite Funktionen:

Hinweis

Diese Drehungsfunktionen werden von einem Mitglied der Community und nicht von Microsoft erstellt. Community-Funktionen werden von keinem Microsoft-Supportprogramm oder -dienst unterstützt und ohne jegliche Garantie in der vorliegenden Form zur Verfügung gestellt.

Nächste Schritte