Udostępnij za pośrednictwem


Zautomatyzuj rotację tajemnicy dla zasobów, które mają dwa zestawy poświadczeń uwierzytelniania

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:

Diagram przedstawiający rozwiązanie rotacji.

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.

  1. 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.
  2. 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.
  3. Aplikacja funkcjonalna identyfikuje klucz zamienny (nie najnowszy) i wywołuje konto magazynu, aby go ponownie wygenerować.
  4. 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.

Odnośnik oznaczony jako

  1. W obszarze Grupa zasobów wybierz pozycję Utwórz nową. Nazwij grupę rotacja sejfu, a następnie wybierz OK.

  2. Wybierz opcję Recenzja i utwórz.

  3. Wybierz Utwórz.

    Zrzut ekranu przedstawiający sposób tworzenia grupy zasobów.

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
  1. Wybierz łącze do wdrożenia szablonu Azure:

    Link wdrożenia szablonu platformy Azure.

  2. Na liście Grupa zasobów wybierz pozycję vaultrotation.

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

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

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

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

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

  8. W polu Nazwa aplikacji funkcji wprowadź nazwę aplikacji funkcji.

  9. W polu Nazwa tajna wprowadź nazwę tajną, w którym będą przechowywane klucze dostępu.

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

  11. Wybierz opcję Recenzja i utwórz.

  12. Wybierz Utwórz.

    Zrzut ekranu przedstawiający sposób tworzenia i wdrażania funkcji.

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:

Zrzut ekranu strony pokazujący, że wdrożenie zostało ukończone.

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.

Zrzut ekranu pokazujący wynik polecenia `az keyvault secret show` dla pierwszego konta magazynowego.

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:

Zrzut ekranu przedstawiający dane wyjściowe polecenia listy kluczy konta magazynu Z dla pierwszego konta magazynu.

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 .
  1. Wybierz łącze do wdrożenia szablonu Azure:

    Link wdrożenia szablonu platformy Azure.

  2. Na liście Grupa zasobów wybierz pozycję vaultrotation.

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

  4. W polu Nazwa konta magazynu wprowadź nazwę konta magazynu, którego klucze dostępu mają być rotowane.

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

  6. W polu Nazwa magazynu kluczy wprowadź nazwę magazynu kluczy.

  7. W polu Nazwa aplikacji funkcji wprowadź nazwę aplikacji funkcji.

  8. W polu Nazwa tajna wprowadź nazwę tajną, w którym będą przechowywane klucze dostępu.

  9. Wybierz opcję Recenzja i utwórz.

  10. Wybierz Utwórz.

    Zrzut ekranu przedstawiający sposób tworzenia dodatkowego konta magazynu.

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.

Zrzut ekranu przedstawiający dane wyjściowe polecenia A Z keyvault secret show dla drugiego konta magazynu.

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:

Zrzut ekranu przedstawiający dane wyjściowe polecenia listy kluczy konta magazynu Z dla drugiego konta magazynu.

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:

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