Używanie wpisów tajnych usługi Azure Key Vault w usłudze Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Usługa Azure Key Vault umożliwia deweloperom bezpieczne przechowywanie poufnych informacji, takich jak klucze interfejsu API, poświadczenia lub certyfikaty, oraz zarządzanie nimi. Usługa Azure Key Vault obsługuje dwa typy kontenerów: magazyny i zarządzane pule modułów HSM (sprzętowego modułu zabezpieczeń). Magazyny mogą przechowywać zarówno klucze oprogramowania, jak i klucze oparte na module HSM, wpisy tajne i certyfikaty, a zarządzane pule modułów HSM obsługują wyłącznie klucze oparte na module HSM.
Niniejszy samouczek zawiera informacje na temat wykonywania następujących czynności:
- Tworzenie usługi Azure Key Vault przy użyciu interfejsu wiersza polecenia platformy Azure
- Dodawanie wpisu tajnego i konfigurowanie dostępu do usługi Azure Key Vault
- Używanie wpisów tajnych w potoku
Wymagania wstępne
Organizacja i projekt usługi Azure DevOps. Utwórz organizację lub projekt, jeśli jeszcze tego nie zrobiono.
Subskrypcja Azure. Utwórz bezpłatne konto platformy Azure, jeśli jeszcze go nie masz.
Tworzenie repozytorium
Jeśli masz już własne repozytorium, przejdź do następnego kroku. W przeciwnym razie postępuj zgodnie z poniższymi instrukcjami, aby zainicjować repozytorium. Użyjemy tego repozytorium platformy Azure do skonfigurowania potoku.
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Repozytoria, a następnie wybierz pozycję Zainicjuj , aby zainicjować gałąź główną za pomocą pliku README.
Tworzenie usługi Azure Key Vault
Zaloguj się do witryny Azure Portal, a następnie wybierz przycisk Cloud Shell w prawym górnym rogu.
Jeśli masz więcej niż jedną subskrypcję platformy Azure skojarzona z kontem, użyj poniższego polecenia, aby określić subskrypcję domyślną. Możesz użyć
az account list
polecenia , aby wygenerować listę subskrypcji.az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
Ustaw domyślny region świadczenia usługi Azure. Możesz użyć
az account list-locations
polecenia , aby wygenerować listę dostępnych regionów.az config set defaults.location=<YOUR_REGION>
Tworzenie nowej grupy zasobów
az group create --name <YOUR_RESOURCE_GROUP_NAME>
Utwórz nową usługę Azure Key Vault.
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
Utwórz nowy wpis tajny w magazynie kluczy platformy Azure.
az keyvault secret set \ --name <YOUR_SECRET_NAME> \ --value <YOUR_ACTUAL_SECRET> \ --vault-name <YOUR_KEY_VAULT_NAME>
Konfigurowanie zasad dostępu do magazynu kluczy
Aby uzyskać dostęp do usługi Azure Key Vault, musimy skonfigurować jednostkę usługi w celu udzielenia dostępu do usługi Azure Pipelines. Postępuj zgodnie z tym przewodnikiem , aby utworzyć jednostkę usługi za pomocą interfejsu wiersza polecenia platformy Azure, a następnie przejść do następnych kroków w tej sekcji.
Przejdź do witryny Azure Portal, a następnie użyj paska wyszukiwania, aby znaleźć utworzony wcześniej magazyn kluczy.
Wybierz pozycję Zasady dostępu, a następnie wybierz pozycję Utwórz , aby utworzyć nowe zasady.
W obszarze Uprawnienia wpisu tajnego wybierz pozycję Pobierz i Wyświetl.
Wybierz pozycję Dalej, a następnie wybierz utworzoną wcześniej jednostkę usługi. Jednostka usługi to obiekt reprezentujący aplikację lub usługę żądającą dostępu do zasobów platformy Azure.
Wybierz przycisk Dalej, a następnie ponownie przycisk Dalej .
Przejrzyj zasady, a następnie wybierz pozycję Utwórz po zakończeniu.
Dodawanie przypisania roli
W następnym kroku utworzymy połączenie usługi ARM przy użyciu jednostki usługi. Aby można było zweryfikować połączenie, musimy udzielić jednostce usługi dostępu do odczytu na poziomie subskrypcji:
Przejdź do witryny Azure Portal
Wybierz pozycję Subskrypcje z panelu nawigacji po lewej stronie, a następnie znajdź i wybierz swoją subskrypcję.
Wybierz pozycję Kontrola dostępu, a następnie wybierz pozycję Dodaj>przypisanie roli.
Wybierz pozycję Czytelnik na karcie Rola , a następnie wybierz pozycję Dalej.
Wybierz pozycję Użytkownik, grupa lub jednostka usługi, a następnie wybierz pozycję Wybierz członków.
Użyj paska wyszukiwania, aby znaleźć jednostkę usługi, a następnie wybierz znak "+", aby go zaznaczyć, a następnie kliknij przycisk Wybierz .
Wybierz pozycję Przejrzyj i przypisz, przejrzyj ustawienia, a następnie wybierz pozycję Przejrzyj i przypisz jeszcze raz, aby potwierdzić wybrane opcje i dodać przypisanie roli.
Tworzenie połączenia z usługą
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Połączenia usługi Ustawień>projektu, a następnie wybierz pozycję Nowe połączenie z usługą, aby utworzyć nowe połączenie z usługą.
Wybierz pozycję Azure Resource Manager, a następnie wybierz pozycję Dalej.
Wybierz pozycję Jednostka usługi (ręcznie), a następnie wybierz pozycję Dalej.
Wybierz pozycję Chmura platformy Azure dla środowiska i subskrypcji dla poziomu zakresu, a następnie wprowadź identyfikator subskrypcji i nazwę subskrypcji.
Wypełnij następujące pola informacjami uzyskanymi podczas tworzenia jednostki usługi, a następnie wybierz pozycję Weryfikuj po zakończeniu pracy:
- Identyfikator jednostki usługi: Identyfikator jednostki usługi appId.
- Klucz jednostki usługi: Hasło jednostki usługi.
- Identyfikator dzierżawy: Dzierżawa jednostki usługi.
Po pomyślnym zakończeniu weryfikacji podaj nazwę i opis (opcjonalnie) dla połączenia z usługą, a następnie zaznacz pole wyboru Udziel uprawnień dostępu do wszystkich potoków .
Po zakończeniu wybierz pozycję Weryfikuj i zapisz .
Zaloguj się do kolekcji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Ustawienia projektu>Połączenia>usługi Nowe połączenie z usługą, a następnie wybierz pozycję Azure Resource Manager, aby utworzyć nowe połączenie usługi ARM.
Nadaj połączeniu usługi nazwę, a następnie wybierz pozycję Chmura platformy Azure dla środowiska i subskrypcji dla poziomu zakresu.
Wprowadź identyfikator subskrypcji i nazwę subskrypcji.
Wypełnij następujące pola informacjami uzyskanymi podczas tworzenia jednostki usługi, a następnie wybierz pozycję Weryfikuj połączenie po zakończeniu pracy:
- Identyfikator klienta jednostki usługi: Identyfikator jednostki usługi appId.
- Klucz jednostki usługi: Hasło jednostki usługi.
- Identyfikator dzierżawy: Dzierżawa jednostki usługi.
Zaznacz pole wyboru Zezwalaj wszystkim potokom na używanie tego połączenia, a następnie po zakończeniu wybierz przycisk OK.
Tworzenie nowego potoku
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Potoki, a następnie wybierz pozycję Nowy potok.
Wybierz pozycję Użyj edytora klasycznego, aby utworzyć potok klasyczny.
Wybierz pozycję Azure Repos Git, wybierz repozytorium i gałąź domyślną, a następnie wybierz pozycję Kontynuuj.
Wybierz szablon potoku .Net Desktop .
W tym przykładzie będziemy potrzebować tylko dwóch ostatnich zadań. Naciśnij CTRL, a następnie wybierz pierwsze pięć zadań, kliknij prawym przyciskiem myszy i wybierz polecenie Usuń wybrane zadania , aby je usunąć.
Wybierz, + aby dodać nowe zadanie. Wyszukaj zadanie Wiersza polecenia, wybierz je, a następnie wybierz pozycję Dodaj, aby dodać je do potoku. Po dodaniu skonfiguruj ją w następujący sposób:
- Nazwa wyświetlana: Tworzenie pliku
- Skrypt:
echo $(YOUR_SECRET_NAME) > secret.txt
Wybierz, + aby dodać nowe zadanie. Wyszukaj zadanie usługi Azure Key Vault, wybierz je, a następnie wybierz pozycję Dodaj*, aby dodać je do potoku. Po dodaniu skonfiguruj ją w następujący sposób:
- Nazwa wyświetlana: Azure Key Vault
- Subskrypcja platformy Azure: wybierz utworzone wcześniej połączenie usługi jednostki usługi
- Magazyn kluczy: wybierz magazyn kluczy
- Filtr wpisu tajnego: rozdzielona przecinkami lista nazw wpisów tajnych lub pozostaw * w celu pobrania wszystkich wpisów tajnych z wybranego magazynu kluczy
Wybierz zadanie Kopiuj pliki i wypełnij wymagane pola w następujący sposób:
- Nazwa wyświetlana: Kopiuj plik
- Zawartość: secret.txt
- Folder docelowy: $(build.artifactstagingdirectory)
Wybierz zadanie Publikuj artefakty i wypełnij wymagane pola w następujący sposób:
- Nazwa wyświetlana: Publikowanie artefaktu
- Ścieżka do opublikowania: $(build.artifactstagingdirectory)
- Nazwa artefaktu: drop
- Lokalizacja publikowania artefaktu: Azure Pipelines
Wybierz pozycję Zapisz i kolejkę, a następnie wybierz pozycję Uruchom , aby uruchomić potok.
Po zakończeniu przebiegu potoku wróć do podsumowania potoku i wybierz opublikowany artefakt.
Wybierz pozycję upuść>secret.txt, aby pobrać opublikowany artefakt.
Otwórz pobrany plik tekstowy. Plik tekstowy powinien zawierać wpis tajny z usługi Azure Key Vault.
Zaloguj się do kolekcji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Potoki, a następnie wybierz pozycję Kompilacje.
Wybierz pozycję Nowy>potok kompilacji.
Wybierz pozycję Użyj edytora klasycznego, aby utworzyć nowy klasyczny potok kompilacji.
Wybierz pozycję Azure Repos Git, wybierz repozytorium i gałąź domyślną, a następnie wybierz pozycję Kontynuuj.
Wybierz szablon potoku .Net Desktop , a następnie wybierz pozycję Zastosuj.
W tym przykładzie będziemy potrzebować tylko dwóch ostatnich zadań. Naciśnij CTRL, a następnie wybierz pierwsze pięć zadań, kliknij prawym przyciskiem myszy i wybierz polecenie Usuń wybrane zadania , aby je usunąć.
Wybierz, + aby dodać nowe zadanie. Wyszukaj zadanie Wiersza polecenia, wybierz je, a następnie wybierz pozycję Dodaj, aby dodać je do potoku. Po dodaniu skonfiguruj ją w następujący sposób:
- Nazwa wyświetlana: Tworzenie pliku
- Skrypt:
echo $(YOUR_SECRET_NAME) > secret.txt
Wybierz, + aby dodać nowe zadanie. Wyszukaj zadanie usługi Azure Key Vault, wybierz je, a następnie wybierz pozycję Dodaj*, aby dodać je do potoku. Po dodaniu skonfiguruj ją w następujący sposób:
- Nazwa wyświetlana: Azure Key Vault
- Subskrypcja platformy Azure: wybierz utworzone wcześniej połączenie usługi jednostki usługi
- Magazyn kluczy: wybierz magazyn kluczy
- Filtr wpisu tajnego: rozdzielona przecinkami lista nazw wpisów tajnych lub pozostaw * w celu pobrania wszystkich wpisów tajnych z wybranego magazynu kluczy
Wybierz zadanie Kopiuj pliki i wypełnij wymagane pola w następujący sposób:
- Nazwa wyświetlana: Kopiuj plik
- Zawartość: secret.txt
- Folder docelowy: $(build.artifactstagingdirectory)
Wybierz zadanie Publikuj artefakty i wypełnij wymagane pola w następujący sposób:
- Nazwa wyświetlana: Publikowanie artefaktu
- Ścieżka do opublikowania: $(build.artifactstagingdirectory)
- Nazwa artefaktu: drop
- Lokalizacja publikowania artefaktu: Azure Pipelines
Wybierz pozycję Zapisz i kolejkę, a następnie wybierz pozycję Zapisz i kolejkę, aby uruchomić potok kompilacji .
Po zakończeniu przebiegu potoku wybierz pozycję Artefakty , a następnie wybierz pozycję Upuść.
W nowo otwartym oknie wybierz pozycję upuść>secret.txt, wybierz ikonę wielokropka (...), a następnie wybierz pozycję Pobierz , aby zapisać plik tekstowy.
Otwórz pobrany plik tekstowy, który powinien zawierać wpis tajny z usługi Azure Key Vault.
Ostrzeżenie
Ten samouczek jest przeznaczony tylko do celów edukacyjnych. Aby uzyskać najlepsze rozwiązania w zakresie zabezpieczeń i sposób bezpiecznej pracy z wpisami tajnymi, zobacz Zarządzanie wpisami tajnymi w aplikacjach serwera za pomocą usługi Azure Key Vault.
Czyszczenie zasobów
Wykonaj poniższe kroki, aby usunąć utworzone zasoby:
Jeśli utworzono nową organizację do hostowania projektu, zobacz , jak usunąć organizację, w przeciwnym razie usuń projekt.
Wszystkie zasoby platformy Azure utworzone w ramach tego samouczka są hostowane w ramach jednej grupy zasobów. Uruchom następujące polecenie, aby usunąć grupę zasobów i wszystkie jej zasoby.
az group delete --name <YOUR_RESOURCE_GROUP_NAME>
Często zadawane pytania
.: Otrzymuję następujący błąd: "użytkownik lub grupa nie ma uprawnień do listy wpisów tajnych", co należy zrobić?
1: Jeśli wystąpi błąd wskazujący, że użytkownik lub grupa nie ma uprawnień do listy wpisów tajnych w magazynie kluczy, uruchom następujące polecenia, aby autoryzować aplikację do uzyskiwania dostępu do klucza lub wpisu tajnego w usłudze Azure Key Vault:
$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;