Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Najlepszym sposobem uwierzytelniania w usługach Azure jest użycie tożsamości zarządzanej, ale niektóre scenariusze nadal wymagają kluczy dostępu lub haseł. Rotuj te poświadczenia często, aby zmniejszyć wpływ wycieku.
W tym samouczku pokazano, jak zautomatyzować okresową rotację sekretów dla baz danych i usług korzystających z dwóch zestawów danych uwierzytelniających. Aby zapoznać się z omówieniem automatycznej rotacji dla różnych typów zasobów, zobacz artykuł Omówienie automatycznej rotacji w Azure Key Vault.
W szczególności w tym samouczku przeprowadzana jest rotacja kluczy konta usługi Azure Storage przechowywanych jako wpisy tajne w usłudze Azure Key Vault. Używa funkcji wyzwalanej przez powiadomienie Azure Event Grid.
Important
W usłudze Azure Storage należy preferować autoryzację Microsoft Entra ID z tożsamością zarządzaną zamiast współdzielonych kluczy konta. Jeśli wymogi zgodności na to pozwalają, wyłącz uwierzytelnianie za pomocą klucza współdzielonego dla konta magazynu i całkowicie wyeliminuj potrzebę rotacji kluczy. Użyj wzorca opisanego w tym samouczku tylko wtedy, gdy obciążenie wymaga klucza konta magazynu lub parametrów połączenia.
Oto rozwiązanie rotacji opisane w tym samouczku:
W tym rozwiązaniu usługa Azure Key Vault przechowuje każdy klucz dostępu do konta magazynu jako wersję tego samego sekretu, naprzemiennie używając klucza podstawowego i pomocniczego w kolejnych wersjach. Gdy jeden klucz dostępu jest przechowywany jako najnowsza wersja wpisu tajnego, alternatywny klucz jest ponownie wygenerowany i dodawany do Key Vault jako nowa najnowsza wersja. Takie rozwiązanie zapewnia aplikacji pełen cykl rotacji, aby mogła pobrać nowo wygenerowany klucz.
- Na trzydzieści dni przed datą wygaśnięcia sekretu usługa Key Vault publikuje do usługi Event Grid zdarzenie informujące o zbliżającym się wygaśnięciu.
- Usługa Event Grid sprawdza subskrypcje zdarzeń i używa żądania HTTP POST do wywołania punktu końcowego aplikacji funkcji subskrybowanego do zdarzenia.
- Aplikacja funkcjonalna identyfikuje klucz zamienny (nie najnowszy) i wywołuje konto magazynu, aby go ponownie wygenerować.
- Aplikacja funkcji dodaje ponownie wygenerowany klucz do Azure Key Vault jako nową wersję wpisu tajnego.
Wymagania wstępne
- Subskrypcja Azure. Utwórz je bezpłatnie.
- Azure Cloud Shell. W tym samouczku użyto usługi Cloud Shell w portalu w środowisku programu PowerShell.
- Magazyn kluczy platformy Azure.
- Dwa konta magazynu Azure.
Uwaga / Notatka
Zmiana klucza wspólnego konta magazynu powoduje unieważnienie każdej sygnatury dostępu współdzielonego (SAS) na poziomie konta wygenerowanej przy użyciu tego klucza. Po rotacji ponownie wygeneruj tokeny SAS na poziomie konta, aby uniknąć zakłóceń w aplikacjach.
Jeśli nie masz istniejącego magazynu Key Vault i dwóch kont magazynu, użyj tego linku do wdrożenia:
W obszarze Grupa zasobów wybierz pozycję Utwórz nową. Nazwij grupę rotacja sejfu, a następnie wybierz OK.
Wybierz opcję Recenzja i utwórz.
Wybierz Utwórz.
Masz teraz magazyn kluczy i dwa konta magazynowe. Sprawdź tę konfigurację w Azure CLI lub Azure PowerShell:
az resource list -o table -g vaultrotation
Wynik wygląda podobnie do następujących danych wyjściowych:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
vaultrotation-kv vaultrotation westus Microsoft.KeyVault/vaults
vaultrotationstorage vaultrotation westus Microsoft.Storage/storageAccounts
vaultrotationstorage2 vaultrotation westus Microsoft.Storage/storageAccounts
Tworzenie i wdrażanie funkcji rotacji kluczy
Następnie utwórz aplikację funkcji z tożsamością zarządzaną przypisaną przez system wraz z innymi wymaganymi składnikami i wdróż funkcję rotacji dla kluczy konta magazynu.
Funkcja rotacji wymaga następujących składników i konfiguracji:
- Plan usługi Azure App Service.
- Konto magazynu danych służące do zarządzania wyzwalaczami aplikacji funkcji.
- Przypisanie roli platformy Azure, które umożliwia aplikacji funkcji dostęp do wpisów tajnych w magazynie kluczy.
- Rola usługi operatora klucza konta magazynu przypisana do aplikacji funkcji, aby mogła uzyskiwać dostęp do kluczy dostępu do konta magazynu.
- Funkcja rotacji klucza z wyzwalaczem Event Grid i wyzwalaczem HTTP (do rotacji na żądanie).
- Subskrypcja zdarzeń usługi Event Grid dla zdarzenia SecretNearExpiry .
Wybierz link wdrażania szablonu Azure:
Na liście Grupa zasobów wybierz pozycję vaultrotation.
W polu Storage Account RG wprowadź nazwę grupy zasobów, w której znajduje się konto magazynu. Zachowaj wartość domyślną
[resourceGroup().name], jeśli konto magazynu znajduje się w tej samej grupie zasobów co funkcja rotacji.W polu Nazwa konta magazynu wprowadź nazwę konta magazynu, którego klucze dostępu chcesz obrócić. Zachowaj wartość domyślną
[concat(resourceGroup().name, 'storage')], jeśli używasz konta magazynu z sekcji Wymagania wstępne.W Key Vault RG wprowadź nazwę grupy zasobów, w której znajduje się key vault. Zachowaj wartość domyślną
[resourceGroup().name], jeśli magazyn kluczy znajduje się w tej samej grupie zasobów co funkcja rotacji.W polu Nazwa usługi Key Vault wprowadź nazwę magazynu kluczy. Zachowaj wartość domyślną
[concat(resourceGroup().name, '-kv')], jeśli używasz magazynu kluczy opisanego w sekcji Wymagania wstępne.W obszarze Typ planu usługi App Service wybierz plan hostingu. Plan Premium jest wymagany tylko wtedy, gdy magazyn kluczy znajduje się za zaporą.
W polu Nazwa aplikacji funkcji wprowadź nazwę aplikacji funkcji.
W polu Nazwa klucza tajnego wprowadź nazwę klucza tajnego przechowującego klucze dostępu.
W polu Adres URL repozytorium wprowadź lokalizację kodu funkcji w serwisie GitHub:
https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git.Wybierz opcję Recenzja i utwórz.
Wybierz Utwórz.
Po zakończeniu wdrażania masz konto magazynu, farmę serwerów, aplikację funkcji i zasób usługi Application Insights:
Uwaga / Notatka
Ten szablon usługi ARM używa wdrożenia kontroli źródła usługi App Service (Kudu) w celu ściągnięcia kodu funkcji z GitHub. W przypadku obciążeń produkcyjnych zamiast tego zalecamy wdrożenie oparte na pakietach, takie jak func azure functionapp publish lub zip deploy z użyciem WEBSITE_RUN_FROM_PACKAGE. Jeśli wdrożenie zakończy się niepowodzeniem, wybierz pozycję Wdróż ponownie, aby ponowić próbę.
Szablony wdrażania i kod funkcji rotacji znajdują się w Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.
Dodaj klucze dostępu do konta magazynu do tajemnic w Key Vault
Najpierw przypisz sobie rolę Key Vault Secrets Officer, aby móc zarządzać wpisami tajnymi w magazynie:
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
Teraz możesz utworzyć klucz tajny o wartości będącej kluczem dostępu do konta magazynu danych. Wraz z wartością dodaj jako tagi identyfikator zasobu konta usługi Storage, okres ważności wpisu tajnego i identyfikator klucza, aby funkcja rotacji mogła ponownie wygenerować klucz na koncie usługi Storage.
Określ identyfikator zasobu konta magazynu. To jest właściwość id:
az storage account show -n vaultrotationstorage
Wyświetl listę kluczy dostępu do konta magazynowego, aby uzyskać wartości tych kluczy.
az storage account keys list -n vaultrotationstorage
Dodaj sekret do magazynu kluczy z okresem ważności wynoszącym 60 dni oraz (na potrzeby demonstracji) z datą wygaśnięcia ustawioną na jutro, aby natychmiast wyzwolić rotację. Uruchom to polecenie przy użyciu pobranych wartości dla key1Value i 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
Ten klucz tajny powoduje wystąpienie zdarzenia SecretNearExpiry w ciągu kilku minut, co z kolei uruchamia funkcję obracania klucza tajnego z wygaśnięciem ustawionym na 60 dni. W tej konfiguracji zdarzenie SecretNearExpiry jest wyzwalane co 30 dni (30 dni przed wygaśnięciem), a funkcja obracania naprzemiennie przełącza się między key1 i key2.
Sprawdź, czy klucze dostępu są generowane ponownie, pobierając klucz konta magazynu i klucz tajny Key Vault, a następnie porównując je.
Użyj tego polecenia, aby uzyskać tajne informacje.
az keyvault secret show --vault-name vaultrotation-kv --name storageKey
Zwróć uwagę, że CredentialId jest aktualizowany do alternatywnej wersji keyName i value jest regenerowany.
Pobierz klucze dostępu, aby porównać wartości:
az storage account keys list -n vaultrotationstorage
Zwróć uwagę, że wartość klucza odpowiada wpisowi tajnemu w magazynie kluczy:
Użyj istniejącej funkcji rotacji dla wielu kont magazynu
Możesz ponownie użyć tej samej aplikacji funkcji platformy Azure do rotacji kluczy dla więcej niż jednego konta magazynu.
Aby dodać klucze innego konta magazynu do istniejącej funkcji rotacji, potrzebne są następujące elementy:
- Rola usługi operatora klucza konta magazynu przypisana do aplikacji funkcji, aby mogła uzyskiwać dostęp do kluczy dostępu do konta magazynu.
- Subskrypcja zdarzeń usługi Event Grid dla zdarzenia SecretNearExpiry .
Wybierz link wdrażania szablonu Azure:
Na liście Grupa zasobów wybierz pozycję vaultrotation.
W polu Storage Account RG wprowadź nazwę grupy zasobów, w której znajduje się konto magazynu. Zachowaj wartość domyślną
[resourceGroup().name], jeśli konto magazynu znajduje się w tej samej grupie zasobów co funkcja rotacji.W polu Nazwa konta magazynu wprowadź nazwę konta magazynu, którego klucze dostępu chcesz obrócić.
W Key Vault RG wprowadź nazwę grupy zasobów, w której znajduje się key vault. Zachowaj wartość domyślną
[resourceGroup().name], jeśli magazyn kluczy znajduje się w tej samej grupie zasobów co funkcja rotacji.W polu Nazwa usługi Key Vault wprowadź nazwę magazynu kluczy.
W polu Nazwa aplikacji funkcji wprowadź nazwę aplikacji funkcji.
W polu Nazwa sekretu wprowadź nazwę sekretu zawierającego klucze dostępu.
Wybierz opcję Recenzja i utwórz.
Wybierz Utwórz.
Dodaj klucz dostępu do konta magazynu jako tajemnicę w Key Vault
Określ identyfikator zasobu konta magazynu. Wartość tę można znaleźć we właściwości id.
az storage account show -n vaultrotationstorage2
Wyświetl listę kluczy dostępu do konta magazynu, aby uzyskać wartość key2:
az storage account keys list -n vaultrotationstorage2
Dodaj sekret do magazynu kluczy z okresem ważności wynoszącym 60 dni oraz (na potrzeby demonstracji) z datą wygaśnięcia ustawioną na jutro, aby natychmiast wyzwolić rotację. Uruchom to polecenie przy użyciu pobranych wartości dla key2Value i 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
Użyj tego polecenia, aby uzyskać tajne informacje.
az keyvault secret show --vault-name vaultrotation-kv --name storageKey2
Zwróć uwagę, że CredentialId jest aktualizowany do alternatywnej wersji keyName i value jest regenerowany.
Pobierz klucze dostępu, aby porównać wartości:
az storage account keys list -n vaultrotationstorage2
Zwróć uwagę, że wartość klucza odpowiada wpisowi tajnemu w magazynie kluczy:
Wyłącz rotację klucza tajnego
Aby wyłączyć rotację wpisu tajnego, usuń subskrypcję usługi Event Grid dla tego wpisu tajnego. Użyj polecenia cmdlet programu Azure PowerShell Remove-AzEventGridSubscription lub polecenia Azure CLI az eventgrid event-subscription delete.
Dostosowywanie funkcji rotacji dla innych usług za pomocą sztucznej inteligencji
W tym samouczku przedstawiono rotację tajemnic dla kont usługi Azure Storage, ale można dostosować funkcję rotacji dla innych usług Azure korzystających z dwóch poświadczeń. GitHub Copilot może pomóc w zmodyfikowaniu kodu funkcji rotacji w programie PowerShell tak, aby działał z usługą.
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 jest obsługiwana przez sztuczną inteligencję, więc możliwe są niespodzianki i błędy. Aby uzyskać więcej informacji, zobacz Copilot CZĘSTO zadawane pytania.