Pull della pipeline di richiesta
La pipeline della richiesta di pull esegue una serie di verifiche dello stato di conformità su una richiesta di pull per il repository dell'applicazione specificato.
I tentativi di unire una richiesta di pull nel ramo principale potrebbero essere bloccati a causa di verifiche dello stato di conformità non riuscite. L'apertura o l'aggiornamento di una richiesta di pull rispetto al ramo master attiva l'esecuzione della pipeline di richiesta di pull. È possibile eseguire la propria configurazione per le pipeline e i test in Script personalizzati.
Fasi e attività
La tabella riportata di seguito elenca le attività eseguite in una pipeline RdA. Inoltre, la tabella fornisce anche una panoramica di ciascuna di queste fasi:
-
Attività o fase: fa riferimento al nome dello stage come definito nel file di configurazione
.pipeline-config.yaml. -
Breve descrizione: fornisce una breve spiegazione delle azioni eseguite durante l'esecuzione della fase.
-
Personalizzazione consentita: indica se gli utenti hanno la flessibilità di modificare o sostituire il comportamento predefinito dello stage inserendo uno script personalizzato nel file
.pipeline-config.yaml. -
Implementazione di riferimento predefinita: indica se le pipeline DevSecOps sono dotate di un'implementazione predefinita o predefinita per lo stage. In particolare, per alcune fasi come
unit-testsosetup, la pipeline DevSecOps non offre alcuna implementazione immediata. Invece, agli utenti viene richiesto di fornire script o codice personalizzati in base ai requisiti dell'applicazione. -
Raccolta di prove: indica se la fase esegue la raccolta di prove standard. Quando DevSecOps Pipeline fornisce un'implementazione di riferimento per una fase, la raccolta delle prove viene eseguita in modo immediato. Tuttavia, se l'utente sceglie di modificare o sostituire questi stage predefiniti, deve assicurarsi che le proprie implementazioni personalizzate includano una raccolta di prove appropriata. La stessa responsabilità ricade sugli utenti per le fasi in cui la pipeline DevSecOps non fornisce un'implementazione pronta all'uso, rendendo necessaria la raccolta di prove. La colonna indica l'entità (Utente / Pipeline) responsabile dell'esecuzione della raccolta di prove.
-
Ignora consentito (applicabile alla versione> = v10): indica se gli utenti possono scegliere di non eseguire questa fase impostando la proprietà ignora su true in
.pipeline-config.yaml. Tuttavia, si consiglia cautela quando si utilizza questa funzione, specialmente per le fasi progettate per raccogliere le prove. Saltare tali fasi potrebbe portare alla mancanza di evidenze essenziali per la build.
| Attività o fase | Breve descrizione | Personalizzazione consentita in .pipeline-config.yaml |
Implementazione di riferimento predefinita | Requisito di raccolta prove | Ignora consentito |
|---|---|---|---|---|---|
start |
Configura l'ambiente della pipeline. | No | Sì | NA | No |
setup |
Impostare l'ambiente di build e di test. | Sì | No | NA | No |
detect-secrets |
Eseguire la scansione dei segreti di rilevamento sul codice dell'applicazione. | Sì | Sì | NA | No |
unit-tests |
Esegui test di unità e test di app sul codice app. | Sì | No | NA | Sì |
compliance-checks |
Esegui le scansioni di Code Risk Analyzer e altri controlli di conformità sui repository dell'app. | Sì | Sì | NA | Sì |
finish |
Consolida lo stato della pipeline. | Sì | Sì | NA | Sì |
Per ulteriori informazioni su come personalizzare gli stage utilizzando il file .pipeline-config.yaml, consulta Script personalizzati e Parametri pipeline.
Rileva scansione segreti
Lo strumento IBM Rileva segreti identifica dove i segreti sono visibili nel codice dell'applicazione. Ulteriori informazioni sulla configurazione del tuo repository per la scansione sono disponibili qui.
Scansioni e verifiche di conformità
| Scansione o controllo | Descrizione |
|---|---|
| Scansione vulnerabilità di Code Risk Analyzer | Trova le vulnerabilità per tutte le dipendenze del pacchetto app, le immagini di base del contenitore e i pacchetti del sistema operativo. Utilizza lo strumento Code Risk Analyzer. |
| Verifica CIS di Code Risk Analyzer | Esegue i controlli di configurazione sui manifest di distribuzione Kubernetes. Utilizza lo strumento Code Risk Analyzer. |
| Verifica BOM (Bill of Material) di Code Risk Analyzer | Il BOM per un repository specificato che cattura il pedigree di tutte le dipendenze. Questo BOM viene raccolto in diverse granularità. Ad esempio, il BOM cattura l'elenco delle immagini di base utilizzate nella build, l'elenco dei package dalle immagini di base e l'elenco dei package di app installati sull'immagine di base. Il BOM funge da ground truth per i risultati analitici e può essere potenzialmente utilizzato per applicare i gate della politica. Utilizza lo strumento Code Risk Analyzer. |
| Verifica della conformità del repository | Controlla che le impostazioni di protezione delle filiali siano corrette. |
Questi script vengono eseguiti su tutti i repository dell'applicazione di cui la pipeline è a conoscenza. Per aggiungere i repository a queste scansioni, utilizza l'interfaccia pipelinectl fornita nella fase di configurazione.
Per ulteriori informazioni sull'output previsto dagli stage di script utente, consultare Script personalizzati.
Lavori attività
| Lavoro attività | Descrizione |
|---|---|
code-pr-start |
Clona i repository app e DevSecOps e imposta lo stato di attesa iniziale per i controlli di stato sui repository Git Repos and Issue Tracking. |
code-setup |
Il segnaposto per uno script personalizzato di configurazione definito dall'utente in cui l'utente può completare la sua configurazione della pipeline. |
code-detect-secrets |
Esegue la scansione di rilevamento dei segreti per identificare dove sono visibili i segreti nel codice dell'applicazione. |
code-unit-tests |
Il segnaposto per uno script personalizzato di test definito dall'utente in cui l'utente può eseguire i propri test. |
code-pr-finish |
Esegue tutti i controlli di conformità richiesti, commenta i risultati della richiesta di pull e imposta i risultati sui repository Git Repos and Issue Tracking. |
Utilizzo delle modifiche PR/MR per il repo di configurazione della pipeline
Se la linea di comando della PR deve considerare le modifiche dei file/script di configurazione provenienti dalla PR/MR, il repo e il ramo di configurazione devono essere vuoti e possono essere impostati come segue:
- Le variabili env
one-pipeline-repo,one-pipeline-config-repoepipeline-config-reposono vuote o non specificate nelle variabili env - Le variabili env
one-pipeline-config-branchepipeline-config-branchsono vuote o non specificate nelle variabili env.
Unisci richieste di pull con problemi
Puoi utilizzare i diritti di amministratore per unire le richieste di pull con controlli dello stato non riusciti al repository. Tuttavia, queste richieste di pull registrano un failure come prova per l'attività non riuscita. Questo
risultato è incluso nel riepilogo delle prove e nella descrizione della richiesta di modifica e influisce sul punteggio di conformità finale nel Security and Compliance Center.
Consentire la raccolta di prove nella pipeline delle PR
La pipeline PR supporta la raccolta delle prove e la gestione dei problemi. Per impostazione predefinita, la pipeline PR non raccoglie prove e non apre alcun problema, ma gli utenti possono optare per questa funzione. Per abilitare la raccolta
delle prove e la gestione dei problemi, impostare la variabile d'ambiente collect-evidence-in-pr come uno dei seguenti enum:
none: (predefinito) Impostarecollect-evidence-in-pranone, per impedire la raccolta di prove nella pipeline PR.all: Impostarecollect-evidence-in-prsuallper raccogliere tutte le prove indipendentemente dallo stato della pipeline PR. Le questioni saranno aperte, aggiornate o chiuse secondo lo scriptcollect-evidence.success: Impostarecollect-evidence-in-prasuccessper raccogliere le prove solo se l'intera pipeline PR è stata eseguita con successo. Se la pipeline PR non funziona, le prove non saranno raccolte o pubblicate nell'archivio delle prove e la gestione dei problemi non avrà luogo.
Nota: poiché le pipeline PR vengono generalmente eseguite con una certa frequenza, la scelta della modalità corretta di collect-evidence-in-pr eviterà la raccolta di prove non necessarie. Si suggerisce di selezionare la modalità
success durante la fase di sviluppo o nei casi in cui si prevedono guasti, per evitare la raccolta di prove in caso di guasto della conduttura.
Se la pipeline PR attiva una pipeline Async, la modalità collect-evidence-in-pr impostata su success non è supportata. Se la pipeline PR attiva una pipeline async, impostare collect-evidence-in-pr su all per raccogliere le evidenze.
Nota: se il repository dell'applicazione è un repository GitLab e la MR (richiesta di fusione) che si sta contribuendo proviene da un repository biforcuto, l'utente dovrà fornire un valore per la variabile env git-token che ha accesso
sia al repository di partenza che a quello di arrivo, per impostare gli stati corretti sulla richiesta di fusione. Ciò significa che il token git deve appartenere a un utente che sia un contributore sia nel repository di base sia nel repository
biforcuto e che abbia i permessi per impostare lo stato su un commit.
Affiorano i CVE nelle PR
Quando viene creato un PR e le vulnerabilità vengono trovate dalla pipeline PR, la pipeline aggiunge le informazioni sulla vulnerabilità come la gravità, l'identificatore cve, il pacchetto con la sua descrizione e la correzione, se disponibile, come commento. Ciò consente agli utenti di verificare rapidamente le vulnerabilità da correggere nella PR, invece di dover esaminare i registri della pipeline.
È disponibile un flag di opt-in opt-in-pr-updates per abilitare/disabilitare questa funzione nella pipeline delle PR. È abilitata per impostazione predefinita.
Impostazione di una pipeline PR per gestire le PR di Github Merge Queue
La Merge Queue è una funzione di Github che aiuta ad aumentare la velocità automatizzando le fusioni delle richieste di pull in un ramo occupato e garantendo che il ramo non venga mai interrotto da modifiche incompatibili. Per saperne di più sulla configurazione e sull'uso di Github Merge Queue , cliccate qui.
Creare un nuovo trigger Git
Creare un nuovo trigger Git o duplicarne uno esistente. Mantenere tutte le impostazioni predefinite, sovrascrivendo solo le seguenti proprietà:
Name: preferisce avere un nome di trigger che rifletta il contesto della coda di unione, ad esempio:PR - Merge QueueEventListener: selezionarepr-listener-merge-queueTrigger on: selezionareCEL filterCEL filter: inserirebody.action == 'checks_requested'
I PR in coda di fusione utilizzano rami effimeri - creati "al volo" quando il PR originale viene aggiunto alla coda di fusione - da cui viene creato il PR in coda di fusione. Di conseguenza, il corrispondente payload dell'evento Git (che attiva la pipeline delle richieste di pull) non contiene alcuna informazione su PR URL o HTML URL.
Irrilevante nel contesto della coda di unione, le seguenti funzioni di DevSecOps devono essere disabilitate aggiungendo le proprietà di testo corrispondenti:
skip-merge-pr-to-base: deve essere impostato sutrue(valore predefinito: false)opt-in-pr-updates: deve essere impostato su0(valore predefinito 1)
Salvate l'innesco.
Verifica dell'attivazione della coda di unione
- Creare una nuova richiesta di pull per il ramo principale del repository del codice sorgente dell'applicazione.
- Osservare: viene attivata la pipeline PR "standard" di DevSecOps
enqueueSempre nella pagina della PR, fare clic suMerge when readye poi suAttempt merge when ready: in questo modo la PR verrà trasferita nella coda di unione una volta completata la PR "standard".- Attendere che la PR "standard" di DevSecOps sia completata con successo
- Osservare: una volta completata la pipeline PR, la PR viene aggiunta alla Merge Queue e la Merge Queue PR viene attivata:
- Attendere il completamento della PR della coda di unione
- In caso di successo, il PR viene unito con un commento del tipo
Merged via the queue into main with commit abcdefg - In caso di esito negativo (ad esempio, controllo di conformità fallito), la PR non verrà unita automaticamente e verrà rimossa dalla coda di unione.
Panoramica del carico utile PR
Payload
Un payload è un termine generico usato per descrivere un blocco strutturato di dati, solitamente in formato JSON, che viene trasmesso come parte di un evento o di una richiesta. I payload sono comunemente utilizzati nei webhook, nelle API e nei sistemi di automazione per trasmettere informazioni rilevanti in forma leggibile dalla macchina.
I payload possono rappresentare un'ampia gamma di contenuti a seconda del contesto, ad esempio metadati di compilazione, attività degli utenti, aggiornamenti dei problemi o, in questo caso, dettagli delle richieste di pull.
Carico utile PR
cd-devsecops-pr-payload
Il payload PR è un'istanza specifica di un payload che incapsula metadati e informazioni contestuali su una richiesta di pull (PR). Viene generato quando si verifica un evento di richiesta di pull e fornisce un accesso strutturato agli attributi chiave relativi a quella PR.
Questo carico utile comprende un'ampia gamma di dati, quali:
- Titolo e descrizione della PR
- Autore e revisori
- Rami di origine (testa) e di destinazione (base)
- Cronologia degli impegni e riferimenti SHA
- Dettagli del repository
- Timestamp, etichette, stati e altro ancora
Sebbene il payload completo contenga numerose informazioni, solo un sottoinsieme specifico di campi viene attualmente estratto ed esposto come variabili d'ambiente da utilizzare in pipeline, script e file di configurazione.
Proprietà dell'ambiente estratte dal payload PR
Le seguenti variabili d'ambiente sono attualmente derivate dal payload PR e vengono utilizzate attivamente:
| Nome variabile | Descrizione |
|---|---|
head-branch |
Il ramo di origine della PR (ramo da cui viene effettuata la fusione) |
head-sha |
L'SHA di commit dell'ultimo commit sul ramo di testa |
head-repo |
Il repository da cui proviene la PR |
base-branch |
Il ramo di destinazione della PR (ramo in cui si sta effettuando la fusione) |
base-repo |
Il riferimento completo al repository di base |
base-repo-name |
Il nome del repository di base |
base-repo-owner |
Il proprietario (utente o organizzazione) del repository di base |
commit-timestamp |
Il timestamp del commit più recente nella PR |
pr-url |
L'API URL della richiesta di pull |
pr-html-url |
Il sito web (HTML) URL della richiesta di pull |
pr-title |
Il titolo della richiesta di pull |
action |
stato di PR |
base_ref |
ramo di destinazione della PR |
Questi valori vengono iniettati come variabili d'ambiente per semplificare l'accesso durante l'esecuzione nei flussi di lavoro automatizzati.
Il payload PR comprende molti campi aggiuntivi rispetto a quelli elencati sopra. Tuttavia, solo il sottoinsieme estratto viene attualmente utilizzato per scopi operativi. Se necessario, è possibile accedere al carico utile completo per casi d'uso avanzati o per espansioni future.