Zarządzanie sekretami GitHub Actions: ochrona kluczy API i haseł w przepływach pracy
By Mirko Peters ·
Dowiedz się, jak zabezpieczyć potoki CI/CD dzięki prawidłowemu korzystaniu z sekretów GitHub Actions. Poznaj najlepsze praktyki bezpiecznego zarządzania kluczami API i tokenami dostępu.
Automatically translated with AI from the original post. Read the English original

Gdy automatyzacja działa całkowicie bez nadzoru w chmurze, bezpieczeństwo poświadczeń staje się kluczowe. Efektywne zarządzanie sekretami GitHub Actions sprawia, że klucze API, hasła do wdrożeń i tokeny dostępu pozostają poza kodem źródłowym, a jednocześnie są łatwo dostępne dla przepływów pracy, które potrzebują ich do budowania i wdrażania projektów.
Najważniejsze wnioski
- Nigdy nie umieszczaj wrażliwych haseł, kluczy API ani tokenów dostępu bezpośrednio w plikach YAML przepływu pracy.
- GitHub udostępnia trzy poziomy sekretów: sekrety repozytorium, sekrety organizacji i sekrety środowiska.
- Sekrety są szyfrowane, zanim jeszcze dotrą do GitHub, i są automatycznie maskowane w dziennikach uruchomień.
- Sekrety środowiska mogą wymuszać ludzkie zatwierdzenie przed udostępnieniem poświadczeń wdrożeniowych zadaniu.
- Zawsze stosuj zasadę najmniejszych uprawnień, przyznając każdemu sekretowi jak najmniejszy zestaw niezbędnych uprawnień.
Dlaczego poświadczenia w postaci jawnego tekstu zawodzą w CI/CD
Programiści, którzy spieszą się z konfiguracją nowego potoku, często kuszą się, by wkleić klucz API bezpośrednio do pliku konfiguracyjnego przepływu pracy. Przecież jeśli przepływ jest prywatny, kto go zobaczy? Takie podejście wprowadza poważne luki w zabezpieczeniach. Pliki przepływów pracy są objęte kontrolą wersji, co oznacza, że każda historyczna wersja, commit i gałąź trwale przechowują wszystko, co zapisano w tych dokumentach YAML.
Ponadto repozytoria często zmieniają uprawnienia, przechodzą z trybu prywatnego na publiczny lub są forkowane przez współtwórców. Jeśli poświadczenia są zapisane jako zwykły tekst w plikach konfiguracyjnych, pojedynczy błąd w uprawnieniach może odsłonić całe środowisko produkcyjne. Traktowanie plików konfiguracyjnych wyłącznie jako instrukcji, a wrażliwych danych przechowywanie w zaszyfrowanym, oddzielonym magazynie, to podstawowa zasada nowoczesnego bezpieczeństwa w chmurze.
Trzy poziomy sekretów GitHub
GitHub uwzględnia, że różne poświadczenia mają różny zakres. Aby ułatwić programistom efektywne zarządzanie kontrolą dostępu, platforma umożliwia konfigurację sekretów na trzech odrębnych poziomach organizacyjnych.
Sekrety na poziomie repozytorium
Sekrety repozytorium należą wyłącznie do jednego projektu. Jeśli tworzysz samodzielną aplikację lub zarządzasz pojedynczą wtyczką, sekret repozytorium zabezpiecza ciągi połączeń i tokeny wdrożeniowe w obrębie tej konkretnej przestrzeni roboczej. Nie mogą mieć do nich dostępu inne projekty w Twojej organizacji.
Sekrety na poziomie organizacji
Gdy wiele repozytoriów w firmie musi korzystać z tych samych zasobów współdzielonych, na przykład centralnego rejestru kontenerów lub korporacyjnego certyfikatu do podpisywania kodu, sekrety organizacji pozwalają uniknąć duplikowania wpisów. Administratorzy mogą definiować zasady i wskazywać konkretne repozytoria lub zespoły uprawnione do dziedziczenia tych poświadczeń obowiązujących w całej organizacji.
Sekrety na poziomie środowiska
Sekrety środowiska wiążą poświadczenia z konkretnymi celami wdrożeniowymi, takimi jak środowiska staging lub produkcja. To tutaj przechowujesz klucze potrzebne do pracy z systemami produkcyjnymi. Co istotne, sekrety środowiska pozwalają skonfigurować wymaganych recenzentów, dzięki czemu człowiek musi ręcznie zatwierdzić uruchomienie wdrożenia, zanim poświadczenia produkcyjne zostaną udostępnione runnerowi.
Jak GitHub chroni Twoje dane w trakcie przesyłania
Bezpieczeństwo nie ogranicza się do miejsca przechowywania wpisów tajnych. Ważne jest również to, jak są one przesyłane podczas wykonywania przepływu pracy. Wpisy tajne są szyfrowane na lokalnym komputerze, zanim zostaną przesłane do GitHub, dzięki czemu nigdy nie trafiają przez sieć w postaci zwykłego tekstu. Po zapisaniu pozostają całkowicie ukryte w interfejsie ustawień repozytorium.
Gdy przepływ pracy się uruchamia, musisz jawnie przekazać wpis tajny do kroku lub akcji, podając jego nazwę w składni wyrażeń, na przykład ${{ secrets.DATABASE_URL } }. Oznacza to, że przypadkowa lub złośliwa akcja z zewnętrznego Marketplace nie może samodzielnie sięgnąć po wszystkie poświadczenia w repozytorium. Otrzymuje wyłącznie to, co jawnie jej przekażesz.
Ponadto GitHub automatycznie skanuje dzienniki wyjściowe zadań i maskuje wrażliwe ciągi znaków. Jeśli skrypt przypadkowo wypisze wartość wpisu tajnego do konsoli, GitHub próbuje zastąpić znaki gwiazdkami. Skrypty mogą jednak modyfikować lub kodować ciągi znaków przed ich wypisaniem, dlatego samo maskowanie w dziennikach nie zastąpi pisania bezpiecznego kodu.
Najlepsze praktyki bezpiecznej automatyzacji
Skuteczne zarządzanie wpisami tajnymi w GitHub Actions wymaga przyjęcia określonych codziennych nawyków. Po pierwsze zawsze rozróżniaj ustawienie konfiguracyjne od wpisu tajnego. Jeśli wartość jest po prostu publicznym adresem witryny, nazwą środowiska lub niewrażliwą flagą funkcji, zapisz ją jako zwykły tekst w pliku YAML, aby zespół mógł łatwo odczytać, jak działa potok. Funkcję wpisów tajnych stosuj wyłącznie do danych, które muszą pozostać poufne.
Po drugie stosuj zasadę najmniejszych uprawnień. Generuj szczegółowe tokeny dostępu o możliwie najkrótszym czasie ważności i najwęższym zakresie uprawnień. Jeśli token wdrożeniowy potrzebuje zapisu tylko w jednym konkretnym zasobniku S3, nie przyznawaj mu uprawnień administracyjnych do całej infrastruktury chmurowej.
Podsumowanie
Opanowanie zarządzania wpisami tajnymi w GitHub Actions przekształca potoki CI/CD z potencjalnych zagrożeń bezpieczeństwa w solidne silniki automatyzacji klasy korporacyjnej. Oddzielając poświadczenia od kodu i stosując wielopoziomowe kontrole dostępu, możesz szybko wdrażać oprogramowanie, nie rezygnując przy tym z bezpieczeństwa.
Aby poznać podstawy tworzenia zautomatyzowanych przepływów pracy, zapoznaj się z Posłuchaj całego odcinka. Zapraszamy do wysłuchania pełnej dyskusji, aby dowiedzieć się więcej o konfigurowaniu wyzwalaczy, zadań i runnerów dla nowoczesnego środowiska chmurowego!
Często zadawane pytania
Czy mogę odczytać wpis tajny GitHub Actions w żądaniu ściągnięcia z forka?
Domyślnie GitHub uniemożliwia żądaniom ściągnięcia pochodzącym od zewnętrznych współpracowników (forków) dostęp do wpisów tajnych repozytorium. Chroni to przed uruchomieniem złośliwego kodu i kradzieżą poświadczeń.
Jak przekazać wpis tajny z przepływu pracy do konkretnego kroku?
Wpisy tajne przekazujesz do przepływu pracy, korzystając z kontekstu „env” w kroku lub zadaniu, i mapując wpis tajny GitHub na zmienną środowiskową, na przykład env: API_KEY: ${{ secrets.MY_API_KEY } }.
Czy wpisy tajne GitHub Actions są na pewno ukryte w dziennikach?
GitHub automatycznie maskuje znane wartości wpisów tajnych w dziennikach wykonania, nie jest to jednak absolutna gwarancja. Jeśli wartość wpisu tajnego zostanie zmodyfikowana, zakodowana lub przekształcona przed wypisaniem, jej części mogą zostać ujawnione.
Czym różnią się wpisy tajne repozytorium od wpisów tajnych środowiska?
Wpisy tajne repozytorium są dostępne dla każdego przepływu pracy w danym repozytorium, natomiast wpisy tajne środowiska są powiązane z określonymi środowiskami wdrożeniowymi (na przykład testowym lub produkcyjnym) i mogą wymagać ręcznego zatwierdzenia.