Artykuły
Samouczki
Interaktywne przewodniki
Integracja Snyk i Bitbucket Pipelines w celu wdrażania kultury DevSecOps
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
.
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
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
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.