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

Die beste Methode zum Authentifizieren bei Azure Diensten ist eine verwaltete Identität, aber in einigen Szenarien sind weiterhin Zugriffstasten oder Kennwörter erforderlich. Ändern Sie diese Zugangsdaten regelmäßig, um die Auswirkungen eines Datenlecks zu verringern.

Dieses Tutorial zeigt, wie Sie die regelmäßige Rotation von Geheimnissen für Datenbanken und Dienste automatisieren, die zwei Gruppen von Authentifizierungsdaten verwenden. Eine Übersicht über die Autorotation über verschiedene Objekttypen hinweg finden Sie unter Grundlegendes zur Autorotation in Azure Key Vault.

Insbesondere werden in diesem Lernprogramm Azure Storage-Kontoschlüssel rotiert, die als Geheimnisse in Azure Key Vault gespeichert sind. Sie verwendet eine Funktion, die von einer Azure Event Grid Benachrichtigung ausgelöst wird.

Wichtig

Für Azure Storage bevorzugen Sie Microsoft Entra ID Autorisierung mit einer verwalteten Identität gegenüber gemeinsam genutzten Kontoschlüsseln. Soweit Compliance-Anforderungen dies zulassen, deaktivieren Sie die Shared Key-Autorisierung für das Speicherkonto und machen eine Schlüsselrotation vollständig überflüssig. Verwenden Sie das Muster in diesem Lernprogramm nur, wenn ein Workload einen Speicherkontoschlüssel oder eine Verbindungszeichenfolge erfordert.

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 jeden Speicherkontozugriffsschlüssel als Version desselben geheimen Schlüssels und wechselt zwischen primärem und sekundärem Schlüssel in aufeinander folgenden Versionen. Wenn ein Zugriffsschlüssel als neueste Version des geheimen Schlüssels gespeichert ist, wird der alternative Schlüssel neu generiert und als neue Version zu Key Vault hinzugefügt. Mit diesem Design erhält die Anwendung einen vollständigen Drehungszyklus, um den neu regenerierten Schlüssel aufzunehmen.

  1. 30 Tage vor dem Ablaufdatum eines Geheimnisses veröffentlicht Key Vault das Ereignis „Läuft demnächst ab“ in Event Grid.
  2. Event Grid überprüft die Ereignisabonnements und ruft mit HTTP POST den Funktions-App-Endpunkt auf, der dieses 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 neu generierten Schlüssel als neue Version des Geheimnisses in Azure Key Vault hinzu.

Voraussetzungen

Hinweis

Das Rotieren eines gemeinsam verwendeten Speicherkontoschlüssels hebt alle Shared Access Signatures (SAS) auf Kontoebene auf, die mit diesem Schlüssel erstellt wurden. Nach der Rotation erneuern Sie SAS-Token auf Kontoebene, um Unterbrechungen bei Anwendungen zu vermeiden.

Wenn Sie nicht über einen vorhandenen Schlüsseltresor und zwei Speicherkonten verfügen, verwenden Sie diesen Bereitstellungslink:

Link mit der Bezeichnung

  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 Key Vault und zwei Speicherkonten. Überprüfen Sie dieses Setup im Azure CLI oder Azure PowerShell:

az resource list -o table -g vaultrotation

Das Ergebnis sieht der folgenden Ausgabe ähnlich:

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

Erstellen Sie als Nächstes eine Funktions-App mit einer vom System zugewiesenen verwalteten Identität zusammen mit den anderen erforderlichen Komponenten, und stellen Sie die Drehungsfunktion für die Speicherkontoschlüssel bereit.

Für die Drehungsfunktion sind die folgenden Komponenten und Konfigurationen erforderlich:

  • Ein Azure App Service Plan.
  • Ein Speicherkonto zum Verwalten von Funktions-App-Triggern.
  • Eine Azure-Rollenzuweisung, mit der die Funktions-App auf Geheimnisse im Key Vault zugreifen kann.
  • Die der Funktions-App zugewiesene Dienstrolle „Storage Account Key Operator Service Role“, damit sie auf die Zugriffsschlüssel des Speicherkontos zugreifen kann.
  • Eine Funktion für die Schlüsselrotation mit einem Event Grid-Trigger und einem HTTP-Trigger (für die Rotation bei Bedarf).
  • Ein Event Grid-Ereignisabonnement für das SecretNearExpiry-Ereignis .
  1. Wählen Sie den Link zur Bereitstellung der Vorlage in Azure aus:

    Link zur Bereitstellung von Azure-Vorlagen.

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

  3. Geben Sie in " Speicherkonto-RG" den Namen der Ressourcengruppe ein, in der sich das Speicherkonto befindet. Behalten Sie den Standardwert [resourceGroup().name] bei, wenn sich das Speicherkonto in derselben Ressourcengruppe wie die Drehungsfunktion befindet.

  4. Geben Sie unter " Speicherkontoname" den Namen des Speicherkontos ein, dessen Zugriffstasten Sie drehen möchten. Behalten Sie die Standardeinstellung [concat(resourceGroup().name, 'storage')] bei, wenn Sie das Speicherkonto unter "Voraussetzungen" verwenden.

  5. Geben Sie in Key Vault RG den Namen der Ressourcengruppe ein, in der sich die key vault befindet. Behalten Sie den Standardwert [resourceGroup().name] bei, wenn sich der Schlüsseltresor in derselben Ressourcengruppe wie die Rotationsfunktion befindet.

  6. Geben Sie in Key Vault Name den Key-Vault-Namen ein. Behalten Sie den Standardwert [concat(resourceGroup().name, '-kv')] bei, wenn Sie den Schlüsseltresor unter Voraussetzungen verwenden.

  7. Wählen Sie im App Service-Plantyp den Hostingplan aus. Premium-Plan ist nur erforderlich, wenn sich der Schlüsseltresor hinter einer Firewall befindet.

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

  9. Geben Sie unter "Geheimer Name" den geheimen Namen ein, der die Zugriffstasten speichert.

  10. Geben Sie in der Repository-URL den GitHub Speicherort des Funktionscodes ein: https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git.

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

  12. Klicken Sie auf Erstellen.

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

Nach Abschluss der Bereitstellung verfügen Sie über ein Speicherkonto, eine Serverfarm, eine Funktions-App und eine Application Insights-Ressource:

Screenshot der Seite

Hinweis

Diese ARM-Vorlage verwendet die App Service-Quellcodeverwaltungsbereitstellung (Kudu), um den Funktionscode aus GitHub abzurufen. Für Produktionsworkloads empfehlen wir stattdessen eine paketbasierte Bereitstellung wie func azure functionapp publish oder ZIP-Bereitstellung mit WEBSITE_RUN_FROM_PACKAGE. Wenn die Bereitstellung fehlschlägt, wählen Sie "Erneut bereitstellen " aus, um den Vorgang erneut auszuführen.

Bereitstellungsvorlagen und Code für die Drehungsfunktion befinden sich in Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.

Hinzufügen der Zugriffsschlüssel des Speicherkontos zu Key Vault-Geheimnissen

Weisen Sie sich zunächst die Rolle "Key Vault Secrets Officer" zu, damit Sie geheime Schlüssel im Tresor verwalten können:

az role assignment create --role "Key Vault Secrets Officer" --assignee <email-address-of-user> --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/vaultrotation-kv

Sie können jetzt einen geheimen Schlüssel erstellen, dessen Wert ein Speicherkontozugriffsschlüssel ist. Fügen Sie zusätzlich zum Wert die Speicherkonto-Ressourcen-ID, die Gültigkeitsdauer des Geheimnisses und die Schlüssel-ID als Tags hinzu, damit die Rotationsfunktion den Schlüssel im Speicherkonto neu generieren kann.

Ermitteln Sie die Ressourcen-ID des Speicherkontos. Dies ist die 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 (zur Demonstration) einem Ablaufdatum für morgen hinzu, um die Rotation sofort auszulösen. Führen Sie diesen Befehl mit den abgerufenen Werten für key1Value und storageAccountResourceId:

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

Dieses Secret löst innerhalb weniger Minuten ein SecretNearExpiry-Ereignis aus, das wiederum die Funktion auslöst, das Secret mit einem Ablaufdatum in 60 Tagen zu rotieren. In dieser Konfiguration wird das SecretNearExpiry-Ereignis alle 30 Tage (30 Tage vor Ablauf) ausgelöst, und die Rotationsfunktion wechselt ab zwischen key1 und key2.

Stellen Sie sicher, dass die Zugriffsschlüssel neu generiert wurden, indem Sie den Speicherkontoschlüssel und das Key Vault-Geheimnis abrufen und anschließend 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 der Schlüsselwert dem geheimen Schlüssel im Schlüsseltresor entspricht:

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.

Um die Schlüssel eines anderen Speicherkontos zu einer vorhandenen Drehungsfunktion hinzuzufügen, benötigen Sie Folgendes:

  • Die der Function App zugewiesene Dienstrolle „Storage Account Key Operator“, damit sie auf die Zugriffsschlüssel des Speicherkontos zugreifen kann.
  • Ein Event Grid-Ereignisabonnement für das SecretNearExpiry-Ereignis .
  1. Wählen Sie den Link zur Bereitstellung der Vorlage in Azure aus:

    Link zur Bereitstellung von Azure-Vorlagen.

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

  3. Geben Sie in " Speicherkonto-RG" den Namen der Ressourcengruppe ein, in der sich das Speicherkonto befindet. Behalten Sie den Standardwert [resourceGroup().name] bei, wenn sich das Speicherkonto in derselben Ressourcengruppe wie die Drehungsfunktion befindet.

  4. Geben Sie unter " Speicherkontoname" den Namen des Speicherkontos ein, dessen Zugriffstasten Sie drehen möchten.

  5. Geben Sie in Key Vault RG den Namen der Ressourcengruppe ein, in der sich die key vault befindet. Behalten Sie den Standardwert [resourceGroup().name] bei, wenn sich der Schlüsseltresor in derselben Ressourcengruppe wie die Rotationsfunktion befindet.

  6. Geben Sie in Key Vault Name den Key-Vault-Namen ein.

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

  8. Geben Sie unter "Geheimer Name" den geheimen Namen ein, der die Zugriffstasten speichert.

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

  10. Klicken Sie auf Erstellen.

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

Speicherkonto-Zugriffsschlüssel zu Key Vault Geheimnissen hinzufügen.

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 (zur Demonstration) einem Ablaufdatum für morgen hinzu, um die Rotation sofort auszulösen. Führen Sie diesen Befehl mit den abgerufenen Werten für key2Value und storageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2-value> --tags "CredentialId=key2" "ProviderAddress=<storage-account-resource-id>" "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 vaultrotationstorage2

Beachten Sie, dass der Schlüsselwert dem geheimen Schlüssel im Schlüsseltresor entspricht:

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

Rotation für ein Geheimnis deaktivieren

Um die Rotation für ein Geheimnis zu deaktivieren, löschen Sie das Event Grid-Abonnement für dieses Geheimnis. Verwenden Sie das Azure PowerShell-Cmdlet Remove-AzEventGridSubscription oder den Azure CLI-Befehl az eventgrid event-subscription delete.

Verwenden von KI zum Anpassen der Drehfunktion für andere Dienste

In diesem Lernprogramm wird die Geheimrotation für Azure-Storage-Konten veranschaulicht, aber Sie können die Rotationsfunktion auch für andere Azure-Dienste anpassen, die duale Anmeldeinformationen verwenden. GitHub Copilot können Sie beim Ändern des PowerShell-Rotationsfunktionscodes unterstützen, um mit Ihrem Dienst zu arbeiten.

I'm using the Azure Key Vault dual-credential secret rotation tutorial for Storage accounts. Help me modify the PowerShell rotation function to work with Azure Cosmos DB instead. The function should:
1. Connect to Cosmos DB and regenerate the secondary key
2. Store the new key in Key Vault as a new secret version
3. Alternate between primary and secondary keys on each rotation
Show me the changes needed to the PowerShell function code, including the correct Cosmos DB PowerShell cmdlets.

GitHub Copilot wird von KI unterstützt, sodass Überraschungen und Fehler möglich sind. Weitere Informationen finden Sie unter Copilot FAQs.

Nächste Schritte