top of page

Śledź nasze wpisy w social media

  • Instagram
  • Facebook
  • Twitter
  • LinkedIn
  • YouTube
  • Zdjęcie autoraPiotr Kośka

Checkov - zastosowanie narzędzia do analizy infrastruktury jako kodu



W dzisiejszych czasach, kiedy rośnie znaczenie infrastruktury jako kodu (IaC - Infrastructure as Code) w praktykach DevOps, kluczowe jest, aby utrzymać wysoki poziom bezpieczeństwa i jakości kodu. W odpowiedzi na te potrzeby powstało narzędzie o nazwie Checkov, które od swojego powstania zyskało szerokie uznanie w środowisku deweloperskim. W niniejszym artykule przyjrzymy się historii tego narzędzia oraz zastosowaniom, do których jest wykorzystywane.


Checkov został stworzony przez firmę Bridgecrew, startup założony w 2019 roku, który specjalizuje się w tworzeniu narzędzi do automatyzacji bezpieczeństwa i zarządzania infrastrukturą jako kodem. Bridgecrew zauważył, że wiele narzędzi do analizy statycznej kodu źródłowego (SAST) nie radziło sobie z wykrywaniem potencjalnych zagrożeń bezpieczeństwa w kodzie IaC. W odpowiedzi na te niedostatki powstał Checkov, który miał za zadanie zaspokoić rosnące potrzeby deweloperów w zakresie analizy bezpieczeństwa kodu IaC.


Checkov został oficjalnie opublikowany w grudniu 2019 roku jako narzędzie open-source dostępne na licencji Apache 2.0. Od tego czasu zyskał ogromne uznanie w społeczności deweloperskiej, a liczba jego użytkowników stale rośnie.





Główne zastosowania Checkov


Checkov jest narzędziem do analizy statycznej kodu źródłowego, które sprawdza konfigurację IaC pod kątem (nie)zgodności z najlepszymi praktykami w zakresie bezpieczeństwa, zgodności i wydajności. Narzędzie to obsługuje wiele popularnych formatów IaC, takich jak Terraform, CloudFormation, Kubernetes, Serverless Framework, AWS CDK i inne.


Bezpieczeństwo


Checkov pozwala deweloperom na wykrywanie potencjalnych zagrożeń bezpieczeństwa w ich konfiguracjach IaC. Narzędzie porównuje konfiguracje z zasadami zdefiniowanymi w ramach polityk bezpieczeństwa. Jeśli Checkov znajdzie jakiekolwiek niezgodności, generuje raport wskazujący problematyczne miejsca, co umożliwia szybką identyfikację i naprawę potencjalnych zagrożeń. Polityki są oparte na wytycznych CIS (Center for Internet Security) i innych standardach branżowych, co zapewnia wykrywanie aktualnych zagrożeń.


Zgodność


Wraz z rosnącą liczbą przepisów dotyczących ochrony danych, takich jak GDPR, HIPAA czy CCPA, przedsiębiorstwa muszą dbać o zgodność swojej infrastruktury z obowiązującymi regulacjami. Checkov sprawdza, czy konfiguracje IaC są zgodne z wymogami zgodności, co pomaga w utrzymaniu wysokich standardów i minimalizacji ryzyka naruszenia przepisów.


Wydajność


Oprócz sprawdzania zgodności z politykami bezpieczeństwa i zgodności, Checkov pozwala na optymalizację infrastruktury pod kątem wydajności. W rezultacie można znacznie zmniejszyć koszty operacyjne, przyspieszyć wdrażanie aplikacji oraz ułatwić zarządzanie infrastrukturą.


Integracja z narzędziami CI/CD


Checkov może być zintegrowany z różnymi narzędziami ciągłej integracji i dostarczania (CI/CD), takimi jak Jenkins, GitLab, GitHub Actions czy CircleCI. Integracja z narzędziami CI/CD pozwala na automatyczne sprawdzanie konfiguracji IaC podczas procesu wdrażania, co zapewnia bieżącą kontrolę jakości i bezpieczeństwa.


Własne polityki


Deweloperzy mogą tworzyć własne polityki sprawdzające, które są dostosowane do ich specyficznych potrzeb. Dzięki temu możliwe jest zapewnienie, że konfiguracje IaC są zgodne z wewnętrznymi wymogami przedsiębiorstwa.


Przełączniki polecenia Checkov


  • -d, --directory: Określa katalog, w którym Checkov przeprowadzi analizę. Można go użyć, gdy chcesz przetestować tylko część swojej infrastruktury. Przykład:

checkov -d my_terraform_module/


  • -f, --file: Określa pojedynczy plik do analizy. Przydatne, gdy chcesz przetestować tylko konkretny plik IaC. Przykład:

checkov -f my_terraform_file.tf

  • -c, --check: Wykonuje tylko wybrane sprawdzenia. Przydatne, gdy chcesz skupić się na konkretnych zagadnieniach bezpieczeństwa lub zgodności. Przykład:

checkov -c CKV_AWS_20,CKV_AWS_23

  • --skip-check: Pomija wybrane sprawdzenia. Można go użyć, gdy chcesz zignorować konkretne zasady, które uważasz za nieistotne dla swojego projektu. Przykład:

checkov --skip-check CKV_AWS_20,CKV_AWS_23


  • --output: Określa format raportu wynikowego. Domyślnie wyniki są wyświetlane jako tekst konsoli, ale Checkov obsługuje również inne formaty, takie jak JSON, JUnit XML, CSV, GitHub Markdown i SARIF. Przykład:

checkov --output json


  • --output-file: Zapisuje raport wynikowy do pliku. Przydatne, gdy chcesz zachować wyniki analizy dla dalszego przetwarzania lub przeglądania. Przykład:

checkov --output-file checkov_report.json


  • --quiet: Ukrywa wyniki analizy w konsoli, pokazując jedynie informacje o powodzeniu lub niepowodzeniu. Przydatne, gdy chcesz skupić się tylko na ogólnym wyniku analizy. Przykład:

checkov --quiet


  • --external-checks-dir: Określa katalog z dodatkowymi zasadami sprawdzania. Można go użyć, gdy chcesz dodać własne, niestandardowe zasady do analizy Checkov. Przykład:

checkov --external-checks-dir my_custom_checks/


  • --framework: Określa ramy, na których ma się skupić Checkov. Przydatne, gdy chcesz ograniczyć analizę do konkretnego języka IaC lub platformy. Przykład:

checkov --framework terraform

  • --download-external-modules: Pobiera zewnętrzne moduły Terraform przed wykonaniem analizy. Niezbędne, gdy analizowany kod Terraform korzysta z modułów zewnętrznych. Przykład:

checkov --download-external-modules


  • --repo-root-for-plan-enforcement: Określa ścieżkę do głównego katalogu repozytorium. Używane wraz z --download-external-modules, umożliwia analizę kodu Terraform, który zawiera odwołania do zewnętrznych modułów, stosując do nich lokalne zasady. Przykład:

checkov --repo-root-for-plan-enforcement . --download-external-modules


  • --soft-fail: Pozwala zakończyć analizę Checkov kodem wyjścia 0, nawet jeśli niektóre sprawdzenia nie powiodły się. Przydatne, gdy chcesz uniknąć przerwania procesu CI/CD z powodu niepowodzenia sprawdzeń Checkov. Przykład:

checkov --soft-fail



Zastosowanie przełączników polecenia Checkov


Przełączniki polecenia Checkov umożliwiają elastyczność w zakresie konfiguracji analizy infrastruktury jako kodu. Można je stosować w różnych scenariuszach, takich jak:


  1. Skupienie się na konkretnych zagadnieniach bezpieczeństwa lub zgodności, ograniczając analizę do wybranych zasad.

  2. Ignorowanie nieistotnych sprawdzeń lub tych, które zostały już zaakceptowane jako wyjątki.

  3. Zapisywanie wyników analizy w formacie JSON, CSV lub innych, umożliwiając ich dalsze przetwarzanie przez inne narzędzia lub przeglądanie przez zespół.

  4. Rozszerzenie zestawu zasad sprawdzania o własne, niestandardowe zasady, które są istotne dla projektu.

Checkov to potężne narzędzie do statycznej analizy infrastruktury jako kodu, które oferuje szeroką gamę przełączników polecenia, umożliwiających elastyczną konfigurację analizy. Przełączniki te pozwalają na dostosowanie Checkov do indywidualnych potrzeb projektu i zespołu, zwiększając efektywność analizy i łatwość zarządzania infrastrukturą. Wykorzystanie przełączników polecenia Checkov pozwala na lepsze wykorzystanie możliwości narzędzia i osiągnięcie szybszego rozwoju oraz wyższego poziomu bezpieczeństwa w projektach opartych na infrastrukturze jako kodzie.





W praktyce przełączniki polecenia Checkov są często używane w procesach CI/CD, gdzie różne zespoły mogą wymagać różnych konfiguracji sprawdzeń. Integracja Checkov z narzędziami takimi jak Jenkins, GitHub Actions czy GitLab CI pozwala na automatyczne uruchamianie analizy zgodności i bezpieczeństwa w trakcie procesu wdrażania.


Wprowadzenie przełączników polecenia Checkov do procesu CI/CD pozwala na wykrywanie potencjalnych problemów związanych z bezpieczeństwem, zgodnością i wydajnością na wczesnym etapie procesu wdrażania. Dzięki temu zespoły mogą szybko reagować na wykryte problemy i zminimalizować ryzyko wprowadzenia błędów do środowiska produkcyjnego. Ponadto, stosowanie przełączników Checkov umożliwia dostosowanie analizy do indywidualnych potrzeb zespołu oraz lepsze zarządzanie wyjątkami i niestandardowymi zasadami.


Wykorzystując te przełączniki, zespoły deweloperskie mogą uzyskać większą kontrolę nad analizą infrastruktury jako kodu, lepiej dostosowując narzędzie do swoich potrzeb i wymagań. W efekcie, Checkov staje się jeszcze bardziej wartościowym narzędziem w arsenale praktyk DevOps, pomagając zespołom w osiągnięciu wyższego poziomu jakości i bezpieczeństwa w ich projektach.




Checkov - troche praktycznie


W erze DevOps, automatyzacja procesów związanych z jakością i bezpieczeństwem kodu jest kluczowa dla sukcesu każdego projektu. Zobaczymy, jak zintegrować narzędzie Checkov z popularnym systemem ciągłej integracji Jenkins, aby automatycznie sprawdzać konfigurację infrastruktury jako kodu (IaC) podczas procesu budowy i wdrażania. Przygotowaliśmy również przykłady konfiguracji, które pomogą wdrożyć tę integrację w praktyce.


Integracja Checkov z Jenkins


Aby zintegrować Checkov z Jenkins, należy wykonać następujące kroki




Instalacja Checkov


Zainstaluj Checkov na maszynie, na której działa Jenkins, korzystając z jednej z dostępnych metod instalacji. Możesz użyć pip (Python Package Manager) lub innego menedżera pakietów, takiego jak Docker. Poniżej znajduje się przykład instalacji Checkov za pomocą pip:


Konfiguracja Jenkins


Po zainstalowaniu Checkov na maszynie z Jenkins, przystąp do konfiguracji Jenkins, aby uruchamiać Checkov podczas budowy projektu. Aby to zrobić, wykonaj następujące kroki:


  1. Utwórz nowy projekt w Jenkins lub edytuj istniejący, do którego chcesz dodać Checkov.

  2. W sekcji "Build" (Budowa) projektu, dodaj nowe zadanie "Execute shell" (Wykonaj polecenia powłoki) lub "Execute Windows batch command" (Wykonaj polecenia wsadowe Windows) w zależności od używanego systemu operacyjnego.

  3. W polu "Command" (Polecenie) dla nowo dodanego zadania, wprowadź polecenie, które uruchomi Checkov dla Twojego projektu. Poniżej znajduje się przykład dla projektu Terraform:


Zastąp <ścieżka_do_katalogu_z_kodem> rzeczywistą ścieżką do katalogu zawierającego pliki konfiguracyjne IaC.


Jeśli chcesz, aby wynik analizy Checkov był dostępny jako artefakt budowy, dodaj następujący kod do polecenia:


Ten fragment spowoduje zapisanie wyników analizy Checkov do pliku o nazwie checkov_report.json.


  • W sekcji "Post-build Actions" (Działania po budowie) projektu, dodaj nową akcję "Archive the artifacts" (Archiwizuj artefakty), a następnie wprowadź nazwę pliku z wynikami analizy (w tym przypadku checkov_report.json) w polu " Files to archive" (Pliki do archiwizacji). Dzięki temu plik z wynikami analizy Checkov zostanie zarchiwizowany jako artefakt po zakończeniu budowy.


Uruchomienie i monitorowanie wyników


Po zakończeniu konfiguracji Jenkins, uruchom budowę projektu. Jenkins automatycznie uruchomi Checkov wraz z innymi zadaniami, a wynik analizy Checkov będzie dostępny jako artefakt budowy. Możesz monitorować postęp budowy i sprawdzić wynik analizy Checkov w zakładce "Console Output" (Wyjście konsoli) dla danej budowy.


W przypadku wykrycia niezgodności z zasadami bezpieczeństwa, zgodności lub wydajności, Checkov zwróci błąd i budowa zostanie oznaczona jako nieudana. Dzięki temu zespół deweloperski może szybko zidentyfikować i naprawić problemy, zanim zostaną wprowadzone do środowiska produkcyjnego.


Przykład: Integracja Checkov z Jenkins dla projektu Terraform


Poniżej znajduje się przykład konfiguracji zadania Jenkins dla projektu Terraform z użyciem Checkov:


W powyższym przykładzie, Checkov analizuje pliki konfiguracyjne Terraform w katalogu ./terraform i zapisuje wynik analizy do pliku checkov_report.json.


Terraform i IaC


Automatyzacja procesu wdrażania infrastruktury jest kluczowa dla osiągnięcia szybkości i niezawodności w praktykach DevOps. Zobaczymy, jak zintegrować Terraform z Jenkins, aby automatycznie wdrażać maszyny wirtualne w chmurze DigitalOcean. Przedstawimy sposób konfiguracji trzech połączonych ze sobą zadań Jenkins, które odpowiednio wykonają polecenia terraform validate, terraform plan oraz terraform apply.


Przygotowanie środowiska


Upewnij się, że masz zainstalowany Terraform oraz Jenkins na swojej maszynie.

Skonfiguruj dostęp do swojego konta DigitalOcean, tworząc token API i przechowując go jako zmienną środowiskową DIGITALOCEAN_TOKEN na maszynie, na której działa Jenkins.

Utwórz prosty projekt Terraform, który tworzy maszynę wirtualną w DigitalOcean. Przykładowy plik main.tf może wyglądać tak:

Utwórz plik variables.tf z definicją zmiennej do_token:

Konfiguracja Jenkins


  • Job 1: Terraform Validate

    1. Utwórz nowy zadanie typu "Pipeline" o nazwie "terraform-validate".

    2. W sekcji "Pipeline", wybierz "Pipeline script" i wpisz następujący kod:


  • Job 2: Terraform Plan

    1. Utwórz kolejne zadanie typu "Pipeline" o nazwie "terraform-plan".

    2. W sekcji "Pipeline", wybierz "Pipeline script" i wpisz następujący kod:


  • Job 3: Terraform Apply

    1. Utwórz ostatnie zadanie typu "Pipeline" o nazwie "terraform-apply".

    2. W sekcji "Pipeline", wybierz "Pipeline script" i wpisz następujący kod:

Uruchomienie procesu


Po skonfigurowaniu wszystkich zadań Jenkins, uruchom zadanie "terraform-validate". Jeśli walidacja kodu Terraform przebiegnie pomyślnie, automatycznie zostaną uruchomione zadania "terraform-plan" i "terraform-apply", które odpowiednio zapiszą plan działania Terraform do pliku tfplan oraz zastosują plan/apply w celu utworzenia maszyny wirtualnej w DigitalOcean.


Dodanie checkov do konfiguracji


Job: Checkov Analysis

a. Utwórz nowe zadanie typu "Pipeline" o nazwie "checkov-analysis".

b. W sekcji "Pipeline", wybierz "Pipeline script" i wpisz następujący kod:


Aktualizacja pozostałych zadań Jenkins

a. Edytuj zadanie "terraform-validate" i dodaj sekcję triggers, która wygląda następująco:


Wykonaj podobne zmiany w zadaniach "terraform-plan" i "terraform-apply", dodając sekcję triggers z odpowiednimi wartościami upstreamProjects (odpowiednio "terraform-validate" i "terraform-plan").


Po skonfigurowaniu wszystkich zadań Jenkins, uruchom zadanie "checkov-analysis". Jeśli analiza Checkov zakończy się powodzeniem, kolejno zostaną uruchomione zadania "terraform-validate", "terraform-plan" i "terraform-apply", które odpowiednio zwalidują, zaplanują i wdrożą infrastrukturę za pomocą Terraform.


W przypadku wykrycia niezgodności z zasadami bezpieczeństwa, zgodności lub wydajności przez Checkov, zadanie "checkov-analysis" zakończy się niepowodzeniem, a raport z wynikami analizy zostanie zarchiwizowany jako artefakt. Pozostałe zadania Terraform nie zostaną uruchomione, dopóki nie zostaną naprawione wykryte problemy.


Podsumowanie


W niniejszym artykułu przedstawiliśmy, Checkov oraz jak dodać analizę Checkov do procesu automatyzacji wdrażania maszyn wirtualnych w chmurze DigitalOcean za pomocą Terraform i Jenkins. Integracja Checkov z Jenkins umożliwia automatyczne sprawdzanie konfiguracji infrastruktury jako kodu podczas procesu budowy i wdrażania, co zwiększa efektywność, niezawodność oraz bezpieczeństwo.


Dzięki dodaniu warstwy walidacji bezpieczeństwa i zgodności za pomocą Checkov, zespoły deweloperskie mogą utrzymać wysoką jakość i bezpieczeństwo kodu, jednocześnie skracając czas potrzebny na identyfikację i naprawę problemów. Ponadto integracja Checkov z Terraform i Jenkins pozwala na łatwe zarządzanie i monitorowanie procesu automatyzacji, co przyczynia się do poprawy jakości i bezpieczeństwa wdrażanej infrastruktury.


Całkowity proces automatyzacji, obejmujący analizę Checkov oraz walidację, planowanie i wdrażanie infrastruktury za pomocą Terraform, umożliwia zespołom deweloperskim pełne wykorzystanie zalet infrastruktury jako kodu i praktyk DevOps, jednocześnie redukując ryzyko wprowadzenia błędów do środowiska produkcyjnego.


Oczywiscie więcej takich przykładów w kursie terraform na platformie Szkolenia.Cloud

Ostatnie posty

Zobacz wszystkie

Śledź nasze wpisy w social media

  • Instagram
  • Facebook
  • Twitter
  • LinkedIn
  • YouTube

Poznaj terraform jedno z najepszych narzedzi do zarządzania infrastrukturą w kodzie (IaC) - w kursie tym przeprowadzam Cię przez proces instalacji i konfiguracji tego narzędzia.

bottom of page