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.
Azure Key Vault zapewnia bezpieczny sposób zarządzania poświadczeniami, w tym kluczy, wpisów tajnych i certyfikatów. Korzystając z Azure Pipelines, można usprawnić proces uzyskiwania dostępu i używania magazynów kluczy do przechowywania i pobierania poświadczeń.
W niektórych scenariuszach organizacje nadają priorytet bezpieczeństwu, ograniczając dostęp do usługi Key Vault wyłącznie do wskazanych sieci wirtualnych platformy Azure. To ograniczenie zapewnia najwyższy poziom zabezpieczeń dla krytycznych aplikacji. Z tego samouczka dowiesz się, jak skonfigurować uwierzytelnianie i skonfigurować dostęp przychodzący, aby potok mógł wykonywać zapytania i pobierać dane z prywatnego Azure Key Vault.
Wymagania wstępne
| Produkt | Requirements |
|---|---|
| Azure DevOps | — Organizacja usługi Azure DevOps . - Azure DevOps project. -Uprawnienia: - Aby udzielić dostępu do wszystkich linii w projekcie: musisz być członkiem Grupy Administratorzy Projektu . - Aby utworzyć połączenia usług: musisz mieć rolę Administrator lub Twórca dla połączeń usług. |
| Azure | - Subskrypcja platformy Azure . - Usługa Azure Key Vault. |
Uzyskiwanie dostępu do prywatnego magazynu kluczy
Deweloperzy mogą używać Azure Pipelines do łączenia Azure magazynu kluczy z grupą zmiennych i mapowania do niej selektywnych wpisów tajnych magazynu. Dostęp do magazynu kluczy używanego jako grupa zmiennych można uzyskać:
- Z Azure DevOps podczas konfiguracji grupy zmiennych.
- Z agenta hostowanego samodzielnie w czasie wykonywania zadania potoku.
Aby skonfigurować dostęp do prywatnego magazynu kluczy, wykonaj następujące kroki w następującej kolejności:
- Utwórz nazwę główną usługi do uwierzytelniania w zasobach platformy Azure.
- Utwórz połączenie usługi Azure Resource Manager w Azure DevOps przy użyciu nazwy głównej usługi.
- Utwórz poświadczenie federacyjne dla jednostki usługi na platformie Azure.
Tworzenie jednostki usługi
Utwórz nazwę główną usługi w celu uwierzytelniania w zasobach platformy Azure:
Przejdź do portalu Azure.
W górnym menu otwórz Azure Cloud Shell, a następnie wybierz pozycję Bash.
Uruchom następujące polecenie, aby utworzyć nową nazwę główną usługi:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAMESkopiuj dane wyjściowe polecenia. Te wartości są potrzebne w następnym kroku podczas tworzenia połączenia z usługą.
Tworzenie połączenia z usługą
Po utworzeniu nazwy głównej usługi użyj jej wartości wyjściowych do utworzenia połączenia usługi Azure Resource Manager w usłudze Azure DevOps.
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Ustawienia projektu>Połączenia usług>Nowe połączenie usługi.
Wybierz pozycję Azure Resource Manager, a następnie wybierz pozycję Dalej.
W polu Typ tożsamości wybierz pozycję Rejestracja aplikacji (automatyczna) z menu rozwijanego.
W polu Poświadczenia pozostaw domyślną zalecaną wartość federacja tożsamości obciążeń.
W obszarze Poziom zakresu wybierz pozycję Subskrypcja, a następnie wybierz subskrypcję z menu rozwijanego.
Wybierz grupę zasobów, jeśli chcesz ograniczyć dostęp tylko do określonej grupy zasobów.
Wprowadź nazwę połączenia z usługą, a następnie zaznacz pole wyboru Udziel uprawnień dostępu do wszystkich potoków , aby zezwolić wszystkim potokom na korzystanie z tego połączenia z usługą.
Wybierz opcję Zapisz.
Utwórz poświadczenie federacyjne
Po zapisaniu połączenia z usługą skonfiguruj poświadczenie federacyjne w Azure w celu ustanowienia zaufania między jednostką usługi a Azure DevOps.
Przejdź do portalu Azure wprowadź identyfikator klienta jednostki usługi na pasku wyszukiwania, a następnie wybierz aplikację.
W obszarze Zarządzanie, wybierz pozycję Certyfikaty i wpisy tajne>Poświadczenia federacyjne.
Wybierz pozycję Dodaj poświadczenia, a następnie w scenariuszu poświadczeń federacyjnych wybierz pozycję Inny wystawca.
W polu Wystawca wklej następujący adres URL, aby zastąpić symbol zastępczy identyfikatorem GUID organizacji. Identyfikator organizacji można znaleźć, przechodząc do pozycji Ustawienia organizacji>Microsoft Entra. Pobierz listę organizacji Azure DevOps połączonych z katalogem.
https://login.microsoftonline.com/<TENANT_ID>/v2.0W polu Identyfikator podmiotu wklej następujący adres URL. Zastąp symbole zastępcze nazwą organizacji, nazwą projektu i nazwą połączenia usługi.
ENTRA_PREFIX/sc/ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAMEWprowadź nazwę swojego poświadczenia federacyjnego, a następnie wybierz pozycję Dodaj.
Tworzenie połączenia z usługą
Po utworzeniu nazwy głównej usługi użyj jej wartości wyjściowych do utworzenia połączenia usługi Azure Resource Manager w usłudze Azure DevOps.
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Ustawienia projektu>Połączenia usług>Nowe połączenie usługi.
Wybierz Azure Resource Manager>Next, a następnie wybierz Service principal (manual)>Next.
W polu Environment wybierz Azure Cloud, a w polu Scope level wybierz Subscription. Następnie wprowadź identyfikator subskrypcji i nazwę subskrypcji.
Wprowadź informacje o nazwie głównej usługi, a następnie wybierz pozycję Weryfikuj.
Po pomyślnej weryfikacji nadaj nazwę połączeniu usługi, dodaj opis, a następnie zaznacz pole wyboru Przyznaj uprawnienia dostępu wszystkim potokom. Wybierz pozycję Weryfikuj i zapisz.
Wskazówka
Jeśli nie możesz zweryfikować połączenia jednostki usługi, przyznaj jednostce usługi dostęp Czytelnik do subskrypcji.
Uzyskiwanie dostępu do prywatnego magazynu kluczy z usługi Azure DevOps
W tej sekcji omówiono dwie metody uzyskiwania dostępu do prywatnego magazynu kluczy z Azure DevOps.
Pierwsza metoda wykorzystuje grupy zmiennych do łączenia i mapowania sekretów z Twojego magazynu kluczy, a następnie skonfigurowania dostępu przychodzącego przez dopuszczenie statycznych zakresów adresów IP. Azure Pipelines używa publicznego adresu IP Azure DevOps podczas wykonywania zapytań dotyczących magazynu kluczy z grupy zmiennych, dlatego należy zezwolić na te zakresy adresów IP w zaporze magazynu kluczy.
Druga metoda dynamicznie dodaje adres IP agenta hostowanego przez Microsoft do listy dozwolonych adresów w zaporze usługi Key Vault na początku potoku, odpytuje usługę Key Vault, a na końcu usuwa ten adres IP. Ta metoda służy tylko do celów demonstracyjnych i nie jest zalecana do użytku produkcyjnego.
Krok 1. Mapuj wpisy tajne z magazynu kluczy za pomocą grupy zmiennych
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Pipelines>Library, a następnie wybierz pozycję + Grupa zmiennych.
Nazwij grupę zmiennych, a następnie włącz opcję Połącz wpisy tajne z usługi Azure Key Vault jako zmienną.
Wybierz utworzone wcześniej połączenie z usługą, wybierz magazyn kluczy, a następnie wybierz Autoryzuj.
W obszarze Zmienne wybierz pozycję Dodaj , aby dodać wpis tajny, a następnie wybierz pozycję Zapisz.
Uwaga
Upewnij się, że połączenie z usługą ma uprawnienia Get i List oraz że Twojej nazwie głównej usługi przypisano rolę Key Vault Secrets User w prywatnym magazynie kluczy.
Krok 1.1. Konfigurowanie uprawnień połączenia z usługą
Przejdź do magazynu kluczy Azure, a następnie wybierz pozycję Zasady dostępu.
Wybierz pozycję Utwórz, a w obszarze Uprawnienia wpisów tajnych dodaj uprawnienia Pobierz i Lista, a następnie wybierz pozycję Dalej.
Dodaj połączenie usługi na pasku wyszukiwania, wybierz je, a następnie wybierz pozycję Dalej.
Wybierz pozycję Dalej jeszcze raz, przejrzyj ustawienia, a następnie wybierz pozycję Przejrzyj i utwórz.
Krok 1.2. Konfigurowanie uprawnień jednostki usługi
Przejdź do usługi Azure Key Vault, a następnie wybierz pozycję Kontrola dostępu (IAM).
Wybierz pozycję Dodaj>Dodaj przypisanie roli, a następnie wybierz kartę Rola.
Wybierz rolę Użytkownik wpisów tajnych usługi Key Vault, a następnie wybierz pozycję Dalej.
Wybierz pozycję Wybierz członków, dodaj nazwę główną usługi, a następnie wybierz pozycję Wybierz.
Wybierz Przejrzyj i przypisz.
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Pipelines>Library, a następnie wybierz pozycję + Grupa zmiennych.
Nazwij grupę zmiennych, a następnie włącz opcję Połącz wpisy tajne z usługi Azure Key Vault jako zmienną.
Wybierz połączenie usługi Azure utworzone wcześniej z menu rozwijanego, a następnie wybierz magazyn kluczy.
Może zostać wyświetlony komunikat o błędzie „Określone połączenie usługi Azure musi mieć uprawnienia „Pobieranie, Wyświetlanie” do zarządzania wpisami tajnymi w wybranym magazynie kluczy.” Przejdź do magazynu kluczy w portalu Azure i wybierz pozycję Kontrola dostępu (IAM)>Dodaj przypisanie roli>użytkownik wpisów tajnych magazynu kluczy>Dalej. Dodaj nazwę główną usługi, a następnie wybierz pozycję Przejrzyj i przypisz.
Dodaj wpisy tajne, a następnie wybierz pozycję Zapisz.
Krok 2. Konfigurowanie dostępu przychodzącego z Azure DevOps
Po skonfigurowaniu grupy zmiennych zezwól na dostęp przychodzący z Azure DevOps do magazynu kluczy, dodając statyczne zakresy adresów IP dla regionu geograficznego organizacji.
Zaloguj się do organizacji usługi Azure DevOps.
Wybierz pozycję Ustawienia organizacji.
Przejdź do obszaru Przegląd , aby znaleźć lokalizację geograficzną.
Znajdź zakresy adresów IPv4 dla regionu geograficznego.
Ważne
W przypadku połączeń przychodzących ze Stanów Zjednoczonych upewnij się, że dodasz zakresy adresów IP dla wszystkich regionów USA.
Skonfiguruj magazyn kluczy , aby zezwolić na dostęp z zakresów statycznych adresów IP.
Krok 3: Wykonywanie zapytań do prywatnego magazynu kluczy za pomocą grupy zmiennych
Po połączeniu grupy zmiennych i skonfigurowaniu dostępu przychodzącego użyj następującego potoku, aby odpytać prywatny magazyn kluczy i skopiować pobrany sekret. Azure Pipelines używa swojego publicznego adresu IP do odpytywania magazynu kluczy skonfigurowanego w grupie zmiennych, dlatego przed uruchomieniem potoku upewnij się, że skonfigurowano dostęp przychodzący.
variables:
- group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Alternatywna metoda: Dynamiczne zezwalanie na adres IP agenta hostowanego Microsoft
W tym podejściu potok przy uruchomieniu pobiera adres IP agenta hostowanego przez firmę Microsoft, dodaje go do listy dozwolonych adresów w zaporze usługi Key Vault, uruchamia zadania usługi Key Vault, a następnie usuwa ten adres IP przed zakończeniem działania potoku.
Uwaga
Takie podejście jest przeznaczone tylko do celów demonstracyjnych. Nie zalecamy tego podejścia do Azure Pipelines.
- task: AzurePowerShell@5
displayName: 'Allow agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ip = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
Add-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -ResourceGroupName "YOUR_RESOURCE_GROUP_NAME" -IpAddressRange $ip
echo "##vso[task.setvariable variable=agentIP]$ip"
- task: AzureKeyVault@2
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
KeyVaultName: 'YOUR_KEY_VAULT_NAME'
SecretsFilter: '*'
RunAsPreJob: false
- task: AzurePowerShell@5
displayName: 'Remove agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ipRange = "$(agentIP)/32"
Remove-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -IpAddressRange $ipRange
condition: succeededOrFailed()
Ważne
Upewnij się, że jednostka usługi używana do uzyskiwania dostępu do magazynu kluczy z poziomu potoku ma przypisaną rolę Key Vault Contributor w kontroli dostępu (IAM) magazynu kluczy.
Uzyskiwanie dostępu do prywatnego magazynu kluczy za pomocą agenta hostowanego samodzielnie
Aby uzyskać dostęp do prywatnego magazynu kluczy z poziomu agenta Azure Pipelines, użyj agenta hostowanego samodzielnie (Windows, Linux lub Mac) albo agentów Virtual Machine Scale Sets. Agenci hostowani przez firmę Microsoft, podobnie jak inne ogólne usługi obliczeniowe, nie znajdują się na liście zaufanych usług usługi Key Vault.
Aby ustanowić łączność z prywatnym magazynem kluczy, skonfiguruj prywatny punkt końcowy w celu uzyskania bezpośredniego dostępu. Ten punkt końcowy musi być osiągalny sieciowo, a jego prywatna nazwa DNS musi dać się rozwiązać z poziomu agenta potoku hostowanego samodzielnie.
Krok 1. Skonfiguruj dostęp przychodzący z agenta hostowanego lokalnie
Postępuj zgodnie z instrukcjami, aby utworzyć sieć wirtualną.
W portalu Azure użyj paska wyszukiwania w górnej części strony, aby znaleźć magazyn kluczy Azure.
Wybierz magazyn kluczy, a następnie przejdź do Ustawienia>Sieć.
Wybierz pozycję Połączenia prywatnych punktów końcowych, a następnie wybierz pozycję Utwórz, aby utworzyć nowy prywatny punkt końcowy.
Wybierz grupę zasobów, która hostuje utworzoną wcześniej sieć wirtualną. Wprowadź nazwę i nazwę interfejsu sieciowego dla swojego wystąpienia i upewnij się, że wybierasz ten sam region, co sieć wirtualna utworzona wcześniej. Wybierz pozycję Dalej.
W przypadku metody Connection wybierz pozycję Połączenie z zasobem Azure w moim katalogu. W przypadku Typ zasobu wybierz Microsoft.KeyVault/vaults z menu rozwijanego. Wybierz zasób z menu rozwijanego. Docelowy zasób podrzędny jest automatycznie wypełniany wartością vault. Wybierz pozycję Dalej.
Na karcie Virtual Network wybierz sieć wirtualną i podsieć, które zostały wcześniej utworzone, i pozostaw pozostałe pola z wartościami domyślnymi. Wybierz pozycję Dalej.
Zaakceptuj ustawienia domyślne na kartach DNS i Tagi . Na karcie Przeglądanie + tworzenie wybierz pozycję Utwórz.
Po wdrożeniu zasobu przejdź do magazynu kluczy i wybierz pozycje Ustawienia>Sieć>Połączenia prywatnych punktów końcowych. Prywatny punkt końcowy powinien być widoczny ze stanem Stan połączenia jako Zatwierdzony. Jeśli łączysz się z zasobem Azure w innym katalogu, musisz poczekać, aż właściciel zasobu zatwierdzi żądanie połączenia.
Krok 2. Zezwalanie na sieć wirtualną
Po skonfigurowaniu prywatnego punktu końcowego zezwól na dostęp sieci wirtualnej, w której działa agent hostowany samodzielnie, w ustawieniach zapory usługi Key Vault.
Przejdź do portalu Azure, a następnie znajdź magazyn kluczy Azure.
Wybierz pozycję Ustawienia>Sieć i upewnij się, że jesteś na karcie Zapory i sieci wirtualne .
Wybierz pozycję Dodaj sieć wirtualną>Dodaj istniejące sieci wirtualne.
Wybierz swoją subskrypcję z menu rozwijanego, wybierz utworzoną wcześniej sieć wirtualną, a następnie wybierz podsieci.
Wybierz pozycję Dodaj, a następnie przewiń do dołu strony i wybierz pozycję Zastosuj , aby zapisać zmiany.
Krok 3: Wykonaj zapytanie do prywatnego magazynu kluczy z poziomu agenta hostowanego samodzielnie
Jeśli ruch z sieci wirtualnej jest dozwolony, użyj następującego potoku, aby wysłać zapytanie do prywatnego magazynu kluczy za pośrednictwem połączonej grupy zmiennych przy użyciu agenta hostowanego samodzielnie:
pool: Self-hosted-pool
variables:
group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Jeśli nie chcesz zezwalać platformie Azure DevOps na dostęp przychodzący do prywatnego magazynu kluczy, użyj zadania AzureKeyVault, aby bezpośrednio odpytać magazyn kluczy. W takim przypadku upewnij się, że sieć wirtualna obsługująca agenta hostowanego samodzielnie jest uwzględniona w ustawieniach zapory usługi Key Vault.
pool: Self-hosted-pool
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: '$(SERVICE_CONNECTION_NAME)'
keyVaultName: $(KEY_VAULT_NAME)
SecretsFilter: '*'
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Rozwiązywanie problemów
Skorzystaj z poniższych wskazówek, aby rozwiązać typowe błędy dostępu do magazynu kluczy:
Public network access is disabled and request is not from a trusted service nor via an approved private link.Ten błąd wskazuje, że dostęp publiczny jest wyłączony, ale nie skonfigurowano ani prywatnego punktu końcowego, ani wymaganych wyjątków zapory. Wykonaj kroki opisane w Konfiguruj dostęp przychodzący z własnego agenta lub Konfiguruj dostęp przychodzący z Azure DevOps na podstawie scenariusza, aby skonfigurować dostęp do prywatnego magazynu kluczy.
Request was not allowed by NSP rules and the client address is not authorized and caller was ignored because bypass is set to None Client address: <x.x.x.x>Ten błąd wskazuje, że dostęp publiczny jest wyłączony, opcja Zezwalaj zaufanym usługom firmy Microsoft na pomijanie tej zapory nie jest włączona, a adres IP klienta nie znajduje się na liście dozwolonych adresów IP w zaporze usługi Key Vault. W portalu Azure przejdź do magazynu kluczy, wybierz pozycję Settings>Networking i dodaj adres IP klienta do listy dozwolonych adresów w zaporze.
Error: Client address is not authorized and caller is not a trusted service.Upewnij się, że zakresy adresów IPv4 Twojego regionu geograficznego zostały dodane do listy dozwolonych adresów w magazynie kluczy. Aby uzyskać szczegółowe informacje, zobacz Konfiguruj dostęp przychodzący z Azure DevOps.
Alternatywnie zobacz, jak dynamicznie zezwolić na adres IP agenta hostowanego przez firmę Microsoft, aby dodać adres IP klienta do zapory magazynu kluczy w czasie działania.