Cyber Security Academy · Lekcja

Zabezpieczanie potoków CI/CD

Wzmacnianie zabezpieczeń ścieżki budowania i wydawania

Lekcja 4 z 413 kroki

Zabezpieczanie potoków CI/CD to bezpłatna lekcja Cyber Security Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cyber Security Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Potok jako cel ataku

Potok CI/CD ma uprzywilejowany dostęp do kodu źródłowego, sekretów i środowiska produkcyjnego. Przejęcie nad nim kontroli pozwala atakującemu wstrzyknąć backdoory do każdej przyszłej kompilacji, omijając przy tym przegląd kodu. To jeden z najcenniejszych celów we współczesnych środowiskach inżynieryjnych.

Potok należy traktować jak infrastrukturę produkcyjną: wymaga takiego samego wzmacniania zabezpieczeń, monitorowania i dyscypliny minimalnych uprawnień jak działające systemy.

Niezaufane dane wejściowe w procesie budowania

Potoki uruchamiają się automatycznie w reakcji na zdarzenia, nad którymi nie mają Państwo pełnej kontroli: pull requesty, tagi i zewnętrzne kontrybucje. Złośliwy pull request może próbować zmienić sam proces budowania.

  • Zatruta definicja potoku w forku może próbować wyprowadzić sekrety
  • Niezaufany kod może działać z tymi samymi uprawnieniami co zaufane kompilacje

Należy rozdzielić zaufane i niezaufane przepływy pracy: nie udostępniać sekretów zadaniom uruchamianym przez zewnętrzne pull requesty.

Przypinanie akcji i obrazów

Etapy potoku często pobierają akcje firm trzecich lub obrazy kontenerów za pomocą mutowalnego tagu. Jeśli tag zostanie przekierowany na złośliwą zawartość, proces budowania zostanie przejęty. Należy przypinać je do niezmiennych digestów.

# BAD: mutable tag can be moved under you
uses: some/action@v3

# GOOD: pinned to an immutable commit SHA
uses: some/action@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0

# pin container steps by digest too
image: build-tools@sha256:9f86d081884c7d659a2feaa0c55ad015...

Minimalne uprawnienia tokenów

Domyślne tokeny potoku często mają zbyt szerokie uprawnienia, zapewniając dostęp do zapisu w całym repozytorium lub rejestrze. Należy ograniczyć ich zakres dokładnie do tego, czego potrzebuje każde zadanie.

# scope the default token to read-only, grant more only where needed
permissions:
  contents: read

jobs:
  publish:
    permissions:
      contents: read
      packages: write   # only this job can publish

Higiena sekretów

Sekrety wpisane na stałe lub szeroko współdzielone są główną drogą wycieku. Należy stosować rygorystyczne zasady:

  • Sekrety należy przechowywać w menedżerze sekretów lub magazynie sekretów CI, nigdy w kodzie
  • Należy preferować krótkotrwałą federację OIDC zamiast statycznych kluczy chmurowych
  • Sekrety należy maskować w logach i blokować ich wypisywanie
  • Każdy sekret należy ograniczyć do minimalnego zestawu zadań i środowisk

Federacja OIDC pozwala potokowi wymienić tożsamość używaną podczas budowania na krótkotrwałe poświadczenia chmurowe, całkowicie eliminując długoterminowe klucze.

Efemeryczne, izolowane runnery

Ponownie używany runner może przenosić złośliwe oprogramowanie lub ujawnione sekrety z jednego zadania do następnego. Efemeryczne runnery są tworzone od nowa dla każdego zadania i niszczone po jego zakończeniu, dzięki czemu nic nie pozostaje.

  • Jedno czyste środowisko dla każdej kompilacji, a następnie jego usunięcie
  • Brak współdzielonego stanu między zadaniami zaufanymi i niezaufanymi
  • Ruch wychodzący z sieci ograniczony do wymaganych punktów końcowych

Bezpośrednio wspiera to cele izolacji SLSA L3.

Ochrona gałęzi źródłowej

Zaufanie do potoku zaczyna się w systemie kontroli wersji. Jeśli każdy może wypchnąć zmiany do gałęzi wydaniowej, podpisywanie i skanowanie na dalszych etapach tracą sens.

  • Wymaganie przeglądu pull requesta przed scaleniem
  • Wymuszanie podpisanych commitów na chronionych gałęziach
  • Wymaganie pomyślnego przejścia kontroli statusu (testów, skanowania)
  • Zabronienie force-push i bezpośredniego wypychania do main
# require signed commits on a branch
git config commit.gpgsign true

# verify a commit signature locally
git verify-commit HEAD

Skanowanie wewnątrz potoku

Należy wbudować mechanizmy kontroli bezpieczeństwa bezpośrednio w CI, aby problemy kończyły kompilację, zamiast trafiać do produkcji.

# secret leak detection
gitleaks detect --source . --redact

# dependency vulnerabilities
osv-scanner --lockfile=package-lock.json

# IaC and config misconfig
trivy config .

# fail the job on critical findings (non-zero exit stops CI)

Kontrola dwuosobowa wydań

Operacje o dużym wpływie wymagają zatwierdzenia przez człowieka. Wdrożenia produkcyjne i zmiany poświadczeń powinny wymagać zatwierdzenia przez inną osobę niż autor.

  • Reguły ochrony środowiska wymagają zatwierdzenia przez recenzenta przed wdrożeniem
  • Należy rozdzielić tożsamość budowania od tożsamości wdrażania
  • Żadna pojedyncza osoba nie może jednocześnie tworzyć kodu i bez przeglądu wypychać go na produkcję

Ogranicza to zarówno ryzyko wewnętrzne, jak i zasięg skutków przejęcia jednego konta.

Audyt i wykrywanie manipulacji

Należy mieć możliwość odtworzenia działań potoku. Jego logi należy scentralizować i chronić.

  • Logi CI należy przesyłać do magazynu z kontrolą dostępu, do którego można wyłącznie dopisywać wpisy
  • Należy rejestrować, kto i kiedy zmieniał definicje potoku
  • Należy generować podpisaną proweniencję, aby artefakty można było prześledzić do konkretnego procesu budowania
  • Należy wysyłać alerty o anomaliach: nowy runner hostowany samodzielnie, nieoczekiwany dostęp do sekretu, zmiana konfiguracji poza procesem przeglądu

Lista kontrolna wzmacniania potoku

Solidny potok łączy mechanizmy kontroli źródła, budowania i wydania:

  • Ochrona gałęzi, commity poddane przeglądowi i podpisane
  • Akcje i obrazy przypięte za pomocą digestu
  • Tokeny OIDC o minimalnych uprawnieniach i krótkim czasie życia
  • Efemeryczne, izolowane runnery
  • Skanowanie sekretów, zależności i konfiguracji w potoku
  • Dwuosobowe zatwierdzanie wydań
  • Podpisane artefakty, SBOM i proweniencja wraz z rejestrowaniem audytowym

Szybki test: uprawnienia tokenów

Proszę określić właściwy mechanizm kontroli dla uprzywilejowanego tokenu budowania.

Podsumowanie: zabezpieczanie potoków CI/CD

Poznali Państwo sposoby wzmacniania całej ścieżki budowania i wydawania.

  • Potok należy traktować jak produkcję; może on wprowadzić backdoory do każdej przyszłej kompilacji
  • Należy izolować niezaufane kompilacje PR od sekretów
  • Należy przypinać akcje i obrazy za pomocą digestu oraz używać krótkotrwałych tokenów OIDC o minimalnych uprawnieniach
  • Należy używać efemerycznych, izolowanych runnerów i chronić gałąź źródłową
  • Należy skanować w potoku, wymagać dwuosobowego zatwierdzania wydań i prowadzić logi audytowe odporne na manipulacje

Kurs ukończony: potrafią już Państwo zabezpieczyć łańcuch dostaw oprogramowania od początku do końca.

Bezpłatny start

Ucz się Cyber Security Academy dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
76
Lekcje
303

Często zadawane pytania

Czy lekcja „Zabezpieczanie potoków CI/CD” jest bezpłatna?

Tak — pełny tekst „Zabezpieczanie potoków CI/CD” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cyber Security Academy, przejdź na CoddyKit PRO. Kurs Cyber Security Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zabezpieczanie potoków CI/CD”?

Wzmacnianie zabezpieczeń ścieżki budowania i wydawania Ćwiczysz Cyber Security Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cyber Security Academy?

Nie wymagamy żadnego doświadczenia. Cyber Security Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Zabezpieczanie potoków CI/CD”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cyber Security Academy?

Tak. Każda lekcja Cyber Security Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zagrożenia łańcucha dostaw
  2. Software Bill of Materials (SBOM)
  3. Podpisywanie zależności i artefaktów
  4. Zabezpieczanie potoków CI/CD
← Powrót do Cyber Security Academy