Configurazione del repository GitHub
L'integrazione dello strumento Git Repos and Issue Tracking si basa su Github, che è un servizio di hosting basato sul web per i repository (repo) di Git. Puoi avere sia copie locali che remote dei tuoi repository. Per saperne di più, vedere Git Repos and Issue Tracking{: external}.
Le politiche di protezione delle filiali applicano la sicurezza, la collaborazione e assicurano che il tuo team aderisca agli standard di gestione delle modifiche e della qualità del codice. Questo argomento consente di impostare e gestire le politiche del ramo. DevSecOps richiede di configurare le regole di protezione del ramo del tuoGitHub deposito.
GitHub supporta ora la definizione di Ruleset per la protezione delle filiali, un meccanismo più granulare e flessibile per definire le protezioni e le politiche a livello di repository. Per ulteriori informazioni, vedere Informazioni sui set di regole
Vantaggi della protezione della filiale
-
Collaborazione e qualità del codice migliorati: richiedere richieste di pull e approvazioni tramite la protezione delle filiali migliora la qualità del codice e la collaborazione. Ciò garantisce la coerenza del codice e il rispetto degli standard di codifica del team. Le modifiche vengono sottoposte a revisione e aiutano a rilevare bug ed errori all'inizio, risultando in un codice più affidabile e manutenibile.
-
Visibilità aumentata delle modifiche: la richiesta di richieste di pull fornisce una maggiore visibilità delle modifiche del codice. Questo passo semplifica la traccia delle modifiche e l'individuazione di potenziali problemi.
-
Verifica dell'integrità del codice: i controlli dello stato della richiesta di pull convalidano il codice eseguendo test automatici rispetto a standard e linters predefiniti prima che una richiesta di pull possa essere unita. Questo passo mantiene l'integrità del codice rilevando i bug e altri problemi all'inizio del ciclo di sviluppo.
Vantaggi dei set di regole
-
Targeting granulare: Applicare regole a rami e tag utilizzando potenti pattern fnmatch (ad esempio, release/**, refs/tags/v*)
-
Gestione centralizzata: Configurazione e gestione di tutte le protezioni delle filiali e dei tag da un'unica interfaccia. GitHub L'interfaccia utente e l'API forniscono chiare associazioni di regole e dettagli di applicazione per una maggiore trasparenza.
-
Maggiore flessibilità: A differenza della tradizionale protezione dei rami (che consente una sola regola per ramo), i set di regole consentono di definire set di regole multipli e stratificati che possono essere applicati a più rami utilizzando i modelli. Un singolo ramo può avere più set di regole applicabili, consentendo un controllo a grana fine, politiche riutilizzabili tra i vari rami e un migliore allineamento con i flussi di lavoro complessi.
Configurazione dei set di regole in GitHub
Per configurare le reti di regole in GitHub per il proprio repository, procedere come segue:
Accesso alle impostazioni del set di regole
- Passa alla scheda Settings del tuo repository su GitHub.
- Nella barra laterale sinistra, sotto Regole, fare clic su Regole per accedere alla pagina delle impostazioni delle regole.
- Fare clic sul pulsante verde Nuovo RuleSet di filiale
- Aggiungere le informazioni necessarie per definire il Ruleset e fare clic su Crea.
Aggiunta di regole di protezione nei set di regole
Facendo clic sul pulsante verde Nuovo set di regole di diramazione, viene visualizzata una pagina per la compilazione dei dettagli del set di regole.
- Assegnare un nome al sito RuleSet e abilitare/disabilitare/valutare il set di regole selezionando dal menu a tendina lo stato di abilitazione
- Configurare i rami di destinazione facendo clic su Aggiungi destinazione. Selezionare Includi**, Escludi****, Predefinito** o Tutti per configurare i criteri di targeting delle filiali. GitHub supporta la sintassi fnmatch per il puntamento basato su modelli.
- Configurare i permessi di bypass sotto l'elenco Bypass facendo clic su Aggiungi bypass. È possibile aggiungere i ruoli richiesti che possono aggirare i controlli. È possibile lasciare l'elenco vuoto (ciò equivale ad attivare l'opzione Non consentire l'aggiramento di queste impostazioni nelle impostazioni tradizionali di protezione del ramo).
-
Attivare l'opzione Richiedi una richiesta di pull prima dell'unione in Regole di diramazione.
-
Abilitare l'opzione Richiedi approvazioni e impostare il Numero richiesto di approvazioni prima dell'unione su almeno
1o il numero di approvazioni richieste nel team. -
Abilitare l'opzione Elimina le approvazioni delle richieste di pull obsolete quando viene eseguito il push dei nuovi commit per esaminare tutte le modifiche più recenti prima che possano essere unite in un altro ramo.
Limitazione
Attualmente, l'elenco degli attori bypassati può essere recuperato solo dai set di regole a livello di repository. Se un ruleset è definito a livello di organizzazione, queste informazioni non possono essere recuperate da tali ruleset, in base alle autorizzazioni standard.
Per recuperare l'elenco degli attori bypassati dai set di regole a livello di organizzazione, verificare l'accesso richiesto e concedere all'account Functional ID/GitHub che sta eseguendo la pipeline privilegi elevati (accesso proprietario all'organizzazione ). Ciò è dovuto al modello di autorizzazione GitHub's, che limita la visibilità dei metadati degli attori che bypassano il set di regole a livello di organizzazione senza un'autorizzazione appropriata per impedire la fuga di informazioni sensibili.
Per ulteriori informazioni, consultare la documentazione ufficiale di GitHub sui set di regole di organizzazione e sugli attori di bypass.
Configurazione dei controlli di stato per le reti di regole
- Abilitare l'opzione
Require status checks to pass before merging.
Per poterli impostare come controlli di stato richiesti, è necessario prima attivare una pipeline PR/CI (solo i controlli di stato esistenti sono elencati nell'interfaccia utente).
Dopo aver abilitato l'opzione Require status checks to pass before merging, è necessario configurare i controlli di stato specifici che devono superare prima di unire una richiesta di pull.
- Nell'elenco dei controlli di stato disponibili, abilitare le seguenti opzioni per i controlli:
tekton/code-branch-protectiontekton/code-cis-checktekton/code-detect-secretstekton/code-unit-teststekton/code-vulnerability-scan
Questi controlli sono i controlli di stato delle richieste di pull previsti di default nella pipeline.
Aggiunta di tutte le regole predefinite (configurazione completa)
Questo comando CURL imposta sia i controlli di stato richiesti che le impostazioni di revisione delle richieste di pull.
curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/rulesets" \
-XPUT -d '{
"name": "Branch Protection Equivalent Ruleset",
"target": "branch",
"enforcement": "active",
"bypass_actors": [], // as the list is empty no one can bypass which is equivalent to enforce_admins: true with no restriction
"conditions": {
"ref_name": {
"include": ["refs/heads/master"],
"exclude": []
}
},
"rules": [
{
"type": "required_status_checks",
"parameters": {
"strict_required_status_checks_policy": true,
"required_status_checks": [
{
"context": "tekton/code-unit-tests"
},
{
"context": "tekton/code-branch-protection"
},
{
"context": "tekton/code-cis-check"
},
{
"context": "tekton/code-vulnerability-scan"
},
{
"context": "tekton/code-detect-secrets"
}
]
}
},
{
"type": "pull_request",
"parameters": {
"required_approving_review_count": 1,
"dismiss_stale_reviews_on_push": true,
"require_code_owner_review": false,
"require_last_push_approval": false,
"required_review_thread_resolution": false
}
}
]
}'
Configurazione delle regole di protezione del ramo in GitHub
Per configurare le regole di protezione del ramo in GitHub per il tuo repository, attieniti alla seguente procedura:
Accesso alle impostazioni di protezione del ramo
- Passa alla scheda Settings del tuo repository su GitHub.
- Nella barra laterale sinistra, fare clic su Filiali per accedere alla pagina delle impostazioni del ramo.
- Scorri fino alla sezione Regole di protezione del ramo.
- Individuare il ramo che si desidera configurare (di solito il ramo "principale").
- Selezionare il pulsante Modifica accanto al nome ramo per modificarne le regole di protezione.
Aggiunta di regole di protezione del ramo
Se non è impostata alcuna regola esistente, fare clic su Aggiungi regola e immettere il nome del ramo corrispondente nel campo **Branch name pattern**. Quindi, procedere con i seguenti passi:
- Abilitare l'opzione Richiedi una richiesta di pull prima dell'unione.
- Abilitare l'opzione Richiedi approvazioni e impostare il Numero richiesto di approvazioni prima dell'unione su almeno
1o il numero di approvazioni richieste nel team. - Abilitare l'opzione Elimina le approvazioni delle richieste di pull obsolete quando viene eseguito il push dei nuovi commit per esaminare tutte le modifiche più recenti prima che possano essere unite in un altro ramo.
- Abilitare l'opzione Non consentire l'aggiramento delle impostazioni per impedire agli amministratori e ai ruoli personalizzati con l'autorizzazione di bypassare le protezioni di ramo di aggirare i controlli di protezione di ramo richiesti.
Attualmente, gli avvisi vengono visualizzati nei log se il controllo di Do not allow bypassing these settings non è abilitato. Non fallirà il controllo di protezione delle filiali fino a quando il controllo non sarà reso obbligatorio
entro la metà di marzo. Si prega di attivare il controllo entro la metà di marzo per evitare il malfunzionamento della conduttura.
Le richieste di pull devono essere approvate prima dell'unione nel ramo principale. Questa regola garantisce che le modifiche vengano sottoposte a revisione e controllo da parte dei membri del team, promuove la collaborazione, la qualità del codice e il rispetto degli standard del progetto.
Configurazione dei controlli stato
Sono richiesti controlli di statoDevSecOps applicare una serie completa di misure di qualità e sicurezza sul codice. Ciò garantisce che le modifiche al codice siano sicure e affidabili prima che vengano unite in un ramo protetto. Richiedendo che i controlli di stato vengano superati prima dell'unione, è possibile impedire che il codice interrotto o non testato venga distribuito in produzione.
Quando viene inoltrata una richiesta di pull, la pipeline PR/CI attiva automaticamente una serie di test, convalide e altri controlli per verificare le modifiche proposte.
Solo quando tutti i controlli di stato richiesti avranno esito positivo la richiesta di pull sarà considerata idonea per l'unione nel ramo protetto.
Sfruttando i controlli di stato all'internoDevSecOps, puoi mantenere la qualità del codice, aderire agli standard di codifica e garantire l'assenza di vulnerabilità o difetti critici prima di incorporare le modifiche nel ramo protetto del tuo progetto.
Per ulteriori informazioni sulla configurazione dei controlli di stato, fare riferimento alla sezione Configurazione solo dei controlli di stato(Configurazione dei controlli di stato) per un'implementazione di riferimento.
- Abilitare l'opzione
Require status checks to pass before merging.
Per poterli impostare come controlli di stato richiesti, è necessario prima attivare una pipeline PR/CI (solo i controlli di stato esistenti sono elencati nell'interfaccia utente).
Dopo aver abilitato l'opzione Require status checks to pass before merging, è necessario configurare i controlli di stato specifici che devono superare prima di unire una richiesta di pull.
- Nell'elenco dei controlli di stato disponibili, abilitare le seguenti opzioni per i controlli:
tekton/code-branch-protectiontekton/code-cis-checktekton/code-detect-secretstekton/code-unit-teststekton/code-vulnerability-scan
I controlli di stato visualizzati devono essere superati prima di unire una richiesta di pull.
Questi controlli sono i controlli di stato delle richieste di pull previsti di default nella pipeline.
Impostazione di un elenco personalizzato di verifiche di conformità
Puoi anche inserire il tuo proprio elenco di controlli di stato per essere convalidato dalla pipeline. Per ottenere questo risultato, imposta prima il tuo elenco di controlli di stato richiesti nel repository e imposta anche il valore branch-protection-rules-path impostando il suo percorso su un file JSON contenente gli stessi controlli di stato dell'elenco, che è relativo al tuo repository dell'applicazione.
|branch-protection-rules-path |text | Imposta il percorso di un file JSON contenente l'elenco personalizzato dei controlli di conformità richiesti, relativo al repository di applicazioni integrato. | Facoltativo |
Il file JSON ha questo formato
[{
"type": "branch-protection",
"name": "code-review",
"params": {
"checks": [
"tekton/code-branch-protection",
"tekton/code-unit-tests",
"tekton/code-cis-check",
"tekton/code-vulnerability-scan",
"tekton/code-detect-secrets"
]
}
}]
Nota :DevSecOps per impostazione predefinita baserà l'esito dei controlli di protezione del ramo in base ai risultati dei controlli di stato che hanno il tekton/ prefisso.
Impostazione del prefisso personalizzato per le verifiche di conformità
Se desideri modificare il file tekton prefisso di qualcos'altro inGitHub, dovresti impostare un valore per branch-protection-status-check-prefix proprietà dell'ambiente nella pipeline.
|branch-protection-status-check-prefix |text | Il testo del prefisso per il controllo dello stato di protezione del ramo (valore predefinito tekton) | Facoltativo |
Una volta configurate le impostazioni di protezione del ramo, qualsiasi tentativo di unire una richiesta di pull al ramo protetto verrà rifiutato a meno che non vengano soddisfatte le condizioni richieste.
Impostazioni facoltative
Oltre alle impostazioni precedenti, è possibile configurare le seguenti impostazioni aggiuntive per le regole di protezione del ramo. Tieni presente che i controlli di stato forniti daDevSecOps non convaliderà né applicherà queste impostazioni.
-
Richiedi commit firmati: questa impostazione richiede la firma di tutti i commit sul ramo protetto, impedendo modifiche dannose al codice.
-
Richiedi cronologia lineare: questa impostazione richiede che tutti i commit per il ramo protetto abbiano una cronologia lineare. Ciò significa che tutte le richieste di pull unite nel ramo protetto devono utilizzare un'unione di squash o un'unione di modifica. Una cronologia di commit strettamente lineare può aiutare i team a invertire più facilmente le modifiche.
Queste impostazioni aggiuntive sono facoltative e possono essere personalizzate in base ai requisiti e alle preferenze specifiche.
Impostazione delle regole di protezione del ramo tramite il comando CURL
Aggiunta di tutte le regole di protezione del ramo (Configurazione completa)
Le regole di protezione del ramo possono essere impostate anche dal seguente comando curl, dopo aver sostituito le variabili $GH_TOKEN, $OWNER, $APP_API_URL $REPO, $BRANCH.
curl -u ":$GH_TOKEN" $APP_API_URL/repos/$OWNER/$REPO/branches/$BRANCH/protection -XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'
Questo comando CURL imposta sia i controlli di stato richiesti che le impostazioni di revisione della richiesta di pull.
Una volta configurate queste impostazioni, qualsiasi tentativo di unire una richiesta di pull a $BRANCH verrà rifiutato, a meno che la richiesta di pull non sia stata approvata da almeno un altro utente.
Configurazione solo controlli stato (Configurazione controlli stato)
Se si desidera configurare solo i controlli di stato richiesti, è possibile utilizzare il seguente comando CURL come riferimento:
curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/branches/master/protection" \
-XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'
Nella nostra implementazione di riferimento, abbiamo già fornito una configurazione di esempio per il repository hello - compliance - app, in modo da poterla utilizzare come punto di partenza e personalizzarlo in base alle tue esigenze.
Seguire l'esempio precedente per garantire la qualità e il rispetto delle misure di sicurezza per il repository. Per garantire che ciò avvenga, configurare le regole di protezione del ramo e i controlli di stato necessari.