Automatisera rotationen av en hemlighet för resurser som har två uppsättningar autentiseringsuppgifter
Det bästa sättet att autentisera till Azure-tjänster är att använda en hanterad identitet, men det finns vissa scenarier där det inte är ett alternativ. I dessa fall används åtkomstnycklar eller lösenord. Du bör rotera åtkomstnycklar och lösenord ofta.
Den här självstudien visar hur du automatiserar den periodiska rotationen av hemligheter för databaser och tjänster som använder två uppsättningar autentiseringsuppgifter. Mer specifikt visar den här självstudien hur du roterar Azure Storage-kontonycklar som lagras i Azure Key Vault som hemligheter. Du använder en funktion som utlöses av Azure Event Grid-meddelande.
Kommentar
För Lagringskontotjänster rekommenderar vi att du använder Microsoft Entra-ID för att auktorisera begäranden. Mer information finns i Auktorisera åtkomst till blobar med hjälp av Microsoft Entra-ID. Det finns tjänster som kräver lagringskonto niska veze med åtkomstnycklar. I det scenariot rekommenderar vi den här lösningen.
Här är rotationslösningen som beskrivs i den här självstudien:
I den här lösningen lagrar Azure Key Vault enskilda åtkomstnycklar för lagringskonton som versioner av samma hemlighet och växlar mellan den primära och sekundära nyckeln i efterföljande versioner. När en åtkomstnyckel lagras i den senaste versionen av hemligheten återskapas den alternativa nyckeln och läggs till i Key Vault som den nya senaste versionen av hemligheten. Lösningen tillhandahåller programmets hela rotationscykel för att uppdatera till den senaste återskapade nyckeln.
- Trettio dagar före förfallodatumet för en hemlighet publicerar Key Vault den händelse som snart upphör att gälla 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 nya återskapade nyckeln i Azure Key Vault som den nya versionen av hemligheten.
Förutsättningar
- En Azure-prenumeration. Skapa en kostnadsfritt.
- Azure Cloud Shell. Den här självstudien använder cloud shell-portalen med PowerShell env
- Azure Key Vault.
- Två Azure Storage-konton.
Kommentar
Rotation av delad lagringskontonyckel återkallar signatur för delad åtkomst (SAS) på kontonivå som genererats baserat på den nyckeln. Efter nyckelrotationen för lagringskontot måste du återskapa SAS-token på kontonivå för att undvika avbrott i program.
Du kan använda den här distributionslänken om du inte har ett befintligt nyckelvalv och befintliga lagringskonton:
Välj Skapa ny under Resursgrupp. Ge gruppvalvet namnet rotation och välj sedan OK.
Välj Granska + skapa.
Välj Skapa.
Nu har du ett nyckelvalv och två lagringskonton. Du kan verifiera den här konfigurationen i Azure CLI eller Azure PowerShell genom att köra det här kommandot:
az resource list -o table -g vaultrotation
Resultatet ser ut ungefär så här:
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
Därefter skapar du en funktionsapp med en systemhanterad identitet, utöver andra nödvändiga komponenter. Du distribuerar också rotationsfunktionen för lagringskontonycklarna.
Funktionsappens rotationsfunktion kräver följande komponenter och konfiguration:
- En Azure App Service-plan
- Ett lagringskonto för att hantera funktionsappsutlösare
- En åtkomstprincip för åtkomst till hemligheter i Key Vault
- Rollen Nyckeloperatortjänst för lagringskonto som tilldelats funktionsappen så att den kan komma åt åtkomstnycklar för lagringskonto
- En nyckelrotationsfunktion med en händelseutlösare och en HTTP-utlösare (rotation på begäran)
- En Event Grid-händelseprenumeration för SecretNearExpiry-händelsen
Välj distributionslänken för Azure-mallen:
I listan Resursgrupp väljer du valvrotation.
I rutan Lagringskonto-RG anger du namnet på resursgruppen där ditt lagringskonto finns. Behåll standardvärdet [resourceGroup().name] om ditt lagringskonto redan finns i samma resursgrupp där du distribuerar nyckelroteringsfunktionen.
I rutan Lagringskontonamn anger du namnet på det lagringskonto som innehåller de åtkomstnycklar som ska roteras. Behåll standardvärdet [concat(resourceGroup().name, 'storage')] om du använder lagringskontot som skapats i Krav.
I rutan Key Vault RG anger du namnet på resursgruppen där nyckelvalvet finns. Behåll standardvärdet [resourceGroup().name] om nyckelvalvet redan finns i samma resursgrupp där du distribuerar nyckelroteringsfunktionen.
I rutan Key Vault-namn anger du namnet på nyckelvalvet. Behåll standardvärdet [concat(resourceGroup().name, '-kv')] om du använder nyckelvalv som skapats i Krav.
I rutan Typ av App Service-plan väljer du värdplan. Premium-plan behövs bara när ditt nyckelvalv ligger bakom brandväggen.
I rutan Funktionsappnamn anger du namnet på funktionsappen.
I rutan Hemligt namn anger du namnet på hemligheten där du ska lagra åtkomstnycklar.
I rutan Repo-URL anger du GitHub-platsen för funktionskoden. I den här självstudien kan du använda https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .
Välj Granska + skapa.
Välj Skapa.
När du har slutfört föregående steg har du ett lagringskonto, en servergrupp, en funktionsapp och Application Insights. När distributionen är klar visas den här sidan:
Kommentar
Om det uppstår ett fel kan du välja Omdistribuera för att slutföra distributionen av komponenterna.
Du hittar distributionsmallar och kod för rotationsfunktionen i Azure Samples.
Lägga till lagringskontots åtkomstnycklar till Key Vault-hemligheter
Ange först åtkomstprincipen för att bevilja behörigheter för hantering av hemligheter till användarens huvudnamn:
az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list
Nu kan du skapa en ny hemlighet med åtkomstnyckeln för lagringskontot som värde. Du behöver också resurs-ID för lagringskontot, hemlig giltighetsperiod och nyckel-ID för att lägga till i hemligheten så att rotationsfunktionen kan återskapa nyckeln i lagringskontot.
Fastställa lagringskontots resurs-ID. Du hittar det här värdet i 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 hemlighet i nyckelvalvet med giltighetsperiod i 60 dagar, resurs-ID för lagringskonto och i demonstrationssyfte för att utlösa rotationen omedelbart ange förfallodatum till i morgon. 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 <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate
Den här hemligheten utlöser SecretNearExpiry
händelsen inom flera minuter. Den här händelsen utlöser i sin tur funktionen för att rotera hemligheten med förfallotiden inställd på 60 dagar. I den konfigurationen utlöses händelsen "SecretNearExpiry" var 30:e dag (30 dagar före förfallodatum) och rotationsfunktionen växlar rotation mellan key1 och key2.
Du kan kontrollera att åtkomstnycklarna har återskapats genom att hämta lagringskontonyckeln och Key Vault-hemligheten och 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 value
nyckeln är samma som hemligheten i nyckelvalvet:
Använda befintlig rotationsfunktion för flera lagringskonton
Du kan återanvända samma funktionsapp för att rotera nycklar för flera lagringskonton.
Om du vill lägga till lagringskontonycklar till en befintlig funktion för rotation behöver du:
- Rollen Nyckeloperatortjänst för lagringskonto som tilldelats funktionsappen så att den kan komma åt åtkomstnycklar för lagringskonto.
- En Event Grid-händelseprenumeration för SecretNearExpiry-händelsen .
Välj distributionslänken för Azure-mallen:
I listan Resursgrupp väljer du valvrotation.
I rutan Lagringskonto-RG anger du namnet på resursgruppen där ditt lagringskonto finns. Behåll standardvärdet [resourceGroup().name] om ditt lagringskonto redan finns i samma resursgrupp där du distribuerar nyckelroteringsfunktionen.
I rutan Lagringskontonamn anger du namnet på det lagringskonto som innehåller de åtkomstnycklar som ska roteras.
I rutan Key Vault RG anger du namnet på resursgruppen där nyckelvalvet finns. Behåll standardvärdet [resourceGroup().name] om nyckelvalvet redan finns i samma resursgrupp där du distribuerar nyckelroteringsfunktionen.
I rutan Key Vault-namn anger du namnet på nyckelvalvet.
I rutan Funktionsappnamn anger du namnet på funktionsappen.
I rutan Hemligt namn anger du namnet på hemligheten där du ska lagra åtkomstnycklar.
Välj Granska + skapa.
Välj Skapa.
Lägga till åtkomstnyckel för lagringskonto till 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 hemlighet i nyckelvalvet med giltighetsperiod i 60 dagar, resurs-ID för lagringskonto och i demonstrationssyfte för att utlösa rotationen omedelbart ange förfallodatum till i morgon. 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 <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "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 vaultrotationstorage
Observera att value
nyckeln är samma som hemligheten i nyckelvalvet:
Inaktivera rotation för hemlighet
Du kan inaktivera rotation av en hemlighet genom att helt enkelt ta bort Event Grid-prenumerationen för den hemligheten. Använd cmdleten Azure PowerShell Remove-AzEventGridSubscription eller Azure CLI az event grid event –-subscription delete command.
Key Vault-rotationsfunktioner för två uppsättningar autentiseringsuppgifter
Mall för rotationsfunktioner för två uppsättningar autentiseringsuppgifter och flera som är redo att använda funktioner:
Kommentar
Dessa rotationsfunktioner skapas av en medlem i communityn och inte av Microsoft. Community-funktioner stöds inte under microsofts supportprogram eller -tjänster och görs tillgängliga som är tillgängliga utan garanti av något slag.
Nästa steg
- Självstudie: Rotering av hemligheter för en uppsättning autentiseringsuppgifter
- Översikt: Övervaka Key Vault med Azure Event Grid
- Gör så här: Skapa din första funktion i Azure-portalen
- Anvisningar: Ta emot e-post när en Key Vault-hemlighet ändras
- Referens: Azure Event Grid-händelseschema för Azure Key Vault