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 anslutningssträng 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:

Diagram that shows the rotation solution.

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.

  1. 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.
  2. Event Grid kontrollerar händelseprenumerationerna och använder HTTP POST för att anropa funktionsappens slutpunkt som prenumererar på händelsen.
  3. Funktionsappen identifierar den alternativa nyckeln (inte den senaste) och anropar lagringskontot för att återskapa den.
  4. 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:

Link that's labelled Deploy to Azure.

  1. Välj Skapa ny under Resursgrupp. Ge gruppvalvet namnet rotation och välj sedan OK.

  2. Välj Granska + skapa.

  3. Välj Skapa.

    Screenshot that shows how to create a resource group.

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
  1. Välj distributionslänken för Azure-mallen:

    Azure template deployment link.

  2. I listan Resursgrupp väljer du valvrotation.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. I rutan Funktionsappnamn anger du namnet på funktionsappen.

  9. I rutan Hemligt namn anger du namnet på hemligheten där du ska lagra åtkomstnycklar.

  10. 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 .

  11. Välj Granska + skapa.

  12. Välj Skapa.

    Screenshot that shows how to create and deploy function.

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:

Screenshot that shows the Your deployment is complete page.

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 = (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

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:

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

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:

Screenshot that shows the output of the A Z storage account keys list command for the first storage account.

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 .
  1. Välj distributionslänken för Azure-mallen:

    Azure template deployment link.

  2. I listan Resursgrupp väljer du valvrotation.

  3. 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.

  4. I rutan Lagringskontonamn anger du namnet på det lagringskonto som innehåller de åtkomstnycklar som ska roteras.

  5. 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.

  6. I rutan Key Vault-namn anger du namnet på nyckelvalvet.

  7. I rutan Funktionsappnamn anger du namnet på funktionsappen.

  8. I rutan Hemligt namn anger du namnet på hemligheten där du ska lagra åtkomstnycklar.

  9. Välj Granska + skapa.

  10. Välj Skapa.

    Screenshot that shows how to create an additional storage account.

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 = (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

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:

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

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:

Screenshot that shows the output of the A Z storage account keys list command for the second storage account.

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