Uzyskiwanie dostępu do prywatnego magazynu kluczy z potoku
Usługa Azure Key Vault oferuje bezpieczne rozwiązanie do zarządzania poświadczeniami, takimi jak klucze, wpisy tajne i certyfikaty z bezproblemowymi zabezpieczeniami. Korzystając z usługi Azure Pipelines, można usprawnić proces uzyskiwania dostępu do magazynów kluczy i korzystania z niego, co ułatwia przechowywanie i pobieranie poświadczeń.
W niektórych scenariuszach organizacje ustalają priorytety zabezpieczeń przez ograniczenie dostępu do magazynów kluczy wyłącznie do wyznaczonych sieci wirtualnych platformy Azure w celu zapewnienia najwyższego poziomu zabezpieczeń krytycznych aplikacji.
Niniejszy samouczek zawiera informacje na temat wykonywania następujących czynności:
- Tworzenie jednostki usługi
- Tworzenie połączenia z usługą
- Konfigurowanie punktów dostępu przychodzącego
- Wykonywanie zapytań względem prywatnego magazynu kluczy platformy Azure z 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.
Usługa Azure Key Vault. Utwórz nową usługę Azure Key Vault , jeśli jeszcze tego nie zrobiono.
Uzyskiwanie dostępu do prywatnego magazynu kluczy
Usługa Azure Pipelines umożliwia deweloperom łączenie usługi Azure Key Vault z grupą zmiennych i mapowanie do niej wpisów tajnych selektywnego magazynu. Dostęp do magazynu kluczy używanego jako grupa zmiennych można uzyskać:
W usłudze Azure DevOps w czasie konfiguracji grupy zmiennych.
Z poziomu własnego agenta podczas wykonywania zadania potoku.
Tworzenie jednostki usługi
Zacznij od utworzenia nowej jednostki usługi, co umożliwi dostęp do zasobów platformy Azure. Następnie należy utworzyć nowe połączenie usługi ARM w usłudze Azure DevOps, a następnie skonfigurować poświadczenia federacyjne dla jednostki usługi na platformie Azure przed zweryfikowaniem i zapisaniem połączenia usługi w usłudze Azure DevOps.
Przejdź do witryny Azure Portal.
Otwórz usługę Cloud Shell na pasku menu, a następnie wybierz pozycję Bash.
Uruchom następujące polecenie, aby utworzyć nową jednostkę usługi:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAME
Pamiętaj, aby skopiować dane wyjściowe, ponieważ użyjemy go do utworzenia połączenia z usługą w następnym kroku.
Tworzenie połączenia z usługą
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Ustawienia projektu>Połączenia>usługi Nowe połączenie z usługą.
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 Credential (Poświadczenia) pozostaw domyślną zalecaną wartość: Federacja tożsamości obciążenia.
W obszarze Poziom zakresu wybierz pozycję **Subskrypcja, a następnie wybierz swoją subskrypcję z menu rozwijanego.
Wybierz grupę zasobów, jeśli chcesz ograniczyć dostęp tylko do określonej grupy zasobów.
Podaj 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 Zapisz, gdy skończysz.
Tworzenie poświadczeń federacyjnych
Przejdź do witryny Azure Portal, wprowadź identyfikator ClientID jednostki usługi na pasku wyszukiwania, a następnie wybierz aplikację.
W obszarze Zarządzanie wybierz pozycję Certyfikaty i wpisy tajne>federacyjne poświadczeń.
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 zastępując symbol zastępczy identyfikatorem GUID organizacji. Identyfikator organizacji można znaleźć, przechodząc do pozycji Ustawienia>organizacji Microsoft Entra> Pobierz listę organizacji organizacji połączonych z katalogm.
https://vstoken.dev.azure.com/<ORGANIZATION_ID>
W polu Identyfikator podmiotu wklej następujący adres URL zastępując symbol zastępczy nazwą organizacji, nazwą projektu i nazwą połączenia usługi.
sc://ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAME
Podaj nazwę poświadczeń federacyjnych, a następnie wybierz pozycję Dodaj po zakończeniu.
Tworzenie połączenia z usługą
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Ustawienia projektu>Połączenia>usługi Nowe połączenie z usługą.
Wybierz pozycję Azure Resource Manager,> Dalej, a następnie wybierz pozycję Jednostka usługi (ręcznie)>Dalej.
Wybierz pozycję Chmura platformy Azure dla środowiska i subskrypcji dla poziomu zakresu, a następnie wprowadź identyfikator subskrypcji i nazwę subskrypcji.
Wprowadź informacje o jednostce usługi, a następnie wybierz pozycję Weryfikuj.
Po pomyślnej weryfikacji nazwij połączenie z usługą, dodaj opis, a następnie zaznacz pole wyboru Udziel uprawnień dostępu do wszystkich potoków . Po zakończeniu wybierz pozycję Weryfikuj i zapisz .
Napiwek
Jeśli nie możesz zweryfikować połączenia jednostki usługi, przyznaj jednostce usługi dostęp Czytelnik do subskrypcji.
Tworzenie połączenia z usługą
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ą.
Wybierz pozycję Azure Resource Manager, nazwij połączenie z usługą, a następnie wybierz pozycję Chmura platformy Azure dla środowiska i subskrypcji dla poziomu zakresu.
Wprowadź identyfikator subskrypcji i nazwę subskrypcji.
Wprowadź informacje o jednostce usługi, a następnie wybierz pozycję Weryfikuj połączenie.
Zaznacz pole wyboru Zezwalaj wszystkim potokom na używanie tego połączenia, a następnie po zakończeniu wybierz przycisk OK.
Napiwek
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 zapoznamy się z dwiema metodami uzyskiwania dostępu do prywatnego magazynu kluczy z usługi Azure DevOps. Najpierw użyjemy grup zmiennych do łączenia i mapowania wpisów tajnych z naszego magazynu kluczy, a następnie konfigurowania dostępu przychodzącego, zezwalając na statyczne zakresy adresów IP. Ustanawiamy dostęp przychodzący, ponieważ usługa Azure Pipelines używa opublikowanego publicznego adresu IP usługi Azure DevOps podczas wykonywania zapytań dotyczących usługi Azure Key Vault z grupy zmiennych. W związku z tym dodając połączenia przychodzące do zapory usługi Azure Key Vault, możemy pomyślnie nawiązać połączenie z usługą Azure Key Vault.
W naszym drugim podejściu przedstawimy dynamiczne dodawanie adresu IP agenta hostowanego przez firmę Microsoft do listy dozwolonych zapory magazynu kluczy, wykonywania zapytań względem magazynu kluczy, a następnie usuwania adresu IP po zakończeniu. Drugie podejście jest przeznaczone do celów demonstracyjnych i nie jest zalecane przez usługę Azure Pipelines.
1 — Mapowanie wpisów tajnych magazynu kluczy za pomocą grupy zmiennych
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Biblioteka potoków>, a następnie wybierz pozycję + Grupa zmiennych.
Nazwij grupę zmiennych, a następnie wybierz przycisk przełącznika, aby włączyć pozycję Połącz wpisy tajne z usługi Azure Key Vault jako przycisk zmiennej .
Wybierz utworzone wcześniej połączenie z usługą, wybierz magazyn kluczy, a następnie wybierz pozycję Autoryzuj.
W obszarze Zmienne wybierz pozycję Dodaj , aby dodać wpis tajny, a następnie wybierz pozycję Zapisz po zakończeniu.
Uwaga
Upewnij się, że połączenie usługi ma uprawnienia Pobierz i wyświetl listę , a jednostka usługi ma przypisaną rolę Użytkownik wpisów tajnych usługi Key Vault w prywatnym magazynie kluczy.
1.1 Konfigurowanie uprawnień połączenia z usługą
Przejdź do magazynu kluczy platformy Azure, a następnie wybierz pozycję Zasady dostępu.
Wybierz pozycję Utwórz, a następnie w obszarze Uprawnienia wpisu tajnego 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.
Po raz kolejny wybierz pozycję Dalej , przejrzyj ustawienia, a następnie wybierz pozycję Przejrzyj i utwórz po zakończeniu.
1.2 Konfigurowanie uprawnień jednostki usługi
Przejdź do magazynu kluczy platformy Azure, a następnie wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami).
Wybierz pozycję 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 jednostkę usługi >Wybierz.
Po zakończeniu wybierz pozycję Przejrzyj i przypisz .
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Biblioteka potoków>, a następnie wybierz pozycję + Grupa zmiennych.
Nazwij grupę zmiennych, a następnie wybierz przycisk przełącznika, aby włączyć pozycję Połącz wpisy tajne z usługi Azure Key Vault jako przycisk zmiennej .
Wybierz utworzone wcześniej połączenie z usługą platformy Azure z menu rozwijanego, a następnie wybierz magazyn kluczy.
Jeśli wystąpi komunikat o błędzie: Określone połączenie usługi platformy Azure musi mieć uprawnienia do zarządzania wpisami tajnymi "Pobierz listę" w wybranym magazynie kluczy, jak pokazano powyżej. Przejdź do magazynu kluczy w witrynie Azure Portal, wybierz pozycję Kontrola dostępu (IAM)>Dodaj użytkownika>wpisów tajnych magazynu kluczy ról>Dalej, a następnie dodaj jednostkę usługi, a następnie wybierz pozycję Przejrzyj i przypisz, gdy skończysz.
Dodaj wpisy tajne, a następnie wybierz pozycję Zapisz po zakończeniu.
2 — Konfigurowanie dostępu przychodzącego z usługi Azure DevOps
Aby umożliwić dostęp do magazynu kluczy z usługi Azure DevOps, musisz udzielić dostępu z określonych zakresów statycznych adresów IP. Te zakresy są określane przez lokalizację geograficzną organizacji usługi Azure DevOps.
Zaloguj się do organizacji usługi Azure DevOps.
Wybierz pozycję Ustawienia organizacji.
Przejdź do obszaru Przegląd, gdzie znajduje się lokalizacja geograficzna wyświetlana w dolnej części strony.
Znajdź zakresy adresów IP w wersji 4 lokalizacji geograficznej.
Skonfiguruj magazyn kluczy, aby zezwolić na dostęp z zakresów statycznych adresów IP.
3 — Wykonywanie zapytań względem prywatnego magazynu kluczy przy użyciu grupy zmiennych
W tym przykładzie używamy grupy zmiennych, konfigurujemy ją wcześniej i autoryzujemy przy użyciu jednostki usługi, aby wysyłać zapytania i kopiować nasz wpis tajny z prywatnej usługi Azure Key Vault po prostu przy użyciu połączonej grupy zmiennych. Usługa Azure Pipelines używa opublikowanego publicznego adresu IP podczas wykonywania zapytań dotyczących usługi Azure Key Vault z grupy zmiennych, dlatego upewnij się, że skonfigurowano dostęp przychodzący, aby działał prawidłowo:
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 — dynamicznie zezwalaj na adres IP agenta hostowanego przez firmę Microsoft
W tym drugim podejściu zaczniemy od zapytania o adres IP agenta hostowanego przez firmę Microsoft na początku naszego potoku. Następnie dodamy go do listy dozwolonych magazynu kluczy, przejdziemy do pozostałych zadań, a na koniec usuniemy adres IP z listy dozwolonych zapory magazynu kluczy.
Uwaga
Takie podejście jest przeznaczone tylko do celów demonstracyjnych i nie jest zalecanym podejściem usługi 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 = $env: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 potoku zawiera rolę współautora magazynu kluczy w ramach kontroli dostępu (IAM) magazynu kluczy.
Uzyskiwanie dostępu do prywatnego magazynu kluczy z poziomu własnego agenta
Aby mieć możliwość uzyskiwania dostępu do prywatnego magazynu kluczy z agenta usługi Azure Pipelines, należy użyć własnego agenta (windows, Linux, Mac) lub agenta zestawu skalowania. Dzieje się tak dlatego, że agenci hostowani przez firmę Microsoft, podobnie jak inne ogólne usługi obliczeniowe, nie znajdują się na liście zaufanych usług magazynu kluczy.
Aby nawiązać łączność z prywatnym magazynem kluczy, należy zapewnić łączność wzrokową przez skonfigurowanie prywatnego punktu końcowego dla magazynu kluczy. Ten punkt końcowy musi być routingiem i mieć jego prywatną nazwę DNS rozpoznawaną przez agenta potoku własnego.
1 — Konfigurowanie dostępu przychodzącego z własnego agenta
Postępuj zgodnie z podaną instrukcją, aby utworzyć sieć wirtualną.
W witrynie Azure Portal użyj paska wyszukiwania w górnej części strony, aby znaleźć usługę Azure Key Vault.
Po zlokalizowaniu magazynu kluczy w wynikach wyszukiwania wybierz go, a następnie przejdź do pozycji Ustawienia>Sieć.
Wybierz pozycję Połączenia prywatnego punktu końcowego, 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ą. Podaj nazwę i nazwę interfejsu sieciowego dla wystąpienia i upewnij się, że wybrano ten sam region, co utworzona wcześniej sieć wirtualna. Po zakończeniu wybierz pozycję Dalej .
Wybierz pozycję Połącz z zasobem platformy Azure w moim katalogu dla metody Połączenia, a następnie wybierz pozycję Microsoft.KeyVault/vaults z menu rozwijanego dla pozycji Typ zasobu. Wybierz zasób z menu rozwijanego. Zasób docelowy zostanie automatycznie wypełniony wartością: magazyn. Po zakończeniu wybierz pozycję Dalej .
Na karcie Sieć wirtualna wybierz utworzoną wcześniej sieć wirtualną i podsieć i pozostaw pozostałe pola jako domyślne. Po zakończeniu wybierz pozycję Dalej .
Kontynuuj korzystanie z kart DNS i Tagów , akceptując ustawienia domyślne. Na karcie Przeglądanie i tworzenie wybierz pozycję Utwórz po zakończeniu.
Po wdrożeniu zasobu przejdź do obszaru Ustawienia>magazynu >kluczy Połączenia>prywatne punkty końcowe sieci prywatny punkt końcowy powinien być wyświetlany na liście z zatwierdzonym stanem połączenia. Jeśli łączysz się z zasobem platformy Azure w innym katalogu, musisz poczekać, aż właściciel zasobu zatwierdzi żądanie połączenia.
2 — Zezwalaj na sieć wirtualną
Przejdź do witryny Azure Portal, a następnie znajdź usługę Azure Key Vault.
Wybierz pozycję Ustawienia>Sieć i upewnij się, że znajdujesz się na karcie Zapory i sieci wirtualne.
Wybierz pozycję Dodaj sieć>wirtualną Dodaj istniejące sieci wirtualne.
Wybierz swoją subskrypcję z menu rozwijanego, a następnie wybierz utworzoną wcześniej sieć wirtualną, a następnie wybierz podsieci.
Po zakończeniu wybierz pozycję Dodaj , a następnie przewiń do dołu strony i wybierz pozycję Zastosuj , aby zapisać zmiany.
3 — Wykonywanie zapytań względem prywatnego magazynu kluczy z własnego agenta
W poniższym przykładzie użyto agenta skonfigurowanego na maszynie wirtualnej sieci wirtualnej w celu wykonywania zapytań dotyczących magazynu kluczy prywatnych za pośrednictwem grupy zmiennych:
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 udzielać dostępu przychodzącego usługi Azure DevOps do prywatnego magazynu kluczy, możesz użyć zadania AzureKeyVault , aby wykonać zapytanie dotyczące magazynu kluczy. Należy jednak upewnić się, że zezwalasz sieci wirtualnej hostujące agenta w ustawieniach zapory magazynu kluczy.
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
Jeśli występują następujące błędy, wykonaj kroki opisane w tej sekcji, aby rozwiązać problem i rozwiązać ten problem:
Public network access is disabled and request is not from a trusted service nor via an approved private link.
Oznacza to, że dostęp publiczny został wyłączony i nie skonfigurowano ani połączenia prywatnego punktu końcowego, ani wyjątków zapory. Wykonaj kroki opisane w sekcji [#configure-inbound-access-from-a-self-hosted-agent] i Skonfiguruj dostęp przychodzący z usługi Azure DevOps , 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 komunikat o błędzie wskazuje, że publiczny dostęp magazynu kluczy został wyłączony, a opcja Zezwalaj na zaufane usługi firmy Microsoft ominięcia tej opcji zapory nie jest zaznaczona, ale adres IP klienta nie został dodany do zapory magazynu kluczy. Przejdź do magazynu kluczy w witrynie Azure Portal, a następnie pozycję Ustawienia>Sieci i dodaj adres IP klienta do listy dozwolonych zapory.
Error: Client address is not authorized and caller is not a trusted service.
Upewnij się, że do listy dozwolonych magazynu kluczy dodano zakresy IPV4 lokalizacji geograficznej. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie dostępu przychodzącego z usługi Azure DevOps . Alternatywnie możesz przejść do sekcji Dynamiczne zezwalanie na dynamiczne zezwalanie na adres IP agenta hostowanego przez firmę Microsoft, aby dowiedzieć się, jak dodać adres IP klienta do zapory magazynu kluczy podczas wykonywania.