Proteggere i repository e le richieste pull

servizi Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Proteggi Azure Repos combinando il controllo degli accessi, i criteri delle pull request e i controlli di stato sui branch più importanti. Questo articolo illustra come limitare le modifiche dirette, richiedere i revisori appropriati, applicare i requisiti di lavoro e di compilazione e aggiungere GitHub controlli di sicurezza avanzata prima dell'unione delle richieste pull.

Tip

È possibile usare l'intelligenza artificiale per facilitare questa attività più avanti in questo articolo, oppure vedere Abilitare l'assistenza AI con Azure DevOps MCP Server per iniziare.

Minacce e controlli

Usare i controlli seguenti insieme per ridurre i rischi più comuni per le richieste pull.

Minaccia Rischio Controllo consigliato
Push diretti in rami protetti Le modifiche aggirano la revisione e la convalida Autorizzazioni di ramo e criteri di ramo
Approvazione da parte di una sola persona La qualità della revisione dipende da una persona Richiedere un numero minimo di revisori
Manca la revisione esperta sui file sensibili Le modifiche critiche per la sicurezza vengono integrate senza i revisori appropriati Revisori inclusi automaticamente
Modifiche al codice non rilevate Riduzione della tracciabilità e della tracciabilità delle modifiche Verificare la presenza di elementi di lavoro collegati
Codice interrotto o non testato Le regressioni raggiungono rami condivisi Convalida della compilazione
Commenti e suggerimenti per la revisione non risolti Problemi noti di unione senza risposta Verificare la risoluzione dei commenti
Nuove vulnerabilità elevate o critiche Le regressioni della sicurezza vengono integrate tramite pull request Controlli di stato di GitHub Advanced Security

Prerequisites

Category Requisiti
accesso al progetto Membro di un progetto.
Permissions - Visualizzare il codice nei progetti privati: almeno l'accesso di base .
- Clonare o contribuire al codice nei progetti privati: membro del gruppo di sicurezza Collaboratori o delle autorizzazioni corrispondenti nel progetto.
- Impostare le autorizzazioni del ramo o del repository: gestire le autorizzazioni per il ramo o il repository.
- Impostare criteri di ramo, controlli di stato o modificare il ramo predefinito: modificare l'autorizzazione dei criteri per il repository o il ramo oppure l'appartenenza al gruppo di sicurezza Project Administrators.
- Importare un repository: membro del gruppo di sicurezza Amministratori del Progetto o autorizzazione per la creazione del repository a livello di progetto Git impostata su Consenti. Per altre informazioni, vedere Impostare le autorizzazioni del repository Git.
Services Repos abilitato.
Tools Optional. Usare i comandi az repos: CLI di Azure DevOps.
Category Requisiti
accesso al progetto Membro di un progetto.
Permissions - Visualizzare il codice: almeno l'accesso di base.
- Clonare o contribuire al codice: membro del gruppo di sicurezza Collaboratori o delle autorizzazioni corrispondenti nel progetto.
Services Repos abilitato.

Prima di configurare i criteri di ramo:

  • Assicurarsi che il repository di destinazione e il branch esistano già.
  • Decidere quali gruppi possono gestire le autorizzazioni, ignorare i criteri e approvare le richieste pull.
  • Se si intende richiedere la convalida della compilazione o i controlli dello stato di GitHub Advanced Security, creare prima la pipeline di compilazione.

Baseline di sicurezza per la maggior parte dei team

Per un tipico ramo di produzione, mainad esempio , iniziare con questa baseline:

Area di controllo Baseline consigliata Perché
Accesso al repository Limitare l'accesso in scrittura ai collaboratori che lavorano attivamente nel repository Riduce il numero di identità che possono modificare il codice sorgente o le impostazioni del repository.
Autorizzazioni per i rami Limitare Ignorare i criteri quando si completano le pull request e Ignorare i criteri durante il push a un piccolo gruppo di amministratori Impedisce agli utenti di ignorare le verifiche, la convalida e altre protezioni dei rami richieste.
Criteri di revisione Richiedere almeno due revisori per main Migliora la qualità della revisione e riduce il rischio di un'approvazione errata o distorta.
File sensibili Includere automaticamente i revisori per percorsi di sicurezza, infrastruttura o sensibili alla conformità Assicura che le modifiche alle aree ad alto rischio vengano esaminate dalle persone o dai team giusti.
Tracciabilità Attiva Verifica della presenza di elementi di lavoro collegati Mantiene un audit trail tra le modifiche del codice e il lavoro che li giustifica.
Validation Aggiungi la convalida della build per il ramo PR Rileva gli errori di compilazione e test prima che il codice venga unito a un ramo protetto.
Completamento della revisione Attivare Verifica la risoluzione dei commenti Assicura che le preoccupazioni dei revisori vengano risolte prima del completamento.
Soglie di vulnerabilità Aggiungere AdvancedSecurity/NewHighAndCritical dopo la configurazione dell'analisi avanzata della sicurezza Blocca le richieste pull che introducono nuovi risultati di sicurezza elevati o critici.

Passaggio 1: Limita l'accesso al repository e al branch

Iniziare con le autorizzazioni. I criteri sono più efficaci quando solo un piccolo set di utenti può ignorarli.

Esaminare le autorizzazioni del repository

Usare le autorizzazioni del repository per controllare chi può leggere, contribuire, amministrare le impostazioni o contribuire alle richieste pull. Per informazioni di riferimento dettagliate sulle autorizzazioni, vedere Impostare le autorizzazioni del repository Git.

Usare il modello seguente:

  • Concedere ai collaboratori le autorizzazioni necessarie per lavorare nei rami di funzionalità.
  • Riservare l'amministrazione del repository per un piccolo gruppo di amministratori.
  • Evitare concessioni estese di autorizzazioni per ignorare i criteri.

Limitare le autorizzazioni per i rami

Per i rami protetti, esaminare e limitare attentamente queste autorizzazioni:

  • Ignorare i criteri durante il completamento delle richieste pull
  • Ignorare le politiche mentre si esegue il push
  • Forza push (riscrivere la cronologia, eliminare rami e tag)
  • Modificare le politiche
  • Gestire autorizzazioni

Utilizzare Set branch permissions per configurare queste impostazioni.

Modello consigliato per main:

Gruppo Autorizzazioni di ramo consigliate
Contributori Consentire un contributo regolare tramite richieste pull, ma non concedere autorizzazioni di bypass
Amministratori di progetto Consenti modifica criteri e gestisci autorizzazioni
Responsabili del rilascio di emergenza Concedi permessi di bypass solo se il tuo processo di gestione degli incidenti lo richiede

Important

Mantenere i criteri bypass quando si completano le richieste pull e ignora i criteri quando si esegue il push limitato a un piccolo set di amministratori attendibili. Queste autorizzazioni eliminano le protezioni create dai revisori, dalla convalida e dai controlli di stato richiesti.

Passaggio 2: Richiedere una revisione avanzata delle richieste pull

Richiedere un numero minimo di revisori

Usa Richiedi un numero minimo di revisori nei rami importanti, come main e i rami di rilascio.

Impostazioni consigliate:

  • Numero minimo di revisori: 2 per rami condivisi ad alto valore
  • Richiedere almeno un'approvazione per l'ultima iterazione
  • Consentire ai richiedenti di approvare le proprie modifiche: Off
  • Impedire al pusher più recente di approvare le proprie modifiche: On quando si vuole una separazione più forte dei compiti

Configurare il criterio per il numero minimo di revisori

  1. Vai a Impostazioni progetto>Repository.
  2. Selezionare il repository e quindi selezionare il ramo protetto.
  3. In Criteri attivare Richiedi un numero minimo di revisori.
  4. Impostare le opzioni di revisore per il ramo.

Verificare il risultato:

  • L'elenco dei criteri di ramo mostra il criterio per i revisori come abilitato.
  • Le richieste di pull nel branch non possono essere completate finché non viene raggiunto il numero richiesto di approvazioni.

Per informazioni dettagliate sui criteri, vedere Criteri e impostazioni dei rami.

Includere automaticamente i revisori per i file sensibili

Usare Revisori inclusi automaticamente quando determinati file o cartelle richiedono l'approvazione di una persona o di un team specifico.

Ecco alcuni candidati appropriati:

  • codice di distribuzione e infrastruttura
  • codice di autenticazione e autorizzazione
  • cartelle sensibili alla conformità
  • modelli di pipeline condivisi

Configurare il criterio dei revisori inclusi automaticamente

  1. Vai a Impostazioni del progetto>Repository.
  2. Aprire il ramo di destinazione in Criteri di ramo.
  3. Aggiungere un criterio Revisori inclusi automaticamente .
  4. Aggiungere le persone o i gruppi necessari.
  5. Scegliere se il criterio è Obbligatorio o Facoltativo.
  6. Aggiungere filtri di percorso per i file o le cartelle che richiedono la revisione.
  7. Non consentire ai richiedenti di approvare le proprie modifiche.

Verificare il risultato:

  • Una richiesta pull che modifica i file corrispondenti aggiunge automaticamente i revisori configurati.
  • La richiesta pull non può essere completata fino a quando non vengono soddisfatti i criteri di revisore necessari.

Per altre informazioni, vedere Includere automaticamente i revisori del codice.

Passaggio 3: Applicare la tracciabilità e la convalida

Verificare la presenza di elementi di lavoro collegati

Attiva Controlla gli elementi di lavoro collegati quando il team ha bisogno della tracciabilità delle modifiche tra le pull request e il monitoraggio del lavoro.

Configurare i criteri degli elementi di lavoro collegati

  1. Passare a Impostazioni del progetto>Repository.
  2. Aprire il ramo di destinazione in Criteri di ramo.
  3. Attiva Controlla gli elementi di lavoro collegati.
  4. Scegli Obbligatorio se le pull request devono avere elementi di lavoro collegati prima di poter essere completate.

Verifica il risultato: le pull request senza elementi di lavoro collegati indicano che il criterio non è soddisfatto.

Per altre informazioni, vedere Verificare la presenza di elementi di lavoro collegati.

Convalida compilazione

Usa la convalida della build per richiedere l'esecuzione corretta di una pipeline per le pull request prima del merge.

Important

Prima di configurare la convalida della compilazione, creare la pipeline di compilazione che deve convalidare la richiesta pull.

Impostazioni consigliate per i rami protetti:

  • Attivazione: Automatica
  • Requisito dei criteri: Required
  • Scadenza della compilazione: scegliere un valore che corrisponda alla frequenza con cui si modifica il ramo protetto

Configurare i criteri di convalida della build

  1. Aprire il ramo di destinazione in Criteri di ramo.
  2. Aggiungere un criterio di convalida della build.
  3. Selezionare la pipeline di compilazione.
  4. Scegliere se il criterio è obbligatorio.
  5. Salva la politica.

Verificare il risultato:

  • L'apertura o l'aggiornamento di una pull request mette in coda la build di convalida configurata.
  • La pull request non può essere completata finché la build obbligatoria non viene completata con successo.

Per altre informazioni, vedere Convalida della compilazione.

Verificare la risoluzione dei commenti

Usare Verifica la risoluzione dei commenti per assicurarsi che i thread di revisione vengano risolti prima del completamento della richiesta pull.

Configurare i criteri di risoluzione dei commenti

  1. Aprire il ramo di destinazione in Criteri di ramo.
  2. Attivare Verifica la risoluzione dei commenti.
  3. Scegliere Obbligatorio se i commenti non risolti devono bloccare il completamento.

Verificare il risultato: le richieste pull con commenti non risolti rimangono bloccate fino a quando i revisori o gli autori non risolvono i thread.

Per altre informazioni, vedere Verificare la risoluzione dei commenti.

Limitare i tipi di unione

Utilizzare Limita i tipi di merge come impostazione di governance della cronologia del repository. Questo criterio consente di standardizzare la modalità di visualizzazione dei commit delle richieste pull dopo l'unione, ma non è un controllo di sicurezza diretto.

Scegliere una strategia di merge in base al modo in cui il team esamina, traccia e controlla la cronologia.

Viene usato un esempio:

  • Richiedere fusioni squash per il lavoro su funzionalità di breve durata.
  • Non consentire il rebase o lo squash nei branch in cui il processo di audit richiede commit di merge.

Considerazioni su controllo e tracciabilità:

  • Squash crea una cronologia più pulita del ramo di destinazione, ma comprime più commit di origine in un solo commit in fase di unione.
  • Se il modello di audit dipende dal mantenimento dell'esatta sequenza dei commit di un branch di funzionalità, è preferibile adottare strategie con commit di merge rispetto allo squash.
  • Mantieni i criteri coerenti con il modo in cui gli sviluppatori esaminano ed eseguono il debug della cronologia nelle pull request e nel ramo di destinazione.

Esempio di Azure DevOps CLI:

az repos policy merge-strategy create \
  --blocking true \
  --branch main \
  --enabled true \
  --repository-id <repository-id> \
  --allow-no-fast-forward true \
  --allow-rebase false \
  --allow-rebase-merge false \
  --allow-squash false

Per altre informazioni, vedere Limitare i tipi di merge.

Passaggio 4: Aggiungere GitHub controlli di stato di sicurezza avanzata

I controlli dello stato di GitHub Advanced Security contribuiscono a impedire il merge delle pull request quando vengono introdotte nuove vulnerabilità critiche o ad alta gravità.

Important

GitHub Sicurezza avanzata per Azure DevOps è disponibile solo per i servizi di Azure DevOps e solo per i repository Git di codice.

Prima di aggiungere il criterio di verifica dello stato:

  1. Abilita GitHub Advanced Security sul repository.
  2. Configurare le attività della pipeline di sicurezza avanzata necessarie.
  3. Aggiungere un criterio di convalida della build per il ramo della pull request.
  4. Attivare Wait for Processing: true per le attività documentate di Sicurezza avanzata.
  5. Eseguire correttamente la pipeline almeno una volta in modo che il controllo dello stato venga visualizzato nell'elenco Stato da controllare .

Iniziare con AdvancedSecurity/NewHighAndCritical se il repository ha già avvisi non risolti. Dopo aver ridotto il backlog, valuta di passare a AdvancedSecurity/AllHighAndCritical.

Percorso del browser:

  1. Aprire il ramo di destinazione in Criteri di ramo.
  2. In Controlli di stato selezionare +.
  3. Impostare Stato su verificaAdvancedSecurity/NewHighAndCritical.
  4. Lasciare Opzioni avanzate nei valori predefiniti.
  5. Salva la politica.

I controlli di stato di sicurezza avanzati vengono configurati dai controlli di stato nel browser dopo aver abilitato l'analisi avanzata della sicurezza e la convalida della compilazione per il repository. Per la configurazione necessaria, vedere Configurare i controlli di stato della richiesta pull.

Verificare il risultato:

  • Le richieste pull con nuovi risultati elevati o critici mostrano che il controllo dello stato non è riuscito.
  • Il criterio del ramo impedisce il completamento finché i rilievi non vengono risolti o il criterio non viene reso facoltativo.

Per informazioni dettagliate sull'installazione, vedere:

Piani di implementazione di esempio

Baseline del repository con riservatezza inferiore

Se il repository ha una sensibilità inferiore e si vuole un punto di partenza gestibile:

  1. Limitare le autorizzazioni di bypass del branch in main.
  2. Richiedere almeno uno o due revisori.
  3. Attivare gli elementi di lavoro collegati.
  4. Aggiungere la convalida della compilazione.
  5. Attivare la risoluzione dei commenti.

Repository a elevata sensibilità

Se il repository contiene asset critici per la distribuzione, l'identità o la conformità:

  1. Limitare le autorizzazioni di aggiramento dei criteri agli amministratori.
  2. Richiedi due revisori per main.
  3. Aggiungere revisori inclusi automaticamente per i percorsi protetti.
  4. Richiedi elementi di lavoro collegati.
  5. Aggiungere la convalida della compilazione.
  6. Aggiungere i controlli dello stato di GitHub Advanced Security se si usano Azure DevOps Services.

Facoltativo: usare l'assistenza dell'IA per rivedere la configurazione dei criteri del ramo

L'assistenza per l'intelligenza artificiale è facoltativa. Le autorizzazioni del branch, i criteri e i controlli di stato impongono le protezioni del repository, indipendentemente dal fatto che si utilizzi o meno l'intelligenza artificiale.

È possibile usare questi prompt per esaminare la configurazione dei criteri, identificare le lacune e ottenere raccomandazioni di base più velocemente. Se si configura Azure DevOps SERVER MCP, l'assistente può usare il contesto di Azure DevOps per migliorare le risposte. Per indicazioni sulla configurazione, vedere Abilitare l'assistenza di intelligenza artificiale con Azure DevOps server MCP.

Per iniziare, usare prompt come il seguente:

Obiettivo Richiesta di esempio
Esaminare le protezioni dei rami Summarize the branch policies on main and explain which ones are required.
Identificare il rischio di bypass Find users or groups that can bypass branch policies on the main branch.
Controllare la copertura delle verifiche List the reviewer and comment-resolution policies configured for this repository.
Verifica il monitoraggio del lavoro Check whether pull requests into main require linked work items.
Controllare i gate di convalida Show the build validation policy for main and explain what pipeline it uses.
Esaminare i controlli dello stato di sicurezza List the status checks configured for main and tell me whether GitHub Advanced Security is one of them.
Pianificare una baseline più sicura Recommend a secure branch policy baseline for this repository based on its current settings.

Convalidare sempre i comandi generati e le raccomandazioni in base alle autorizzazioni del repository, alle impostazioni del ramo e alla documentazione corrente Azure DevOps prima di applicarli.

Suggerimenti per la risoluzione dei problemi

Problema Causa possibile Azione consigliata
Non viene visualizzata un'opzione di criteri di ramo Non si dispone dell'autorizzazione Modifica criteri o il ramo non è stato selezionato Verificare l'accesso alla filiale e le autorizzazioni dei criteri
Le pull request possono comunque essere unite senza soddisfare i criteri delle policy Un utente ha autorizzazioni di bypass Rivedere i criteri di bypass durante il completamento delle pull request e i criteri di bypass durante il push
I revisori obbligatori non vengono aggiunti Il filtro del percorso del criterio di revisione non corrisponde ai file modificati Ricontrollare i filtri di percorso e le identità dei revisori
Il controllo dello stato di sicurezza avanzata non è disponibile Il repository non ha completato correttamente un'esecuzione della scansione con le attività richieste Verificare la convalida della compilazione, le attività della pipeline e Wait for Processing le impostazioni
Il criterio relativo all'elemento di lavoro collegato non blocca Il criterio è facoltativo anziché obbligatorio Riaprire i criteri del ramo e confermare il livello di requisito