Close

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

Zdjęcie portretowe Simona Maple'a
Simon Maple

Terenowy dyrektor ds. technicznych w Snyk

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

Godzina

5 minut czytania.

Publiczność

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

Wymagania wstępne

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ę i 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.

Wykrzyknik

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_THRESHOLD i DONT_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.

Zobacz więcej integracji dla Atlassian Open DevOps

Simon Maple
Simon Maple

Simon Maple is the Field CTO at Snyk, a Java Champion since 2014, Virtual JUG founder, and London Java Community co-leader. He is an experienced speaker, with a passion for community. When not traveling, Simon enjoys spending quality time with his family, cooking and eating great food.


Udostępnij ten artykuł
Następny temat

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność DevOps

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Ilustracja przedstawiająca mapę

Zacznij korzystać za darmo

Zapisz się do newslettera DevOps

Thank you for signing up