Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det bästa sättet att autentisera till Azure tjänster är med en hanterad identitet, men vissa scenarier kräver fortfarande åtkomstnycklar eller lösenord. Rotera dessa autentiseringsuppgifter ofta för att minska effekten av en läcka.
Den här handledningen visar hur du kan automatisera regelbunden rotation av hemligheter för databaser och tjänster som använder två uppsättningar autentiseringsuppgifter. En översikt över autorotation över olika tillgångstyper finns i Förstå autorotation i Azure Key Vault.
Närmare bestämt byter den här självstudien ut kontonycklar för Azure Storage som lagras som hemligheter i Azure Key Vault. Den använder en funktion som utlöses av ett Azure Event Grid meddelande.
Important
För Azure Storage föredrar du Microsoft Entra ID auktorisering med en hanterad identitet framför delade kontonycklar. Om efterlevnad tillåter inaktiverar du auktorisering av delad nyckel på lagringskontot och tar bort behovet av nyckelrotation helt. Använd mönstret i den här självstudien endast när en arbetsbelastning kräver en lagringskontonyckel eller en anslutningssträng.
Här är rotationslösningen som beskrivs i denna handledning:
I den här lösningen lagrar Azure Key Vault åtkomstnyckeln för varje lagringskonto som en version av samma hemlighet och växlar mellan den primära och sekundära nyckeln i efterföljande versioner. När en åtkomstnyckel lagras som den senaste versionen av hemligheten återskapas den alternativa nyckeln och läggs till i Key Vault som den nya senaste versionen. Den här designen ger programmet en fullständig rotationscykel för att hämta den nyligen återskapade nyckeln.
- Trettio dagar före utgångsdatumet för en hemlighet publicerar Key Vault händelsen om nära förestående utgång till Event Grid.
- Event Grid kontrollerar händelseprenumerationerna och använder HTTP POST för att anropa funktionsappens slutpunkt som prenumererar på händelsen.
- Funktionsappen identifierar den alternativa nyckeln (inte den senaste) och anropar lagringskontot för att återskapa den.
- Funktionsappen lägger till den återskapade nyckeln till Azure Key Vault som den nya versionen av hemligheten.
Förutsättningar
- En Azure-abonnemang. Skapa en kostnadsfritt.
- Azure Cloud Shell. I den här självstudien används portalen Cloud Shell med PowerShell-miljön.
- Ett Azure-nyckelvalv.
- Två Azure lagringskonton.
Anmärkning
Om du roterar en delad lagringskontonyckel återkallas alla signaturer för delad åtkomst på kontonivå (SAS) som genereras från den nyckeln. Efter rotationen återskapar du SAS-token på kontonivå för att undvika avbrott i program.
Om du inte har ett befintligt nyckelvalv och två lagringskonton använder du den här distributionslänken:
Välj Skapa ny under Resursgrupp. Ge gruppvalvet namnet rotation och välj sedan OK.
Välj Förhandsgranska + skapa.
Välj Skapa.
Nu har du ett nyckelvalv och två lagringskonton. Kontrollera den här konfigurationen i Azure CLI eller Azure PowerShell:
az resource list -o table -g vaultrotation
Resultatet ser ut ungefär som följande utdata:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
vaultrotation-kv vaultrotation westus Microsoft.KeyVault/vaults
vaultrotationstorage vaultrotation westus Microsoft.Storage/storageAccounts
vaultrotationstorage2 vaultrotation westus Microsoft.Storage/storageAccounts
Skapa och distribuera nyckelroteringsfunktionen
Skapa sedan en funktionsapp med en systemtilldelad hanterad identitet tillsammans med de andra nödvändiga komponenterna och distribuera rotationsfunktionen för lagringskontonycklarna.
Rotationsfunktionen kräver följande komponenter och konfiguration:
- En Azure App Service plan.
- Ett lagringskonto för att hantera utlösare för funktionsappen.
- En Azure rolltilldelning som låter funktionsappen komma åt hemligheter i nyckelvalvet.
- Tjänstrollen För lagringskontonyckeloperatör tilldelad till funktionsappen så att den kan komma åt lagringskontots åtkomstnycklar.
- En nyckelrotationsfunktion med en Event Grid-utlösare och en HTTP-utlösare (för rotation på begäran).
- En Event Grid-händelseprenumeration för SecretNearExpiry-händelsen .
Välj distributionslänken Azure mall:
I listan Resursgrupp väljer du valvrotation.
I Lagringskontots RG anger du namnet på resursgruppen där lagringskontot finns. Behåll standardvärdet
[resourceGroup().name]om lagringskontot finns i samma resursgrupp som rotationsfunktionen.I Lagringskontonamn anger du namnet på det lagringskonto vars åtkomstnycklar du vill rotera. Behåll standardvärdet
[concat(resourceGroup().name, 'storage')]om du använder lagringskontot från Krav.I Key Vault RG anger du namnet på resursgruppen där key vault finns. Behåll standardvärdet
[resourceGroup().name]om nyckelvalvet finns i samma resursgrupp som rotationsfunktionen.I Key Vault Namn anger du namnet på key vault. Behåll standardvärdet
[concat(resourceGroup().name, '-kv')]om du använder nyckelvalvet från Förutsättningar.I App Service-plantyp väljer du värdplanen. Premium-plan krävs endast när nyckelvalvet ligger bakom en brandvägg.
I Funktionsappens namn anger du funktionsappens namn.
I Hemligt namn anger du det hemliga namn som lagrar åtkomstnycklarna.
I Repo-URL anger du GitHub plats för funktionskoden:
https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git.Välj Förhandsgranska + skapa.
Välj Skapa.
När distributionen är klar har du ett lagringskonto, en servergrupp, en funktionsapp och en Application Insights-resurs:
Anmärkning
Den här ARM-mallen använder App Service-distributionen för källkontroll (Kudu) för att hämta funktionskoden från GitHub. För en produktionsarbetsbelastning rekommenderar vi en paketbaserad distribution, till exempel func azure functionapp publish eller zip-distribution med WEBSITE_RUN_FROM_PACKAGE i stället. Om distributionen misslyckas väljer du Omdistribuera för att försöka igen.
Distributionsmallar och kod för rotationsfunktionen finns i Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.
Lägg till lagringskontots åtkomstnycklar till Key Vault hemligheter
Först tilldelar du dig rollen Key Vault Secrets Officer så att du kan hantera hemligheter i valvet:
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
Nu kan du skapa en hemlighet vars värde är en åtkomstnyckel för lagringskontot. Tillsammans med värdet lägger du till resurs-ID för lagringskontot, hemlig giltighetsperiod och nyckel-ID som taggar så att rotationsfunktionen kan återskapa nyckeln i lagringskontot.
Fastställa lagringskontots resurs-ID. Det är egenskapen id :
az storage account show -n vaultrotationstorage
Ange åtkomstnycklarna för lagringskontot så att du kan hämta nyckelvärdena:
az storage account keys list -n vaultrotationstorage
Lägg till hemligheten i nyckelvalvet med en giltighetsperiod på 60 dagar och (för demonstrationssyfte) ett utgångsdatum imorgon så att rotation utlöses omedelbart. Kör det här kommandot med dina hämtade värden för key1Value och 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
Den här hemligheten utlöser en händelse av typen SecretNearExpiry inom några minuter, vilket i sin tur gör att funktionen roterar hemligheten med ett utgångsdatum 60 dagar fram i tiden. I den konfigurationen utlöses händelsen SecretNearExpiry var 30:e dag (30 dagar före utgångsdatumet), och rotationsfunktionen växlar mellan key1 och key2.
Kontrollera att åtkomstnycklarna har återskapats genom att hämta lagringskontonyckeln och den Key Vault hemligheten och sedan jämföra dem.
Använd det här kommandot för att hämta den hemliga informationen:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey
Observera att CredentialId har uppdaterats till det alternativa keyName och som value återskapas:
Hämta åtkomstnycklarna för att jämföra värdena:
az storage account keys list -n vaultrotationstorage
Observera att nyckelvärdet matchar hemligheten i nyckelvalvet:
Använda en befintlig rotationsfunktion för flera lagringskonton
Du kan återanvända samma funktionsapp för att rotera nycklar för mer än ett lagringskonto.
Om du vill lägga till ett annat lagringskontos nycklar till en befintlig rotationsfunktion behöver du:
- Tjänstrollen För lagringskontonyckeloperatör tilldelad till funktionsappen så att den kan komma åt lagringskontots åtkomstnycklar.
- En Event Grid-händelseprenumeration för SecretNearExpiry-händelsen .
Välj distributionslänken Azure mall:
I listan Resursgrupp väljer du valvrotation.
I Lagringskontots RG anger du namnet på resursgruppen där lagringskontot finns. Behåll standardvärdet
[resourceGroup().name]om lagringskontot finns i samma resursgrupp som rotationsfunktionen.I Lagringskontonamn anger du namnet på det lagringskonto vars åtkomstnycklar du vill rotera.
I Key Vault RG anger du namnet på resursgruppen där key vault finns. Behåll standardvärdet
[resourceGroup().name]om nyckelvalvet finns i samma resursgrupp som rotationsfunktionen.I Key Vault Namn anger du namnet på key vault.
I Funktionsappens namn anger du funktionsappens namn.
I Hemligt namn anger du det hemliga namn som lagrar åtkomstnycklarna.
Välj Förhandsgranska + skapa.
Välj Skapa.
Lägga till åtkomstnyckel för lagringskonto i Key Vault hemligheter
Fastställa lagringskontots resurs-ID. Du hittar det här värdet i egenskapen id .
az storage account show -n vaultrotationstorage2
Visa en lista över åtkomstnycklarna för lagringskontot så att du kan hämta key2-värdet:
az storage account keys list -n vaultrotationstorage2
Lägg till hemligheten i nyckelvalvet med en giltighetsperiod på 60 dagar och (för demonstration) ett förfallodatum i morgon för att utlösa rotation omedelbart. Kör det här kommandot med dina hämtade värden för key2Value och 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
Använd det här kommandot för att hämta den hemliga informationen:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey2
Observera att CredentialId har uppdaterats till det alternativa keyName och som value återskapas:
Hämta åtkomstnycklarna för att jämföra värdena:
az storage account keys list -n vaultrotationstorage2
Observera att nyckelvärdet matchar hemligheten i nyckelvalvet:
Stäng av rotation för en hemlighet
Om du vill inaktivera rotation för en hemlighet tar du bort Event Grid-prenumerationen för den hemligheten. Använd cmdleten Azure PowerShell Remove-AzEventGridSubscription eller kommandot Azure CLI az eventgrid event-subscription delete.
Använda AI för att anpassa rotationsfunktionen för andra tjänster
Den här självstudien demonstrerar rotation av hemligheter för Azure Storage-konton, men du kan anpassa rotationsfunktionen för andra Azure-tjänster som använder dubbla autentiseringsmetoder. GitHub Copilot kan hjälpa dig att ändra PowerShell-rotationsfunktionskoden så att den fungerar med din tjänst.
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 drivs av AI, så överraskningar och misstag är möjliga. Mer information finns i vanliga frågor och svar om Copilot.