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 managed Identity, 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 Asset-Typen finden Sie unter Understanding autorotation in Azure Key Vault.

In diesem Tutorial wird veranschaulicht, wie Sie Azure Storage-Kontoschlüssel rotieren, die in Azure Key Vault als Geheimnisse gespeichert sind. Sie verwenden eine Funktion, die durch Azure Event Grid Benachrichtigung ausgelöst wird.

Hinweis

Für Speicherkontodienste wird die Verwendung von Microsoft Entra ID zum Autorisieren von Anforderungen empfohlen. Weitere Informationen finden Sie unter Autorisieren Sie den Zugriff 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 von Speicherkonten als Versionen desselben Geheimnisses und wechselt in nachfolgenden Versionen zwischen dem primären und sekundären Schlüssel. Wenn ein Zugriffsschlüssel in der neuesten Version des geheimen Schlüssels gespeichert ist, wird der alternative Schlüssel neu generiert und Key Vault als neue neueste Version des geheimen Schlüssels 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 Secrets veröffentlicht Key Vault das nahezu ablaufende 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 zur Azure Key Vault als neue Version des geheimen Schlüssels 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 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 Schlüsseltresor und zwei Speicherkonten. Sie können dieses Setup im 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 Azure RBAC-Rollenzuweisung für den Zugriff auf geheime Schlüssel in 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 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 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 Key Vault RG den Namen der Ressourcengruppe ein, in der sich ihr key vault 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 Key Vault Name den Namen des key vault 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 Repo-URL den GitHub Speicherort des Funktionscodes ein. In diesem Lernprogramm 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 Zugriffsschlüssel des Speicherkontos 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 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 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 <key1-value> --tags "CredentialId=key1" "ProviderAddress=<storage-account-resource-id>" "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 Schlüssel des Speicherkontos und das Key Vault Secret abrufen und 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 Link zur Bereitstellung der Vorlage in Azure aus:

    Azure-Vorlagenbereitstellungslink.

  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 Key Vault RG den Namen der Ressourcengruppe ein, in der sich ihr key vault 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 Key Vault Name den Namen des key vault 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.

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 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 <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 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-Cmdlet Remove-AzEventGridSubscription oder den Azure CLI-Befehl az eventgrid event-subscription delete.

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 erstellt und nicht von Microsoft. Community-Funktionen werden unter keinem Microsoft Supportprogramm oder -service unterstützt und ohne Jegliche Garantie zur Verfügung gestellt.

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 kann Sie dabei unterstützen, den Code der Rotationsfunktion von PowerShell zu ändern, damit er mit Ihrem spezifischen Dienst funktioniert.

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