Close

Bereik DevSecOps met Bitbucket Pipelines en Snyk Pipe

Headshot Simon Maple
Simon Maple

Field CTO bij Snyk

Bereik DevSecOps door Snyk te integreren met Bitbucket Pipelines en Jira.

Tijd

5 minuten lezen.

Publiek

Ontwikkelaars, beveiligings- en toepassingsteams en DevOps/DevSecOps-engineers.

Vereisten

Je hebt een Snyk-account. Ga hier aan de slag.

Je hebt een Atlassian Bitbucket-account. Log hier in of ga hier aan de slag.

In deze tutorial wordt beschreven hoe je je buildworkflow beveiligt op Bitbucket Pipelines met Snyk. Een belangrijke stap bij het beveiligen van je omgeving is het scannen en analyseren van zowel je toepassing als op Linux gebaseerde containerproject op bekende kwetsbaarheden, waarmee je beveiligingsproblemen kunt identificeren en beperken. De oefeningen in deze tutorial helpen bij het beveiligen van je toepassing en container door gebruik te maken van de Snyk Pipe voor Bitbucket Pipelines om het toepassingsmanifestbestand en de container-basisimage te scannen op afhankelijkheden.

De tutorial Hoe Snyk en Bitbucket Cloud DevSecOps mogelijk maken, was gericht op toepassingsafhankelijkheden. Als je echter ook je container-basisimage scant, kun je het volgende detecteren:

  • De pakketten van het besturingssysteem (OS) die zijn geïnstalleerd en beheerd door de pakketbeheerder
  • Belangrijke binaire bestanden: lagen die niet via de pakketbeheerder zijn geïnstalleerd

Op basis van deze resultaten geeft Snyk advies en begeleiding, zoals:

  • Oorsprong van de kwetsbaarheden in OS-pakketten en belangrijke binaire bestanden
  • Gegevens over de upgraden van basisimages of een aanbeveling om de image opnieuw te bouwen
  • Docker-bestandlaag waar het betreffende pakket werd geïntroduceerd
  • Vaste versie van het besturingssysteem en belangrijke binaire pakketten

Het scannen van toepassingen in je Bitbucket Pipeline

Het bitbucket-pipelines.yml-bestand definieert de configuratie van je Bitbucket Pipelines-builds. Als je nieuw bent bij Bitbucket Pipelines, kun je hier meer informatie vinden over hoe je aan de slag kunt.

Deze zelfstudie biedt een voorbeeld van een bitbucket-pipelines.yml-bestand dat verschillende stappen bevat die zijn toegewezen aan de workflow. We beginnen met het scannen van de toepassing, het bouwen van de Docker-image en vervolgens het scannen van de container-image. Hieronder volgt een nadere beschrijving van de stap voor het scannen van toepassingen:

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"


Dit voorbeeld maakt gebruik van de Snyk Scan-pipe in de pipeline om een scan van de toepassing uit te voeren. De bron bevat een volledige YAML-definitie van alle ondersteunde variabelen, maar alleen de variabelen in dit snippet zijn opgenomen, zijn hiervoor nodig.

Hier volgt meer informatie over een aantal van deze:

1. SNYK_TOKEN wordt in de pipe doorgegeven als een repository-variabele die eerder is gedefinieerd in de module [Bitbucket-configuration].

2. PROJECT_FOLDER is de map waarin het project zich bevindt en normaal gesproken standaard staat. In dit voorbeeld stellen we dit echter in op app/goof en geven dit als artefact door aan andere stappen in de pipeline.

3. CODE_INSIGHTS_RESULTS is standaard false. Omdat we echter een Code-inzichtrapport met Snyk-testresultaten willen maken, stellen we dit in op true.

4. SEVERITY_THRESHOLD rapporteert over issues die gelijk zijn aan of hoger zijn dan het opgegeven niveau. De standaard is low. Maar in dit geval zijn we alleen geïnteresseerd in high, dus hebben we deze variabele daarop ingesteld.

5. De standaard DONT_BREAK_BUILD is false, wat wordt verwacht. Onder normale omstandigheden zou je de build willen afbreken als er problemen worden gevonden. Stel dit echter voor het doel van deze leeroefening op waar.

Uitroepteken

Je kunt Snyk-beveiligingsscans uitvoeren op je pull requests en de resultaten bekijken in Code Insights met behulp van de nieuwe Snyk Security Connect-app op de Atlassian Marketplace. Het is eenvoudig om aan de slag te gaan en je kan de app met slechts een paar klikken installeren.

De container-images scannen

Diagram van bitbucket-proces

Tegen 2022 zal meer dan 75 procent van de wereldwijde organisaties containertoepassingen in productie gebruiken (Gartner). Met de wijdverbreide acceptatie heeft er ook een toename van het aantal kwetsbaarheden in containers plaatsgevonden, met een viervoudige toename van de gemelde kwetsbaarheden in het besturingssysteem in 2018. En toch zegt 80 procent van de ontwikkelaars dat ze hun container-images niet testen tijdens de ontwikkeling. Ze zeggen ofwel dat het niet hun verantwoordelijkheid is of dat ze eraan gewend zijn dat iemand onderweg problemen oppakt, wat het schalen van containerbeveiliging een uitdaging maakt voor snelgroeiende bedrijven.

Container-images scannen in je pipeline

Net als in het vorige gedeelte over toepassingen scannen, richt deze sectie zich op het configureren van het bitbucket-pipelines.yml-bestand om de docker-image voor de toepassing te builden, de image te scannen en die image vervolgens naar het register te pushen. Hieronder wordt de stap voor het scannen van container-images nader bekeken:

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"


Dit is het bouwen van de container-image en het taggen en vervolgens gebruiken van de Snyk Scan-pipe in de pipeline om een scan van de container-image uit te voeren. Behoud dezelfde waarden voor CODE_INSIGHTS_RESULTS, SEVERITY_THRESHOLD en DONT_BREAK_BUILD. Dit geeft ook een aantal extra ondersteunde variabelen door die relevant zijn voor de Snyk Pipe om het verzoek om een container-imagescan in plaats van een toepassingsscan te begrijpen. Dit zijn namelijk het instellen van LANGUAGE op docker, het verklaren van de IMAGE_NAME, het doorgeven van de juiste repository-variabele, en het instellen van het TARGET_FILE op Dockerfile.

Je pipeline scant nu de container-image en de toepassingscode op bekende kwetsbaarheden.

Bekijk meer integraties voor 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.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Toelichting DevOps

DevOps-community

Toelichting DevOps

Simulatieworkshop

Afbeelding van kaart

Gratis aan de slag

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up