Ochrona wpisów tajnych w usłudze Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Ten artykuł zawiera najlepsze rozwiązania dotyczące ochrony wpisów tajnych w usłudze Azure Pipelines. Wpis tajny to wszystko, do czego chcesz ściśle kontrolować dostęp, na przykład klucze interfejsu API, hasła, certyfikaty lub klucze kryptograficzne.
Usługa Azure Pipelines nie generuje wartości wpisów tajnych. Może jednak być konieczne dodanie wpisu tajnego do potoku w celu przechowywania poufnych danych, takich jak klucz interfejsu API. Aby dowiedzieć się więcej na temat ustawiania zmiennych tajnych, zobacz Ustawianie zmiennych tajnych.
Nie używaj wpisów tajnych, jeśli jest dostępna inna metoda
Najlepszą metodą ochrony wpisu tajnego nie jest posiadanie wpisu tajnego w pierwszej kolejności. Sprawdź, czy potok może używać innej metody niż używanie wpisu tajnego do wykonania zadania.
- Użyj połączeń usług:
- W przypadku określania wartości docelowych dla platformy Azure lub innych usług użyj połączeń usług zamiast zarządzać wpisami tajnymi w zmiennych.
- Połączenia usług umożliwiają bezpieczne łączenie się z usługami zewnętrznymi bez ujawniania poufnych informacji bezpośrednio w konfiguracji potoku.
- Aby uzyskać więcej informacji, zobacz Zarządzanie połączeniami usług i Nawiązywanie połączenia z platformą Microsoft Azure przy użyciu połączenia usługi Azure Resource Manager.
Użyj tożsamości zarządzanych:
- Rozważ użycie tożsamości zarządzanych zamiast bezpośredniego obsługiwania wpisów tajnych.
- Tożsamości zarządzane umożliwiają aplikacjom i usługom uwierzytelnianie zabezpieczeń za pomocą usług platformy Azure bez konieczności jawnego poświadczeń.
- Tożsamości zarządzane można używać do uzyskiwania dostępu do innych usług platformy Azure.
Zadanie interfejsu wiersza polecenia platformy Azure:
- Jeśli używasz zadania interfejsu wiersza polecenia platformy Azure, w potoku rozważ użycie
addSpnToEnvironment
ustawienia w celu uzyskania dostępu do szczegółów jednostki usługi w skrypsie bez jawnego przekazywania wpisów tajnych.
- Jeśli używasz zadania interfejsu wiersza polecenia platformy Azure, w potoku rozważ użycie
Aby uzyskać więcej informacji, zobacz Używanie jednostek usługi i tożsamości zarządzanych
Używanie zmiennych tajnych
Nigdy nie przechowuj poufnych wartości jako zwykłego tekstu w pliku usługi Azure Pipelines .yml .
Zmienne tajne mogą służyć do informacji prywatnych, takich jak hasła, identyfikatory i inne dane identyfikujące, których nie chcesz ujawniać w potoku. Zalecamy ustawienie zmiennych wpisów tajnych za pomocą usługi Azure Key Vault. Można również ustawić zmienne tajne w interfejsie użytkownika lub w grupie zmiennych. Nie zalecamy używania polecenia rejestrowania w celu ustawienia zmiennej tajnej. Po ustawieniu wpisu tajnego za pomocą polecenia rejestrowania każdy, kto może uzyskać dostęp do potoku, może również zobaczyć wpis tajny.
Zmienne tajne są szyfrowane i mogą być używane w potokach bez ujawniania ich wartości. Chociaż ich wartości nie są ujawniane, nigdy nie echo wpisów tajnych jako danych wyjściowych i nie przekazują wpisów tajnych w wierszu polecenia. Zamiast tego sugerujemy mapowania wpisów tajnych na zmienne środowiskowe.
Podczas tworzenia wpisu tajnego postępuj zgodnie ze wskazówkami dotyczącymi nazewnictwa zmiennych i upewnij się, że nazwa wpisu tajnego nie ujawnia poufnych informacji.
Ograniczanie dostępu do zmiennych tajnych
Aby ograniczyć dostęp do wpisów tajnych w usłudze Azure DevOps, wykonaj następujące najlepsze rozwiązania:
- Przechowywanie wpisów tajnych w usłudze Azure Key Vault. Za pomocą usługi Azure Key Vault można następnie użyć modelu kontroli dostępu opartego na rolach platformy Azure, aby ograniczyć dostęp do wpisu tajnego lub grupy wpisów tajnych.
- Ustaw zmienne tajne w interfejsie użytkownika dla potoku. Zmienne tajne ustawione w interfejsie użytkownika ustawień potoku dla potoku są ograniczone do potoku, w którym są ustawione. W związku z tym można mieć wpisy tajne widoczne tylko dla użytkowników z dostępem do tego potoku.
- Ustaw wpisy tajne w grupie zmiennych. Grupy zmiennych są zgodne z modelem zabezpieczeń biblioteki. Możesz kontrolować, kto może definiować nowe elementy w bibliotece i kto może używać istniejącego elementu.
Nie zapisuj wpisów tajnych w dziennikach
Usługa Azure Pipelines próbuje wyczyścić wpisy tajne z dzienników wszędzie tam, gdzie to możliwe, ale nie jest niezawodna. Unikaj powtarzania wpisów tajnych w konsoli, używania ich w parametrach wiersza polecenia lub rejestrowania ich w plikach. Należy zachować ostrożność podczas korzystania z poleceń interfejsu wiersza polecenia platformy Azure, które wyświetlają poufne informacje. Użyj elementu , a jeśli chcesz pobrać wpis tajny z wywołania interfejsu None output format
wiersza polecenia platformy Azure, Use none output format and retrieve security information to a secret variable
.
Nie używaj danych strukturalnych jako wpisów tajnych
Unikaj używania formatów danych ustrukturyzowanych, takich jak JSON, XML lub YAML, aby hermetyzować wartości wpisów tajnych, w tym znaki kontrolne, takie jak zwrot karetki, \r
i źródło danych wiersza,\n
. Zamiast tego należy utworzyć poszczególne wpisy tajne dla każdej poufnej wartości. Takie podejście zapewnia lepszą dokładność redaction i minimalizuje ryzyko nieumyślnego ujawnienia poufnych danych.
Inspekcja obsługi wpisów tajnych
Aby przeprowadzić inspekcję sposobu użycia wpisów tajnych w usłudze Azure Pipelines, wykonaj następujące najlepsze rozwiązania:
- Przejrzyj kod źródłowy: Sprawdź kod źródłowy repozytorium hostowania potoku. Aby zapewnić poprawne obsługę wpisów tajnych, sprawdź wszystkie zadania używane w potoku. Na przykład sprawdź, czy wpisy tajne nie są przypadkowo wysyłane do niezamierzonych hostów lub jawnie wydrukowane w celu uzyskania danych wyjściowych dziennika.
- Sprawdź dzienniki uruchamiania: po przetestowaniu prawidłowych i nieprawidłowych danych wejściowych wyświetl dzienniki uruchamiania potoku. Upewnij się, że wpisy tajne są prawidłowo redagowane i nie są ujawniane. Czasami błędy w poleceniach lub narzędziach mogą przypadkowo wyciekać wpisy tajne do dzienników błędów. Podczas gdy usługa Azure Pipelines próbuje wyczyścić wpisy tajne z dzienników, przegląd ręczny jest nadal niezbędny.
Inspekcja i rotacja wpisów tajnych
Aby przeprowadzać inspekcję i obracać wpisy tajne, postępuj zgodnie z następującymi najlepszymi rozwiązaniami:
- Przejrzyj zarejestrowane wpisy tajne: okresowo oceniaj wpisy tajne zarejestrowane w potokach. Upewnij się, że są one nadal niezbędne, i usuń wszystkie, które nie są już potrzebne, co pomaga zmniejszyć bałagan i potencjalne zagrożenia bezpieczeństwa.
- Obracanie wpisów tajnych: Regularnie obracaj wpisy tajne, aby zminimalizować przedział czasu, w którym można wykorzystać naruszony wpis tajny. Okresowo zmieniając wpisy tajne, zwiększasz bezpieczeństwo.
- Wybieranie właściwej metody uwierzytelniania
- Używane typy wpisów tajnych:
- Osobiste tokeny dostępu (PATs): te tokeny są używane do uwierzytelniania. Postępuj zgodnie z najlepszymi rozwiązaniami w zakresie zabezpieczeń podczas wybierania odpowiedniej metody uwierzytelniania. Usługi PAT można zarządzać przy użyciu interfejsu API REST.
- Zmienne tajne: użyj zmiennych tajnych, aby bezpiecznie przechowywać poufne informacje, takie jak klucze interfejsu API, hasła lub inne poświadczenia w potoku.
- Wpisy tajne usługi Azure Key Vault: bezpieczne przechowywanie wpisów tajnych i zarządzanie nimi za pomocą usługi Azure Key Vault.
- Połączenia z usługami: te połączenia usług umożliwiają potokowi łączenie się z usługami zewnętrznymi (na przykład Azure, GitHub, Docker Hub). Upewnij się, że konfiguracja i bezpieczna obsługa wpisów tajnych połączenia usługi.
- Używane typy wpisów tajnych:
Korzystanie z szablonów YAML
Zamiast dołączać skrypty wbudowane z parametrami tajnymi bezpośrednio w potoku YAML, użyj szablonów. Takie podejście zwiększa bezpieczeństwo przez abstrakcja poufnych informacji z dala od głównego potoku.
Aby zaimplementować to podejście, utwórz oddzielny plik YAML dla skryptu, a następnie zapisz ten skrypt w osobnym, bezpiecznym repozytorium. Następnie możesz odwołać się do szablonu i przekazać zmienną wpisu tajnego w języku YAML jako parametr. Bezpieczna zmienna powinna pochodzić z usługi Azure Key Vault, grupy zmiennych lub interfejsu użytkownika potoku. Aby uzyskać więcej informacji na temat korzystania z szablonów, zobacz Dokumentację użycia szablonu.
Ograniczanie wpisów tajnych przy użyciu zasad gałęzi i uprawnień grupy zmiennych
Aby upewnić się, że wpisy tajne są powiązane z gałęzią main
i nie są dostępne dla losowych gałęzi, możesz użyć kombinacji uprawnień grupy zmiennych, wstawiania zadań warunkowych i zasad gałęzi.
Za pomocą zasad gałęzi można wymusić zasady walidacji kompilacji, które zezwalają tylko na kompilacje z gałęzi głównej. Następnie możesz użyć uprawnień grupy zmiennych, aby upewnić się, że tylko autoryzowane potoki mają dostęp do wpisów tajnych przechowywanych w grupie zmiennych. Na koniec możesz użyć warunku w potoku, aby upewnić się, że grupa zmiennych może być przywołyana tylko przez wypchnięcie do main
gałęzi.
jobs:
- job: ExampleJob
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo "This runs only for the main branch"
displayName: 'Conditional Step'
variables:
- group: your-variable-group-name