Close

Integrazione tra Snyk e Bitbucket Pipelines al fine di implementare l'approccio DevSecOps

Foto di Simon Maple
Simon Maple

Field CTO di Snyk

Adotta l'approccio DevSecOps integrando Snyk con Bitbucket Pipelines e Jira.

Ora

5 minuti.

Pubblico

Sviluppatori, team di sicurezza/applicazione e ingegneri DevOps/DevSecOps.

Prerequisiti

Devi avere un account Snyk. Inizia qui.

Devi avere un account Atlassian Bitbucket. Accedi qui o inizia qui.

Questo tutorial illustra come proteggere il flusso di lavoro di compilazione in Bitbucket Pipelines con Snyk. Un passaggio importante per proteggere l'ambiente è quello di effettuare l'analisi e la scansione dell'applicazione e del progetto di container basato su Linux alla ricerca di vulnerabilità note, per identificare e mitigare le vulnerabilità di sicurezza. Gli esercizi in questo tutorial aiuteranno a proteggere l'applicazione e il container sfruttando Snyk Pipe for Bitbucket Pipelines per eseguire la scansione del file manifesto dell'applicazione e l'immagine di base del container per le sue dipendenze.

Il tutorial, Come Snyk e Bitbucket Cloud rendono possibile l'approccio DevSecOps, è incentrato sulle dipendenze dell'applicazione. Tuttavia, eseguendo anche la scansione dell'immagine di base del container è possibile rilevare:

  • I pacchetti del sistema operativo installati e gestiti dal gestore pacchetti
  • Binari della chiave: livelli che non sono stati installati tramite il gestore pacchetti

Sulla base di questi risultati, Snyk fornisce consigli e indicazioni, tra cui:

  • Origini delle vulnerabilità nei pacchetti del sistema operativo e nei binari della chiave
  • Dettagli sull'upgrade dell'immagine di base o suggerimenti per ricompilare l'immagine
  • Livello Dockerfile in cui è stato introdotto il pacchetto interessato
  • Versione corretta del sistema operativo e dei pacchetti dei binari della chiave

Scansione delle applicazioni nella pipeline Bitbucket

Il file bitbucket-pipelines.yml definisce la configurazione delle build di Bitbucket Pipelines. Se sei un nuovo utente di Bitbucket Pipelines, puoi trovare ulteriori informazioni su come iniziare qui.

Questo tutorial contiene un file bitbucket-pipelines.yml di esempio con i passaggi distinti mappati al flusso di lavoro. Inizieremo eseguendo la scansione dell'applicazione, creando l'immagine Docker e quindi eseguendo la scansione dell'immagine del container. Di seguito è analizzata più da vicino la fase di scansione dell'applicazione:

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"


In questo esempio viene utilizzata la pipe Snyk Scan nella pipeline per eseguire una scansione dell'applicazione. L'origine contiene una definizione YAML completa di tutte le variabili supportate, ma solo quelle incluse in questo frammento sono necessarie a questo scopo.

Ecco un'analisi dettagliata di alcune di queste:

1. SNYK_TOKEN viene trasmessa nella pipe come variabile di repository precedentemente definita nel modulo [Configurazione Bitbucket].

2. PROJECT_FOLDER è la cartella in cui risiede il progetto e normalmente utilizzata per impostazione predefinita. Tuttavia, in questo esempio, la impostiamo su app/goof e la trasmettiamo come artefatto in altri passaggi della pipeline.

3. CODE_INSIGHTS_RESULTS è impostata su false per impostazione predefinita. Tuttavia, dal momento che vogliamo creare un report di Code Insight con i risultati dei test Snyk, la impostiamo su true.

4. SEVERITY_THRESHOLD segnala ticket uguali o superiori al livello fornito. L'impostazione predefinita è low. Ma in questo caso, siamo interessati solo al valore high, pertanto abbiamo definito questa variabile di conseguenza.

5. Il valore predefinito di DONT_BREAK_BUILD è false, come previsto. In circostanze normali, è consigliabile interrompere la build se vengono rilevati problemi. Tuttavia, ai fini di questo esercizio di apprendimento, lo impostiamo su true.

Punto esclamativo

Puoi eseguire le scansioni di sicurezza Snyk sulle pull request e visualizzare i risultati in Code Insights grazie alla nuova app Snyk Security Connect nell'Atlassian Marketplace. Iniziare è facile e puoi installare l'app con pochi clic.

Scansione delle immagini del container

Diagramma del processo di Bitbucket

Entro il 2022, oltre il 75% delle organizzazioni globali eseguirà applicazioni containerizzate nell'ambiente di produzione (Gartner). Con l'adozione diffusa, c'è stato anche un aumento delle vulnerabilità dei container, con un incremento di quattro volte nelle vulnerabilità del sistema operativo segnalate nel 2018. Eppure l'80% degli sviluppatori afferma di non testare le immagini dei container durante la fase di sviluppo. Dicono che non è loro responsabilità o che sono abituati al fatto che i problemi verranno gestiti più in là da una persona dedicata, il che rende la scalabilità della sicurezza dei container una sfida per le aziende in rapida crescita.

Scansione delle immagini del container nella pipeline

Analogamente alla sezione precedente sulla scansione dell'applicazione, questa sezione si concentra sulla configurazione del file bitbucket-pipelines.yml per compilare l'immagine Docker per l'applicazione, eseguire la scansione dell'immagine, quindi eseguire il push dell'immagine nel registro di sistema. Di seguito è analizzata più da vicino la fase di scansione dell'immagine del container:

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"


Si tratta di creare l'immagine del container e di taggarla, quindi utilizzare la pipe Snyk Scan nella pipeline per eseguire una scansione dell'immagine del container. Mantieni gli stessi valori per CODE_INSIGHTS_RESULTS, SEVERITY_THRESHOLD e DONT_BREAK_BUILD. In questo modo vengono inoltre trasmesse alcune variabili supportate aggiuntive rilevanti per Snyk Pipe al fine di comprendere la richiesta di una scansione dell'immagine del container anziché di una scansione dell'applicazione. In particolare, occorre impostare LANGUAGE su docker, dichiarare il IMAGE_NAME e trasmettere la variabile di repository appropriata, nonché impostare TARGET_FILE su Dockerfile.

La pipeline ora esegue la scansione dell'immagine del container e del codice dell'applicazione alla ricerca di vulnerabilità note.

Scopri altre integrazioni per 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.


Condividi l'articolo
Argomento successivo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Illustrazione su Devops

Community DevOps

Illustrazione su Devops

Percorso di apprendimento DevOps

Illustrazione di una mappa

Inizia gratis

Iscriviti alla nostra newsletter DevOps

Thank you for signing up