Uwaga
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 na uwierzytelnienie się w usługach Azure jest użycie zarządzanej tożsamości, ale są pewne scenariusze, w których nie jest to możliwe. W takich przypadkach używane są klucze dostępu lub hasła. Klucze dostępu i hasła należy często wymieniać.
W tym samouczku pokazano, jak zautomatyzować okresową rotację wpisów tajnych dla baz danych i usług korzystających z dwóch zestawów poświadczeń uwierzytelniania. Aby zapoznać się z kompleksowym omówieniem pojęć i korzyści związanych z autorotacją w różnych typach zasobów, zobacz Zrozumienie autorotacji w usłudze Azure Key Vault.
W szczególności w tym samouczku pokazano, jak obracać klucze konta usługi Azure Storage przechowywane w usłudze Azure Key Vault jako wpisy tajne. Użyjesz funkcji wyzwalanej przez powiadomienie usługi Azure Event Grid.
Uwaga / Notatka
W przypadku usług konta magazynu zalecane jest użycie identyfikatora Entra firmy Microsoft do autoryzowania żądań. Aby uzyskać więcej informacji, zobacz Autoryzowanie dostępu do obiektów blob przy użyciu Microsoft Entra ID. Istnieją usługi, które wymagają ciągów połączenia konta magazynowego z kluczami dostępu. W tym scenariuszu zalecamy to rozwiązanie.
Oto rozwiązanie rotacji opisane w tym samouczku:
W tym rozwiązaniu usługa Azure Key Vault przechowuje indywidualne klucze dostępu konta magazynowego jako wersje tej samej tajemnicy, alternatywnie między kluczem podstawowym a zapasowym w kolejnych wersjach. Gdy jeden klucz dostępu jest przechowywany w najnowszej wersji wpisu tajnego, alternatywny klucz jest ponownie wygenerowany i dodawany do usługi Key Vault jako nowa najnowsza wersja wpisu tajnego. Rozwiązanie zapewnia pełen cykl rotacji aplikacji w celu odświeżenia do najnowszego zregenerowanego klucza.
- Trzydzieści dni przed datą wygaśnięcia tajemnicy, usługa Key Vault publikuje zdarzenie zbliżającego się wygaśnięcia do Event Grid.
- Usługa Event Grid sprawdza subskrypcje zdarzeń i używa protokołu HTTP POST do wywoływania punktu końcowego aplikacji funkcjonalnej, która jest subskrybowana na zdarzenie.
- Aplikacja funkcjonalna identyfikuje klucz zamienny (nie najnowszy) i wywołuje konto magazynu, aby go ponownie wygenerować.
- Funkcja dodaje nowo wygenerowany klucz do usługi Azure Key Vault jako nową wersję tajemnicy.
Wymagania wstępne
- Subskrypcja platformy Azure. Utwórz je bezpłatnie.
- Azure Cloud Shell. Ten samouczek korzysta z usługi Cloud Shell w portalu z środowiskiem PowerShell.
- Azure Key Vault.
- Dwa konta usługi Azure Storage.
Uwaga / Notatka
Rotacja klucza współużytkowanego konta magazynu powoduje odwołanie sygnatur dostępu współdzielonego na poziomie konta, które zostały wygenerowane na podstawie tego klucza. Po rotacji klucza konta magazynu należy ponownie wygenerować tokeny SAS na poziomie konta, aby uniknąć zakłóceń w aplikacjach.
Możesz użyć tego łącza wdrożeniowego, jeśli nie masz istniejącej skrytki kluczy i istniejących kont przechowywania.
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.
Teraz będziesz mieć składnicę kluczy i dwa konta przechowywania. Tę konfigurację można sprawdzić w interfejsie wiersza polecenia platformy Azure lub w programie Azure PowerShell, uruchamiając następujące polecenie:
az resource list -o table -g vaultrotation
Wynik będzie wyglądać mniej więcej tak:
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 utworzysz aplikację funkcji z tożsamością zarządzaną przez system, oprócz innych wymaganych składników. Wdrożysz również funkcję rotacji dla kluczy konta magazynu.
Funkcja rotacji aplikacji funkcji wymaga następujących składników i konfiguracji:
- Plan usługi Azure App Service
- Konto magazynu do zarządzania wyzwalaczami aplikacji funkcji
- Zasady dostępu do tajemnic w usłudze Key Vault
- 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 kluczy z wyzwalaczem zdarzeń i wyzwalaczem HTTP (rotacja na żądanie)
- Subskrypcja zdarzeń usługi Event Grid dla zdarzenia SecretNearExpiry
Wybierz łącze do wdrożenia szablonu Azure:
Na liście Grupa zasobów wybierz pozycję vaultrotation.
W polu Grupa zasobów konta magazynu wprowadź nazwę grupy zasobów, w której znajduje się konto magazynu. Zachowaj wartość domyślną [resourceGroup().name], jeśli konto magazynu znajduje się już w tej samej grupie zasobów, w której wdrożysz funkcję rotacji kluczy.
W polu Nazwa konta magazynu wprowadź nazwę konta magazynu, którego klucze dostępu mają być rotowane. Zachowaj wartość domyślną [concat(resourceGroup().name, 'storage')], jeśli używasz konta magazynu utworzonego w sekcji Wymagania wstępne.
W polu Key Vault RG wprowadź nazwę grupy zasobów, w której znajduje się magazyn kluczy. Zachowaj wartość domyślną [resourceGroup().name], jeśli magazyn kluczy już istnieje w tej samej grupie zasobów, w której wdrożysz funkcję rotacji kluczy.
W polu Nazwa magazynu kluczy wprowadź nazwę magazynu kluczy. Zachowaj wartość domyślną [concat(resourceGroup().name, '-kv')], jeśli używasz magazynu kluczy utworzonego w sekcji Wymagania wstępne.
W polu Typ planu usługi App Service wybierz pozycję plan hostingowy. 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 tajna wprowadź nazwę tajną, w którym będą przechowywane klucze dostępu.
W polu Adres URL repozytorium wprowadź lokalizację kodu funkcji na GitHub. W tym samouczku możesz użyć https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .
Wybierz opcję Recenzja i utwórz.
Wybierz Utwórz.
Po wykonaniu powyższych kroków będziesz mieć konto magazynowe, serwerownię, aplikację funkcjonalną i usługę Application Insights. Po zakończeniu wdrażania zostanie wyświetlona ta strona:
Uwaga / Notatka
Jeśli wystąpi błąd, możesz wybrać pozycję Wdróż ponownie , aby zakończyć wdrażanie składników.
Szablony wdrażania i kod funkcji rotacji można znaleźć w temacie Przykłady platformy Azure.
Dodawanie kluczy dostępu konta magazynu do tajemnic Key Vault
Najpierw ustaw zasady dostępu, aby udzielić uprawnień do zarządzania sekretami podmiotowi użytkownika.
az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list
Teraz możesz utworzyć nowy sekret z kluczem dostępu do konta przechowywania jako jego wartością. Będziesz także potrzebować identyfikatora zasobu konta magazynu, okresu ważności sekretu oraz identyfikatora klucza, aby dodać je do sekretu, co umożliwi funkcji rotacji ponowne wygenerowanie klucza w koncie magazynu.
Określ identyfikator zasobu konta magazynu. Wartość tę można znaleźć we właściwości 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 wpis tajny do magazynu kluczy z okresem ważności 60 dni, identyfikatorem zasobu konta magazynu, w celu zademonstrowania obrotu, aby natychmiast wywołać rotację, ustawić datę wygaśnięcia na jutro. Uruchom to polecenie, używając 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 <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate
Ten sekret uruchomi SecretNearExpiry
zdarzenie w ciągu kilku minut. To zdarzenie spowoduje uruchomienie funkcji w celu rotacji sekretu z okresem ważności ustawionym na 60 dni. W tej konfiguracji zdarzenie 'SecretNearExpiry' będzie wyzwalane co 30 dni (30 dni przed wygaśnięciem), a funkcja rotacji będzie naprzemiennie zmieniać rotację między kluczem 1 a kluczem 2.
Możesz sprawdzić, czy klucze dostępu zostały ponownie wygenerowane, pobierając klucz konta magazynu i wpis tajny usługi Key Vault i 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 value
klucz jest taki sam jak tajny klucz w skarbcu kluczy:
Używanie istniejącej funkcji rotacji dla wielu kont magazynowych
Możesz ponownie wykorzystać tę samą aplikację funkcji, aby aktualizować klucze dla wielu kont magazynowych.
Aby dodać klucze konta magazynu do istniejącej funkcji do rotacji, potrzebne są następujące elementy:
- Rola usługi operatora klucza konta magazynu przypisana do aplikacji funkcyjnej, aby mogła uzyskiwać dostęp do kluczy dostępu do konta magazynu.
- Subskrypcja zdarzeń usługi Event Grid dla zdarzenia SecretNearExpiry .
Wybierz łącze do wdrożenia szablonu Azure:
Na liście Grupa zasobów wybierz pozycję vaultrotation.
W polu Grupa zasobów konta magazynu wprowadź nazwę grupy zasobów, w której znajduje się konto magazynu. Zachowaj wartość domyślną [resourceGroup().name], jeśli konto magazynu znajduje się już w tej samej grupie zasobów, w której wdrożysz funkcję rotacji kluczy.
W polu Nazwa konta magazynu wprowadź nazwę konta magazynu, którego klucze dostępu mają być rotowane.
W polu Key Vault RG wprowadź nazwę grupy zasobów, w której znajduje się magazyn kluczy. Zachowaj wartość domyślną [resourceGroup().name], jeśli magazyn kluczy już istnieje w tej samej grupie zasobów, w której wdrożysz funkcję rotacji kluczy.
W polu Nazwa magazynu kluczy wprowadź nazwę magazynu kluczy.
W polu Nazwa aplikacji funkcji wprowadź nazwę aplikacji funkcji.
W polu Nazwa tajna wprowadź nazwę tajną, w którym będą przechowywane klucze dostępu.
Wybierz opcję Recenzja i utwórz.
Wybierz Utwórz.
Dodaj klucz dostępu do konta magazynu do 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 wpis tajny do magazynu kluczy z okresem ważności 60 dni, identyfikatorem zasobu konta magazynu, w celu zademonstrowania obrotu, aby natychmiast wywołać rotację, ustawić datę wygaśnięcia na jutro. Uruchom to polecenie, używając 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 <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "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 vaultrotationstorage
Zwróć uwagę, że value
klucz jest taki sam jak tajny klucz w skarbcu kluczy:
Wyłącz rotację dla sekretu
Rotację wpisu tajnego można wyłączyć po prostu, usuwając subskrypcję usługi Event Grid dla tego wpisu tajnego. Użyj polecenia cmdlet Azure PowerShell Remove-AzEventGridSubscription lub polecenia Azure CLI az event grid event-subscription delete.
Funkcje rotacji usługi Key Vault dla dwóch zestawów poświadczeń
Szablon funkcji rotacji dla dwóch zestawów poświadczeń i kilka gotowych do użycia funkcji:
- Szablon projektu
- Redis Cache pamięci podręcznej
- Konto magazynu
- Azure Cosmos DB
Uwaga / Notatka
Te funkcje rotacji są tworzone przez członka społeczności, a nie przez firmę Microsoft. Funkcje społeczności nie są obsługiwane w ramach żadnego programu czy usługi pomocy technicznej Microsoft i są udostępniane TAK JAK JEST, bez żadnej gwarancji.
Dalsze kroki
- Rotacja tajemnic dla jednego zestawu poświadczeń
- Zrozumienie autodeploymentu w usłudze Azure Key Vault
- Monitorowanie usługi Key Vault za pomocą usługi Azure Event Grid
- Tworzenie pierwszej funkcji w witrynie Azure Portal
- Otrzymuj e-mail, gdy zmieni się tajemnica Key Vault
- Schemat zdarzeń usługi Azure Event Grid dla usługi Azure Key Vault