Delen via


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

De beste manier om te verifiëren bij Azure-services is door een beheerde identiteit te gebruiken, maar er zijn enkele scenario's waarin dit geen optie is. In dergelijke gevallen worden toegangssleutels of wachtwoorden gebruikt. U moet toegangssleutels en wachtwoorden regelmatig roteren.

Deze zelfstudie laat zien hoe u de periodieke rotatie van geheimen voor databases en services automatiseert die gebruikmaken van twee sets verificatiereferenties. Zie Inzicht in automatischerotatie in Azure Key Vault voor een uitgebreid overzicht van concepten en voordelen voor automatischerotatie in verschillende assettypen.

Deze zelfstudie laat zien hoe u sleutels van Azure Storage-accounts die als geheimen zijn opgeslagen in Azure Key Vault kunt roteren. U gebruikt een functie die wordt geactiveerd door een Azure Event Grid-melding.

Opmerking

Voor opslagaccountservices wordt het gebruik van Microsoft Entra-id voor het autoriseren van aanvragen aanbevolen. Zie Toegang tot blobs autoriseren met behulp van Microsoft Entra-id voor meer informatie. Er zijn services waarvoor verbindingsreeksen voor opslagaccounts met toegangssleutels zijn vereist. Voor dat scenario raden we deze oplossing aan.

Hier volgt de rotatieoplossing die in deze handleiding wordt beschreven:

Diagram met de draaiingsoplossing.

In deze oplossing slaat Azure Key Vault afzonderlijke toegangssleutels voor het opslagaccount op als versies van hetzelfde geheim, afwisselend tussen de primaire en secundaire sleutel in volgende versies. Wanneer één toegangssleutel wordt opgeslagen in de nieuwste versie van het geheim, wordt de alternatieve sleutel opnieuw gegenereerd en toegevoegd aan Key Vault als de nieuwe nieuwste versie van het geheim. De oplossing biedt de volledige rotatiecyclus van de toepassing om te vernieuwen naar de nieuwste opnieuw gegenereerde sleutel.

  1. Dertig dagen vóór de vervaldatum van een geheim publiceert Key Vault de bijna verlopende gebeurtenis naar Event Grid.
  2. Event Grid controleert de gebeurtenisabonnementen en gebruikt HTTP POST om het eindpunt van de functie-app aan te roepen dat 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 nieuwe 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. Deze zelfstudie maakt gebruik van portal Cloud Shell met PowerShell env
  • Azure Key Vault.
  • Twee Azure-opslagaccounts.

Opmerking

Bij rotatie van de sleutel van het gedeelde opslagaccount wordt shared access signature (SAS) op accountniveau ingetrokken die op basis van die sleutel is gegenereerd. Nadat sleutelrotatie van het opslagaccount is uitgevoerd, moet u SAS-tokens op accountniveau opnieuw genereren om onderbrekingen van toepassingen te voorkomen.

U kunt deze implementatiekoppeling gebruiken als u geen bestaande sleutelkluis en bestaande opslagaccounts hebt:

Koppeling 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. U kunt deze installatie controleren in de Azure CLI of Azure PowerShell door deze opdracht uit te voeren:

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

Vervolgens maakt u een functie-app met een door het systeem beheerde identiteit, naast andere vereiste onderdelen. U implementeert ook de rotatiefunctie voor de sleutels van het opslagaccount.

Voor de functie-approtatiefunctie zijn de volgende onderdelen en configuratie vereist:

  • Een Azure App Service-plan
  • Een opslagaccount voor het beheren van triggers voor functie-apps
  • Een toegangsbeleid voor toegang tot geheimen in Key Vault
  • De rol Sleuteloperatorservice voor opslagaccounts die is toegewezen aan de functie-app, zodat deze toegang heeft tot toegangssleutels voor opslagaccounts
  • Een sleutelrotatiefunctie met een gebeurtenistrigger en een HTTP-trigger (rotatie op aanvraag)
  • Een Event Grid-gebeurtenisabonnement voor de gebeurtenis SecretNearExpiry
  1. Selecteer de koppeling voor de implementatie van Azure-sjablonen:

    Koppeling voor implementatie van Azure-sjablonen.

  2. Selecteer vaultrotation in de lijst Resourcegroepen.

  3. Voer in het vak Opslagaccount RG de naam in van de resourcegroep waarin uw opslagaccount zich bevindt. Behoud de standaardwaarde [resourceGroup().name] als uw opslagaccount zich al in dezelfde resourcegroep bevindt waar u de sleutelrotatiefunctie implementeert.

  4. Voer in het vak Naam van het opslagaccount de naam in van het opslagaccount dat de toegangssleutels bevat die u wilt draaien. Behoud de standaardwaarde [concat(resourceGroup().name, 'storage')] als u het opslagaccount gebruikt dat is gemaakt in Vereisten.

  5. Voer in het vak Key Vault RG de naam in van de resourcegroep waarin uw sleutelkluis zich bevindt. Behoud de standaardwaarde [resourceGroup().name] als uw sleutelkluis al bestaat in dezelfde resourcegroep waar u de sleutelrotatiefunctie implementeert.

  6. Voer in het vak Key Vault-naam de naam van de sleutelkluis in. Behoud de standaardwaarde [concat(resourceGroup().name, '-kv')] als u de sleutelkluis gebruikt die in Vereisten is gemaakt.

  7. Selecteer in het vak Type App Service-plan het hostingabonnement. Premium-abonnement is alleen nodig wanneer uw sleutelkluis zich achter de firewall bevindt.

  8. Voer in het vak Naam van de functie-app de naam van de functie-app in.

  9. Voer in het vak Geheime naam de naam in van het geheim waar u toegangssleutels opslaat.

  10. Voer in het vak URL van de opslagplaats de GitHub-locatie van de functiecode in. In deze zelfstudie kunt u https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git gebruiken.

  11. Kies Beoordelen + creëren.

  12. Klik op Creëren.

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

Nadat u de voorgaande stappen hebt voltooid, hebt u een opslagaccount, een serverfarm, een functie-app en Application Insights. Wanneer de implementatie is voltooid, ziet u deze pagina:

Schermopname van de pagina Uw implementatie is voltooid.

Opmerking

Als er een fout optreedt, kunt u Opnieuw implementeren selecteren om de implementatie van de onderdelen te voltooien.

U vindt implementatiesjablonen en code voor de rotatiefunctie in Azure-voorbeelden.

De toegangssleutels voor het opslagaccount toevoegen aan Key Vault-geheimen

Stel eerst uw toegangsbeleid in om beheer van geheimen machtigingen te verlenen aan uw gebruikersaccount.

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

U kunt nu een nieuw geheim maken met een toegangssleutel voor een opslagaccount als waarde. U hebt ook de resource-id van het opslagaccount, de geldigheidsperiode van het geheim en de sleutel-id nodig om toe te voegen aan het geheim, zodat de rotatiefunctie de sleutel in het opslagaccount opnieuw kan genereren.

Bepaal de resource-id van het opslagaccount. U vindt deze waarde in 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 een geheim toe aan de sleutelkluis met een geldigheidsperiode van 60 dagen, de resource-ID van het opslagaccount, en stel voor demonstratiedoeleinden de rotatie direct in door de vervaldatum op morgen te zetten. Voer deze opdracht uit met behulp van 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 <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Het geheim activeert binnen enkele minuten een SecretNearExpiry gebeurtenis. Met deze gebeurtenis wordt de functie op zijn beurt geactiveerd om het geheim te roteren met verlooptijd ingesteld op 60 dagen. In deze configuratie wordt de gebeurtenis SecretNearExpiry elke 30 dagen (30 dagen vóór verloop) geactiveerd en de rotatiefunctie wisselt tussen key1 en key2.

U kunt controleren of toegangssleutels opnieuw zijn gegenereerd door de sleutel van het opslagaccount en het Key Vault-geheim op te halen en deze 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 

Merk op dat value hetzelfde is als het geheim in de sleutelkluis.

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

Bestaande rotatiefunctie gebruiken voor meerdere opslagaccounts

U kunt dezelfde functie-app opnieuw gebruiken om sleutels voor meerdere opslagaccounts te roteren.

Als u opslagaccountsleutels wilt toevoegen aan een bestaande functie voor rotatie, hebt u het volgende nodig:

  • De opslagaccount-sleuteloperatorrol 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 de implementatie van Azure-sjablonen:

    Koppeling voor implementatie van Azure-sjablonen.

  2. Selecteer vaultrotation in de lijst Resourcegroepen.

  3. Voer in het vak Opslagaccount RG de naam in van de resourcegroep waarin uw opslagaccount zich bevindt. Behoud de standaardwaarde [resourceGroup().name] als uw opslagaccount zich al in dezelfde resourcegroep bevindt waar u de sleutelrotatiefunctie implementeert.

  4. Voer in het vak Naam van het opslagaccount de naam in van het opslagaccount dat de toegangssleutels bevat die u wilt draaien.

  5. Voer in het vak Key Vault RG de naam in van de resourcegroep waarin uw sleutelkluis zich bevindt. Behoud de standaardwaarde [resourceGroup().name] als uw sleutelkluis al bestaat in dezelfde resourcegroep waar u de sleutelrotatiefunctie implementeert.

  6. Voer in het vak Key Vault-naam de naam van de sleutelkluis in.

  7. Voer in het vak Naam van de functie-app de naam van de functie-app in.

  8. Voer in het vak Geheime naam de naam in van het geheim waar u toegangssleutels opslaat.

  9. Kies Beoordelen + creëren.

  10. Klik op Creëren.

    Schermopname van het maken van een extra opslagaccount.

Toegangssleutel voor opslagaccounts toevoegen aan Key Vault-geheimen

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 een geheim toe aan de sleutelkluis met een geldigheidsperiode van 60 dagen, de resource-ID van het opslagaccount, en stel voor demonstratiedoeleinden de rotatie direct in door de vervaldatum op morgen te zetten. Voer deze opdracht uit met behulp van 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 <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "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 vaultrotationstorage 

Merk op dat value hetzelfde is als het geheim in de sleutelkluis.

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

Rotatie uitschakelen voor geheim

U kunt de rotatie van een geheim uitschakelen door het Event Grid-abonnement voor dat geheim te verwijderen. Gebruik de Azure PowerShell Remove-AzEventGridSubscription cmdlet of Azure CLI az event grid event--subscription delete opdracht.

Sleutelkluisrotatiefuncties voor twee sets referenties

Sjabloon voor rotatiefuncties voor twee sets inloggegevens en verschillende kant-en-klare functies:

Opmerking

Deze rotatiefuncties worden gemaakt door een lid van de community en niet door Microsoft. Communityfuncties worden niet ondersteund onder een Microsoft-ondersteuningsprogramma of -service en worden beschikbaar gesteld ALS IS zonder enige garantie.

Volgende stappen