Integracja Snyk i Bitbucket Pipelines w celu wdrażania kultury DevSecOps

Wdrażaj kulturę DevSecOps poprzez integrację rozwiązania Snyk z systemami Bitbucket Pipelines i Jira.

Czas

5 minut czytania.

Publiczność

Programiści, zespoły ds. zabezpieczeń/aplikacji oraz inżynierowie DevOps/DevSecOps.

WARUNEK WSTĘPNY

Masz konto Snyk. Zacznij tutaj.

Masz konto Atlassian Bitbucket. Zaloguj się tutaj lub zacznij tutaj.

W tym samouczku opisano, jak zabezpieczyć przepływ pracy przy kompilacji w Bitbucket Pipelines za pomocą rozwiązania Snyk. Ważnym krokiem w zabezpieczeniu środowiska jest skanowanie i analizowanie zarówno aplikacji, jak i projektu kontenera opartego na systemie Linux pod kątem znanych luk w zabezpieczeniach, co ułatwia identyfikację i niwelowanie takich luk. Ćwiczenia przedstawione w tym samouczku pomogą zabezpieczyć aplikacjękontener za pomocą aplikacji Snyk Pipe for Bitbucket Pipelines przeznaczonej do skanowania pliku manifestu aplikacji i obrazu bazowego kontenera pod kątem ich zależności. 

Samouczek Jak Snyk i Bitbucket Cloud umożliwiają tworzenie kultury DevSecOps dotyczył przede wszystkim zależności aplikacji. Jednak skanowanie obrazu bazowego kontenera pozwala również wykryć: 

  • pakiety systemu operacyjnego (OS) zainstalowane i zarządzane przez menedżera pakietów,

  • kluczowe pliki binarne — warstwy, które nie zostały zainstalowane za pośrednictwem menedżera pakietów.

Na podstawie tych wyników system Snyk udziela porad i wskazówek, przedstawiając między innymi:

  • pochodzenie luk w zabezpieczeniach w pakietach systemu operacyjnego i kluczowych plikach binarnych,

  • szczegóły uaktualnień obrazu bazowego lub zalecenie ponownej kompilacji obrazu,

  • warstwę pliku Dockerfile zawierającą pakiet, którego dotyczy problem,

  • stałą wersję pakietów systemu operacyjnego i kluczowych plików binarnych.

Skanowanie aplikacji w systemie Bitbucket Pipeline

Plik bitbucket-pipelines.yml definiuje Twoją konfigurację kompilacji Bitbucket Pipelines. Jeśli jesteś nowym użytkownikiem Bitbucket Pipelines, tutaj dowiesz się więcej na temat rozpoczęcia pracy.

Ten samouczek zawiera przykładowy plik bitbucket-pipelines.yml zawierający poszczególne kroki zmapowane do przepływu pracy. Zaczniemy od przeskanowania aplikacji, skompilowania obrazu kontenera Docker, a następnie przeskanowania tego obrazu kontenera. Poniżej przedstawiono szczegóły dotyczące etapu skanowania aplikacji:

scan-app: &scan-app
 - step:
     name: "Scan open source dependencies"
     caches:
       - node
     script:
       - pipe: snyk/snyk-scan:0.4.3
         variables:
           SNYK_TOKEN: $SNYK_TOKEN
           LANGUAGE: "npm"
           PROJECT_FOLDER: "app/goof"
           TARGET_FILE: "package.json"
           CODE_INSIGHTS_RESULTS: "true"
           SEVERITY_THRESHOLD: "high"
           DONT_BREAK_BUILD: "true"
           MONITOR: "false"

W tym przykładzie przeprowadzono skanowanie aplikacji przy użyciu pipe'u Snyk Scan w pipeline'ie. Źródło zawiera pełną definicję YAML wszystkich obsługiwanych zmiennych, ale do wykonania tej czynności niezbędne są tylko te, które zawarto w przedstawionym fragmencie kodu.

Przyjrzyjmy się teraz kilku z nich:

1. SNYK_TOKEN przekazywany jest do pipe'u jako zmienna repozytorium zdefiniowana uprzednio w module konfiguracji [Bitbucket Configuration].

2. PROJECT_FOLDER to zmienna oznaczająca folder, w którym znajduje się projekt i zazwyczaj jest to folder domyślny zapisu projektu. Jednak w tym przykładzie możemy ustawić folder app/goof i przekazać zapis jako artefakt do innych kroków w innych pipeline'ie.

3. CODE_INSIGHTS_RESULTS domyślnie przyjmuje wartość false. Jednak chcemy utworzyć raport Code Insight zawierający wyniki testu Snyk, dlatego trzeba ustawić dla tej zmiennej wartość true.

4. SEVERITY_THRESHOLD to zmienna zwracająca zgłoszenia o zadanym lub wyższym od zadanego poziomie. Wartość domyślna to low. Jednak w tym przypadku interesuje nas wyłącznie wartość high, dlatego trzeba odpowiednio zdefiniować tę zmienną.

5. Domyślna wartość zmiennej DONT_BREAK_BUILD to false i wartość ta jest oczekiwana. W normalnych okolicznościach należy przerwać kompilację w razie wykrycia problemów. Jednak na potrzeby tego ćwiczenia ustaw dla tej zmiennej wartość true.

Za pomocą nowej aplikacji Snyk Security Connect dostępnej w sklepie Atlassian Marketplace można uruchomić skanowanie zabezpieczeń Snyk na pull requestach, a następnie wyświetlić wyniki w aplikacji Code Insights. Rozpoczęcie pracy jest łatwe, a do zainstalowania aplikacji wystarczy kilka kliknięć.

Skanowanie obrazów kontenerów

Schemat procesu w Bitbucket

Do 2022 roku ponad 75 procent organizacji globalnych będzie korzystało ze skonteneryzowanych aplikacji w środowisku produkcyjnym (Gartner). Powszechnemu wdrażaniu tego rodzaju rozwiązania towarzyszył gwałtowny wzrost liczby luk w zabezpieczeniach kontenerów. W 2018 roku odnotowano czterokrotny wzrost liczby zgłaszanych luk w zabezpieczeniach systemów operacyjnych. Mimo to 80 procent programistów twierdzi, że nie testuje swoich obrazów kontenerowych w trakcie prac programistycznych. Twierdzą, że nie należy to do ich obowiązków lub są przyzwyczajeni, że ktoś na dalszych etapach procesu wychwytuje błędy, co w przypadku dynamicznie rozwijających się firm utrudnia skalowanie bezpieczeństwa kontenerów.

Skanowanie obrazu kontenerów w Twoim pipeline'ie

Podobnie jak w poprzedniej sekcji dotyczącej skanowania aplikacji, tak i tutaj skoncentrujemy się na skonfigurowaniu pliku bitbucket-pipelines.yml pod kątem kompilacji obrazu kontenera Docker na potrzeby aplikacji, skanowaniu obrazu oraz wypychaniu tego obrazu do rejestru. Poniżej bardziej szczegółowo opisano etap skanowania obrazu kontenera:

scan-push-image: &scan-push-image
 - step:
     name: "Scan and push container image"
     services:
       - docker
     script:
       - docker build -t $IMAGE ./app/goof/
       - docker tag $IMAGE $IMAGE:${BITBUCKET_COMMIT}
       - pipe: snyk/snyk-scan:0.4.3
         variables:
           SNYK_TOKEN: $SNYK_TOKEN
           LANGUAGE: "docker"
           IMAGE_NAME: $IMAGE
           PROJECT_FOLDER: "app/goof"
           TARGET_FILE: "Dockerfile"
           CODE_INSIGHTS_RESULTS: "true"
           SEVERITY_THRESHOLD: "high"
           DONT_BREAK_BUILD: "true"
           MONITOR: "false"

W przykładzie przedstawiono kompilację obrazu kontenera, jego otagowanie, a następnie przeprowadzenie jego skanowania za pomocą pipe'u Snyk Scan w pipeline'ie. Zachowaj te same wartości dla zmiennych CODE_INSIGHTS_RESULTS, SEVERITY_THRESHOLDDONT_BREAK_BUILD. Przykład przekazuje również kilka dodatkowych obsługiwanych zmiennych właściwych dla pipe'u Snyk, które pozwalają zinterpretować żądanie jako skanowanie obrazu kontenera, a nie skanowanie aplikacji. Operacje są następujące: ustawienie dla zmiennej LANGUAGE opcji docker, zadeklarowanie nazwy w zmiennej IMAGE_NAME oraz przekazanie odpowiedniej zmiennej repozytorium, a także ustawienie dla zmiennej TARGET_FILE wartości Dockerfile.

Twój pipeline przeskanuje teraz obraz kontenera pod kątem znanych luk w zabezpieczeniach, a także kod aplikacji.

Polecane dla Ciebie

Społeczność DevOps

Ścieżka szkoleniowa DevOps

Zacznij korzystać bezpłatnie