De rotatie van een geheim automatiseren voor resources met twee sets verificatiereferenties

De beste manier om te verifiëren bij Azure services is met een beheerde identiteit, maar sommige scenario's vereisen nog steeds toegangssleutels of wachtwoorden. Wijzig die inloggegevens regelmatig om de impact van een datalek te beperken.

Deze zelfstudie laat zien hoe u periodieke geheimrotatie automatiseert voor databases en services die gebruikmaken van twee sets verificatiereferenties. Zie Autorotatie in Azure Key Vault begrijpen voor een overzicht van autorotatie voor verschillende typen assets.

Meer specifiek roteert deze zelfstudie Azure Storage-accountsleutels die als geheimen zijn opgeslagen in Azure Key Vault. Er wordt een functie gebruikt die wordt geactiveerd door een Azure Event Grid melding.

Important

Voor Azure Storage geeft u de voorkeur aan Microsoft Entra ID autorisatie met een beheerde identiteit via gedeelde accountsleutels. Wanneer naleving is toegestaan, schakelt u autorisatie van gedeelde sleutels in het opslagaccount uit en verwijdert u de noodzaak voor sleutelrotatie volledig. Gebruik het patroon in deze zelfstudie alleen wanneer voor een workload een opslagaccountsleutel of een verbindingsreeks is vereist.

Hier volgt de rotatieoplossing die in deze handleiding wordt beschreven:

Diagram met de draaiingsoplossing.

In deze oplossing slaat Azure Key Vault elke toegangssleutel van het opslagaccount op als een versie van hetzelfde geheim, afwisselend tussen de primaire en secundaire sleutel in opeenvolgende versies. Wanneer één toegangssleutel wordt opgeslagen als de nieuwste versie van het geheim, wordt de alternatieve sleutel opnieuw gegenereerd en toegevoegd aan Key Vault als de nieuwe nieuwste versie. Dit ontwerp geeft de toepassing een volledige rotatiecyclus om de zojuist opnieuw gegenereerde sleutel op te halen.

  1. Dertig dagen vóór de vervaldatum van een geheim publiceert Key Vault de bijna-verlopen-gebeurtenis in Event Grid.
  2. Event Grid controleert de gebeurtenisabonnementen en maakt gebruik van HTTP POST om het eindpunt voor de functie-app aan te roepen die is geabonneerd op de gebeurtenis.
  3. De functie-app identificeert de alternatieve sleutel (niet de meest recente) en roept het opslagaccount aan om het opnieuw te genereren.
  4. De functie-app voegt de opnieuw gegenereerde sleutel toe aan Azure Key Vault als de nieuwe versie van het geheim.

Vereiste voorwaarden

  • Een Azure-abonnement. Maak gratis een account.
  • Azure Cloud Shell. In deze zelfstudie wordt gebruikgemaakt van portal Cloud Shell met de PowerShell-omgeving.
  • Een Azure-sleutelkluis.
  • Twee Azure opslagaccounts.

Opmerking

Als u een sleutel voor een gedeeld opslagaccount roteert, wordt elke SAS (Shared Access Signature) die op accountniveau is gegenereerd op basis van die sleutel, ingetrokken. Na rotatie genereert u SAS-tokens op accountniveau opnieuw om onderbreking van toepassingen te voorkomen.

Als u geen bestaande sleutelkluis en twee opslagaccounts hebt, gebruikt u deze implementatiekoppeling:

Link met het label Deploy to Azure.

  1. Selecteer voor Resourcegroep de optie Nieuwe maken. Geef de groepskluis een naam en selecteer VERVOLGENS OK.

  2. Kies Beoordelen + creëren.

  3. Klik op Creëren.

    Schermopname van het maken van een resourcegroep.

U hebt nu een sleutelkluis en twee opslagaccounts. Controleer deze instelling in de Azure CLI of Azure PowerShell:

az resource list -o table -g vaultrotation

Het resultaat ziet er ongeveer als volgt uit:

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

De sleutelrotatiefunctie maken en implementeren

Maak vervolgens een functie-app met een door het systeem toegewezen beheerde identiteit samen met de andere vereiste onderdelen en implementeer de rotatiefunctie voor de sleutels van het opslagaccount.

Voor de rotatiefunctie zijn de volgende onderdelen en configuratie vereist:

  • Een Azure App Service plan.
  • Een opslagaccount voor het beheren van triggers voor functie-apps.
  • Een Azure roltoewijzing waarmee de functie-app toegang heeft tot geheimen in de sleutelkluis.
  • De servicerol Sleuteloperator voor opslagaccounts die is toegewezen aan de functie-app, zodat deze toegang heeft tot toegangssleutels voor opslagaccounts.
  • Een sleutelrotatiefunctie met een Event Grid-trigger en een HTTP-trigger (voor rotatie op aanvraag).
  • Een event-abonnement in Event Grid voor de gebeurtenis SecretNearExpiry.
  1. Selecteer de koppeling voor Azure-sjabloonimplementatie:

    Koppeling voor Azure-sjabloonimplementatie.

  2. Selecteer vaultrotation in de lijst Resourcegroepen.

  3. Voer in opslagaccount RG de naam in van de resourcegroep waarin het opslagaccount zich bevindt. Behoud de standaardwaarde [resourceGroup().name] als het opslagaccount zich in dezelfde resourcegroep bevindt als de rotatiefunctie.

  4. Voer in Naam van opslagaccount de naam in van het opslagaccount waarvan u de toegangssleutels wilt roteren. Behoud de standaardwaarde [concat(resourceGroup().name, 'storage')] als u het opslagaccount uit Prerequisites gebruikt.

  5. Voer in Key Vault RG de naam in van de resourcegroep waarin de key vault zich bevindt. Behoud de standaardwaarde [resourceGroup().name] als de sleutelkluis zich in dezelfde resourcegroep bevindt als de rotatiefunctie.

  6. Voer in Key Vault Naam de naam van de key vault in. Behoud de standaard [concat(resourceGroup().name, '-kv')] als u de sleutelkluis uit Vereisten gebruikt.

  7. Selecteer in Het type App Service-plan het hostingabonnement. Premium-abonnement is alleen vereist wanneer de sleutelkluis zich achter een firewall bevindt.

  8. Voer in De naam van de functie-app de naam van de functie-app in.

  9. Voer in Geheime naam de geheime naam in waarin de toegangssleutels worden opgeslagen.

  10. Voer in de OPSLAGPLAATS-URL de GitHub locatie van de functiecode in: https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git.

  11. Kies Beoordelen + creëren.

  12. Klik op Creëren.

    Schermopname die laat zien hoe u een functie maakt en implementeert.

Nadat de implementatie is voltooid, hebt u een opslagaccount, een serverfarm, een functie-app en een Application Insights-resource:

Schermopname van de pagina Uw implementatie is voltooid.

Opmerking

Deze ARM-sjabloon maakt gebruik van Kudu-implementatie (Broncodebeheer) van App Service om de functiecode op te halen uit GitHub. Voor een productieworkload raden we een implementatie op basis van pakketten aan, zoals func azure functionapp publish of zip-implementatie met WEBSITE_RUN_FROM_PACKAGE in plaats daarvan. Als de implementatie mislukt, selecteert u Opnieuw implementeren om het opnieuw te proberen.

Implementatiesjablonen en code voor de rotatiefunctie bevinden zich in Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.

De toegangssleutels voor het opslagaccount toevoegen aan Key Vault-secrets

Wijs uzelf eerst de rol Key Vault Secrets Officer toe, zodat u geheimen in de kluis kunt beheren:

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

U kunt nu een geheim maken waarvan de waarde een toegangssleutel voor een opslagaccount is. Voeg samen met de waarde de resource-id van het opslagaccount, de geldigheidsperiode van het geheim en de sleutel-id toe als tags, zodat de rotatiefunctie de sleutel in het opslagaccount opnieuw kan genereren.

Bepaal de resource-id van het opslagaccount. Dit is de id eigenschap:

az storage account show -n vaultrotationstorage

Geef de toegangssleutels voor het opslagaccount weer zodat u de sleutelwaarden kunt ophalen:

az storage account keys list -n vaultrotationstorage

Voeg het geheim toe aan de sleutelkluis met een geldigheidsduur van 60 dagen en, ter demonstratie, als vervaldatum morgen om de rotatie onmiddellijk te starten. Voer deze opdracht uit met de opgehaalde waarden voor key1Value en 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

Dit geheim activeert een SecretNearExpiry gebeurtenis binnen enkele minuten, waardoor de functie op zijn beurt wordt geactiveerd om het geheim te roteren met een verloopperiode van 60 dagen. In die configuratie wordt de SecretNearExpiry gebeurtenis elke 30 dagen (30 dagen vóór de vervaldatum) geactiveerd en schakelt de rotatiefunctie tussen key1 en key2.

Controleer of toegangssleutels opnieuw zijn gegenereerd door de sleutel van het opslagaccount en het Key Vault geheim op te halen en deze vervolgens te vergelijken.

Gebruik deze opdracht om de geheime informatie op te halen:

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

Merk op dat CredentialId is bijgewerkt naar de alternatieve keyName en dat value is geregenereerd.

Schermopname van de uitvoer van de opdracht A Z keyvault secret show voor het eerste opslagaccount.

Haal de toegangssleutels op om de waarden te vergelijken:

az storage account keys list -n vaultrotationstorage

U ziet dat de sleutelwaarde overeenkomt met het geheim in de sleutelkluis:

Schermopname die de uitvoer toont van de opdracht 'A Z opslagaccount-sleutelslijst' voor het eerste opslagaccount.

Een bestaande rotatiefunctie gebruiken voor meerdere opslagaccounts

U kunt dezelfde functie-app opnieuw gebruiken om sleutels voor meer dan één opslagaccount te roteren.

Als u de sleutels van een ander opslagaccount wilt toevoegen aan een bestaande rotatiefunctie, hebt u het volgende nodig:

  • De servicerol Sleuteloperator voor opslagaccounts die is toegewezen aan de functie-app, zodat deze toegang heeft tot toegangssleutels voor opslagaccounts.
  • Een event-abonnement in Event Grid voor de gebeurtenis SecretNearExpiry.
  1. Selecteer de koppeling voor Azure-sjabloonimplementatie:

    Koppeling voor Azure-sjabloonimplementatie.

  2. Selecteer vaultrotation in de lijst Resourcegroepen.

  3. Voer in opslagaccount RG de naam in van de resourcegroep waarin het opslagaccount zich bevindt. Behoud de standaardwaarde [resourceGroup().name] als het opslagaccount zich in dezelfde resourcegroep bevindt als de rotatiefunctie.

  4. Voer in Naam van opslagaccount de naam in van het opslagaccount waarvan u de toegangssleutels wilt roteren.

  5. Voer in Key Vault RG de naam in van de resourcegroep waarin de key vault zich bevindt. Behoud de standaardwaarde [resourceGroup().name] als de sleutelkluis zich in dezelfde resourcegroep bevindt als de rotatiefunctie.

  6. Voer in Key Vault Naam de naam van de key vault in.

  7. Voer in De naam van de functie-app de naam van de functie-app in.

  8. Voer in Geheime naam de geheime naam in waarin de toegangssleutels worden opgeslagen.

  9. Kies Beoordelen + creëren.

  10. Klik op Creëren.

    Schermopname van het maken van een extra opslagaccount.

Toegangssleutel voor opslagaccounts toevoegen aan geheimen in Key Vault

Bepaal de resource-id van het opslagaccount. U vindt deze waarde in de id eigenschap.

az storage account show -n vaultrotationstorage2

Geef de toegangssleutels voor het opslagaccount weer zodat u de sleutel2-waarde kunt ophalen:

az storage account keys list -n vaultrotationstorage2

Voeg het geheim toe aan de sleutelkluis met een geldigheidsperiode van 60 dagen en (ter demonstratie) als vervaldatum morgen om de rotatie onmiddellijk te starten. Voer deze opdracht uit met de opgehaalde waarden voor key2Value en 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

Gebruik deze opdracht om de geheime informatie op te halen:

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

Merk op dat CredentialId is bijgewerkt naar de alternatieve keyName en dat value is geregenereerd.

Schermopname van de uitvoer van de opdracht A Z keyvault secret show voor het tweede opslagaccount.

Haal de toegangssleutels op om de waarden te vergelijken:

az storage account keys list -n vaultrotationstorage2

U ziet dat de sleutelwaarde overeenkomt met het geheim in de sleutelkluis:

Schermopname die de uitvoer toont van de opdracht 'AZ storage account keys list' voor het tweede opslagaccount.

Rotatie voor een geheim uitschakelen

Als u rotatie voor een geheim wilt uitschakelen, verwijdert u het Event Grid-abonnement voor dat geheim. Gebruik de cmdlet Azure PowerShell Remove-AzEventGridSubscription of de opdracht Azure CLI az eventgrid event-subscription delete.

AI gebruiken om de rotatiefunctie voor andere services aan te passen

In deze handleiding demonstreren we sleutelrotatie voor Azure Storage-accounts, maar u kunt de rotatiefunctie aanpassen voor andere Azure-services die gebruikmaken van dubbele referenties. GitHub Copilot kan u helpen de code van de PowerShell-rotatiefunctie te wijzigen zodat deze met uw service werkt.

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 wordt aangedreven door AI, dus verrassingen en fouten zijn mogelijk. Zie Copilot veelgestelde vragen voor meer informatie.

Volgende stappen