Automatyzowanie rotacji wpisu tajnego dla zasobów, które mają dwa zestawy poświadczeń uwierzytelniania
Najlepszym sposobem uwierzytelniania w usługach platformy Azure jest użycie tożsamości zarządzanej, ale istnieją pewne scenariusze, w których nie jest to opcja. 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. 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
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 identyfikatora Entra firmy Microsoft. Istnieją usługi, które wymagają parametry połączenia konta magazynu 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 magazynu jako wersje tego samego wpisu tajnego, naprzemiennie między kluczem podstawowym i pomocniczym 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 cały cykl rotacji aplikacji w celu odświeżenia do najnowszego ponownie wygenerowanego klucza.
- Trzydzieści dni przed datą wygaśnięcia wpisu tajnego usługa Key Vault publikuje zdarzenie bliskiego wygaśnięcia w usłudze Event Grid.
- Usługa Event Grid sprawdza subskrypcje zdarzeń i używa protokołu HTTP POST do wywoływania punktu końcowego aplikacji funkcji, który jest subskrybowany do zdarzenia.
- Aplikacja funkcji identyfikuje klucz alternatywny (nie najnowszy) i wywołuje konto magazynu, aby je ponownie wygenerować.
- Aplikacja funkcji dodaje nowy ponownie wygenerowany klucz do usługi Azure Key Vault jako nową wersję wpisu tajnego.
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 programem PowerShell env
- Azure Key Vault.
- Dwa konta usługi Azure Storage.
Uwaga
Rotacja klucza współużytkowanego konta magazynu powoduje odwołanie sygnatury dostępu współdzielonego na poziomie konta wygenerowanego 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 linku wdrożenia, jeśli nie masz istniejącego magazynu kluczy i istniejących kont magazynu:
W obszarze Grupa zasobów wybierz pozycję Utwórz nową. Nadaj nazwę rotacji magazynu grup, a następnie wybierz przycisk OK.
Wybierz pozycję Przejrzyj i utwórz.
Wybierz pozycję Utwórz.
Teraz będziesz mieć magazyn kluczy i dwa konta magazynu. 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 aplikacja systemu Azure
- Konto magazynu do zarządzania wyzwalaczami aplikacji funkcji
- Zasady dostępu do dostępu do wpisów tajnych 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 link wdrażania szablonu platformy 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 zawierającego klucze dostępu do rotacji. Zachowaj wartość domyślną [concat(resourceGroup().name, 'storage')], jeśli używasz konta magazynu utworzonego w wymaganiach wstępnych.
W polu Grupa zasobów usługi Key Vault 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 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 wpisu tajnego wprowadź nazwę wpisu tajnego, w którym będą przechowywane klucze dostępu.
W polu Adres URL repozytorium wprowadź lokalizację usługi GitHub kodu funkcji. W tym samouczku możesz użyć polecenia https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .
Wybierz pozycję Przejrzyj i utwórz.
Wybierz pozycję Utwórz.
Po wykonaniu powyższych kroków będziesz mieć konto magazynu, farmę serwerów, aplikację funkcji i usługę Application Insights. Po zakończeniu wdrażania zostanie wyświetlona ta strona:
Uwaga
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 wpisów tajnych usługi Key Vault
Najpierw ustaw zasady dostępu, aby udzielić uprawnień do zarządzania wpisami tajnymi podmiotu zabezpieczeń 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 wpis tajny z kluczem dostępu do konta magazynu jako jego wartością. Potrzebny będzie również identyfikator zasobu konta magazynu, okres ważności wpisu tajnego i identyfikator klucza, aby dodać go do wpisu tajnego, aby funkcja rotacji mogła ponownie wygenerować klucz na koncie magazynu.
Określ identyfikator zasobu konta magazynu. Tę wartość można znaleźć we id
właściwości .
az storage account show -n vaultrotationstorage
Wyświetl listę kluczy dostępu do konta magazynu, aby uzyskać wartości kluczy:
az storage account keys list -n vaultrotationstorage
Dodaj wpis tajny do magazynu kluczy z okresem ważności przez 60 dni, identyfikatorem zasobu konta magazynu i w celu demonstracyjnego wyzwolenia rotacji natychmiast 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 wpis tajny wyzwoli SecretNearExpiry
zdarzenie w ciągu kilku minut. To zdarzenie spowoduje z kolei wyzwolenie funkcji w celu rotacji wpisu tajnego z wygaśnięciem ustawionym na 60 dni. W tej konfiguracji zdarzenie "SecretNearExpiry" zostanie wyzwolone co 30 dni (30 dni przed wygaśnięciem), a funkcja rotacji zmieni rotację między kluczem1 i klucz2.
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ć informacje o wpisie tajnym:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey
Zwróć uwagę, że CredentialId
element jest aktualizowany do alternatywnej keyName
wersji i value
jest ponownie wygenerowany:
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 klucz tajny w magazynie kluczy:
Używanie istniejącej funkcji rotacji dla wielu kont magazynu
Możesz ponownie użyć tej samej aplikacji funkcji, aby obrócić klucze dla wielu kont magazynu.
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 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 platformy 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 zawierającego klucze dostępu do rotacji.
W polu Grupa zasobów usługi Key Vault 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 wpisu tajnego wprowadź nazwę wpisu tajnego, w którym będą przechowywane klucze dostępu.
Wybierz pozycję Przejrzyj i utwórz.
Wybierz pozycję Utwórz.
Dodawanie klucza dostępu konta magazynu do wpisów tajnych usługi Key Vault
Określ identyfikator zasobu konta magazynu. Tę wartość można znaleźć we id
właściwości .
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 przez 60 dni, identyfikatorem zasobu konta magazynu i w celu demonstracyjnego wyzwolenia rotacji natychmiast 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ć informacje o wpisie tajnym:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey2
Zwróć uwagę, że CredentialId
element jest aktualizowany do alternatywnej keyName
wersji i value
jest ponownie wygenerowany:
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 klucz tajny w magazynie kluczy:
Wyłączanie rotacji dla wpisu tajnego
Rotację wpisu tajnego można wyłączyć po prostu, usuwając subskrypcję usługi Event Grid dla tego wpisu tajnego. Użyj polecenia cmdlet Remove-AzEventGridSubscription programu Azure PowerShell lub polecenia 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:
Uwaga
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 pomocy technicznej lub usługi firmy Microsoft i są udostępniane jako środowisko bez gwarancji jakiegokolwiek rodzaju.
Następne kroki
- Samouczek: rotacja wpisów tajnych dla jednego zestawu poświadczeń
- Omówienie: Monitorowanie usługi Key Vault za pomocą usługi Azure Event Grid
- Instrukcje: tworzenie pierwszej funkcji w witrynie Azure Portal
- Instrukcje: odbieranie wiadomości e-mail po zmianie wpisu tajnego usługi Key Vault
- Dokumentacja: Schemat zdarzeń usługi Azure Event Grid dla usługi Azure Key Vault