Automatisieren der Geheimnisrotation für Ressourcen, die über zwei Sätze mit Anmeldeinformationen für die Authentifizierung verfügen

Die beste Möglichkeit zur Authentifizierung bei Azure-Diensten ist die Verwendung einer verwalteten Identität. Es gibt jedoch einige Szenarien, in denen dies nicht möglich ist. In diesen Fällen werden Zugriffsschlüssel oder Kennwörter verwendet. Sie sollten Zugriffsschlüssel und Kennwörter häufig rotieren.

In diesem Tutorial wird gezeigt, wie Sie die regelmäßige Rotation von Geheimnissen für Datenbanken und Dienste automatisieren, bei denen zwei Sätze mit Anmeldeinformationen für die Authentifizierung verwendet werden. 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 über eine Azure Event Grid-Benachrichtigung ausgelöst wird.

Hinweis

Für Speicherkontodienste wird die Verwendung von Microsoft Entra ID zur Autorisierung von Anforderungen empfohlen. Weitere Informationen finden Sie unter Autorisieren des Zugriffs auf Blobs mit Microsoft Entra ID. Es gibt Dienste, für die Speicherkonto-Verbindungsschlüssel mit Zugriffsschlüsseln erforderlich sind. Für dieses Szenario empfehlen wir diese Lösung.

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

Diagram that shows the rotation solution.

Bei dieser Lösung werden von Azure Key Vault individuelle Speicherkonto-Zugriffsschlüssel als Versionen desselben Geheimnisses gespeichert, und für nachfolgende Versionen wird zwischen dem Primär- und dem Sekundärschlüssel gewechselt. Wenn ein Zugriffsschlüssel in der aktuellen Version des Geheimnisses gespeichert wird, wird der Alternativschlüssel erneut generiert und für Key Vault als die neue und aktuelle Version des Geheimnisses hinzugefügt. Die Lösung ermöglicht den gesamten Rotationszyklus für die Anwendung, um die Aktualisierung auf den aktuellsten erneut generierten Schlüssel durchzuführen.

  1. 30 Tage vor dem Ablaufdatum eines Geheimnisses veröffentlicht Key Vault das Ereignis für den baldigen Ablauf in Event Grid.
  2. Event Grid überprüft die Ereignisabonnements und ruft per HTTP POST den Funktions-App-Endpunkt auf, der dieses Ereignis abonniert hat.
  3. Die Funktions-App identifiziert den Alternativschlüssel (nicht den aktuellen) und ruft das Speicherkonto für die erneute Generierung auf.
  4. Die Funktions-App fügt den erneut generierten Schlüssel Azure Key Vault als neue Version des Geheimnisses 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 Rotation des Speicherkontoschlüssels müssen Sie SAS-Token auf Kontoebene neu generieren, um Unterbrechungen von Anwendungen zu vermeiden.

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

Link that's labelled Deploy to Azure.

  1. Wählen Sie unter Ressourcengruppe die Option Neu erstellen aus. Nennen 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 that shows how to create a resource group.

Sie verfügen jetzt über einen Schlüsseltresor und zwei Speicherkonten. Sie können dieses Setup in der Azure-Befehlszeilenschnittstelle oder in Azure PowerShell überprüfen, indem Sie diesen 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 zusätzlich zu anderen erforderlichen Komponenten eine Funktions-App mit einer systemseitig verwalteten Identität. Außerdem stellen Sie die Rotationsfunktion für die Speicherkontoschlüssel bereit.

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

  • Einen Azure App Service-Plan
  • Ein Speicherkonto zum Verwalten der Trigger der Funktions-App
  • Eine Zugriffsrichtlinie zum Zugreifen auf Geheimnisse 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 Ereignis SecretNearExpiry
  1. Wählen Sie den Link zur Bereitstellung der Vorlage in Azure aus:

    Azure template deployment link.

  2. Wählen Sie in der Liste Ressourcengruppe die Option vaultrotation aus.

  3. Geben Sie im Feld Storage Account RG (RG des Speicherkontos) den Namen der Ressourcengruppe ein, in der Ihr Speicherkonto enthalten ist. Übernehmen Sie den Standardwert [resourceGroup().name] , falls sich Ihr Speicherkonto bereits in der Ressourcengruppe befindet, in der Sie die Funktion für die Schlüsselrotation bereitstellen möchten.

  4. Geben Sie im Feld Name des Speicherkontos den Namen des Speicherkontos ein, das die zu rotierenden Zugriffsschlüssel enthält. Behalten Sie den Standardwert [concat(resourceGroup().name, 'storage')] bei, wenn Sie ein Speicherkonto verwenden, das in Voraussetzungen erstellt wurde.

  5. Geben Sie im Feld Key Vault RG (RG des Schlüsseltresors) den Namen der Ressourcengruppe ein, in der sich Ihr Schlüsseltresor befindet. Übernehmen Sie den Standardwert [resourceGroup().name] , falls sich Ihr Schlüsseltresor bereits in der Ressourcengruppe befindet, in der Sie die Funktion für die Schlüsselrotation bereitstellen möchten.

  6. Geben Sie im Feld Name des Schlüsseltresors den Namen des Schlüsseltresors ein. Behalten Sie den Standardwert [concat(resourceGroup().name, '-kv')] bei, wenn Sie einen Schlüsseltresor verwenden, der in Voraussetzungen erstellt wurde.

  7. Wählen Sie im Feld App Service-Plantyp den Hostingplan aus. Der Premium-Plan wird nur benötigt, wenn sich Ihr Schlüsseltresor hinter einer Firewall befindet.

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

  9. Geben Sie im Feld Name des Geheimnisses den Namen des Geheimnisses ein, unter dem Sie die Zugriffsschlüssel speichern möchten.

  10. Geben Sie im Feld Repository-URL den GitHub-Speicherort des Funktionscodes ein. In diesem Tutorial 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 that shows how to create and deploy function.

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

Screenshot that shows the Your deployment is complete page.

Hinweis

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

Bereitstellungsvorlagen und Code für die Rotationsfunktion finden Sie in Azure-Beispielen.

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 ein neues Geheimnis mit einem Speicherkonto-Zugriffsschlüssel als Wert erstellen. Darüber hinaus benötigen Sie die Ressourcen-ID des Speicherkontos, die Gültigkeitsdauer des Geheimnisses und die Schlüssel-ID zum Hinzufügen zum Geheimnis, damit der Schlüssel von der Rotationsfunktion im Speicherkonto erneut generiert werden 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 Speicherkonto-Zugriffsschlüssel auf, damit Sie die Schlüsselwerte abrufen können:

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 Ihre abgerufenen Werte für key1Value und storageAccountResourceId verwenden:

$tomorrowDate = (get-date).AddDays(+1).ToString("yyyy-MM-ddTHH:mm:ssZ")
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 erneut generiert wurden, indem Sie den Speicherkontoschlüssel und das Key Vault-Geheimnis abrufen und vergleichen.

Verwenden Sie diesen Befehl, um die Informationen zum Geheimnis abzurufen:

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

Beachten Sie, dass CredentialId auf einen anderen keyName aktualisiert und value erneut generiert wird.

Screenshot that shows the output of the A Z keyvault secret show command for the first storage account.

Rufen Sie die Zugriffsschlüssel 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 that shows the output of the A Z storage account keys list command for the first storage account.

Verwenden der vorhandenen Rotationsfunktion für mehrere Speicherkonten

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

Zum Hinzufügen von Speicherkontoschlüsseln zu einer vorhandenen Funktion für die Rotation 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 Ereignis SecretNearExpiry
  1. Wählen Sie den Link zur Bereitstellung der Vorlage in Azure aus:

    Azure template deployment link.

  2. Wählen Sie in der Liste Ressourcengruppe die Option vaultrotation aus.

  3. Geben Sie im Feld Storage Account RG (RG des Speicherkontos) den Namen der Ressourcengruppe ein, in der Ihr Speicherkonto enthalten ist. Übernehmen Sie den Standardwert [resourceGroup().name] , falls sich Ihr Speicherkonto bereits in der Ressourcengruppe befindet, in der Sie die Funktion für die Schlüsselrotation bereitstellen möchten.

  4. Geben Sie im Feld Name des Speicherkontos den Namen des Speicherkontos ein, das die zu rotierenden Zugriffsschlüssel enthält.

  5. Geben Sie im Feld Key Vault RG (RG des Schlüsseltresors) den Namen der Ressourcengruppe ein, in der sich Ihr Schlüsseltresor befindet. Übernehmen Sie den Standardwert [resourceGroup().name] , falls sich Ihr Schlüsseltresor bereits in der Ressourcengruppe befindet, in der Sie die Funktion für die Schlüsselrotation bereitstellen möchten.

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

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

  8. Geben Sie im Feld Name des Geheimnisses den Namen des Geheimnisses ein, unter dem Sie die Zugriffsschlüssel speichern möchten.

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

  10. Klicken Sie auf Erstellen.

    Screenshot that shows how to create an additional storage account.

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 Speicherkonto-Zugriffsschlüssel auf, damit Sie den Wert für „key2“ 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 Ihre abgerufenen Werte für key2Value und storageAccountResourceId verwenden:

$tomorrowDate = (Get-Date).AddDays(+1).ToString('yyyy-MM-ddTHH:mm:ssZ')
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 Informationen zum Geheimnis abzurufen:

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

Beachten Sie, dass CredentialId auf einen anderen keyName aktualisiert und value erneut generiert wird.

Screenshot that shows the output of the A Z keyvault secret show command for the second storage account.

Rufen Sie die Zugriffsschlüssel 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 that shows the output of the A Z storage account keys list command for the second storage account.

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 Azure PowerShell cmdlet Remove-AzEventGridSubscription oder den Löschbefehl Azure CLI az event grid event- subscription.

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 Rotationsfunktionen werden von einem Mitglied der Community erstellt, nicht von Microsoft. Communityfunktionen werden von keinem Microsoft-Supportprogramm oder -Dienst unterstützt und IN DER VORLIEGENDEN FORM ohne jede Gewährleistung zur Verfügung gestellt.

Nächste Schritte