Condividi tramite


Protezione di Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Azure Pipelines presenta problemi di sicurezza distinti. Sebbene le pipeline consentano di eseguire script o distribuire codice in ambienti di produzione, è fondamentale impedire che diventino conduits per codice dannoso. Bilanciare la sicurezza con la flessibilità e il potere necessari per i team di sviluppo è essenziale.

Nota

Azure Pipelines fa parte di una suite di Azure DevOps Services, tutto basato su un'infrastruttura sicura all'interno di Azure. Per comprendere in modo completo i concetti di sicurezza in tutti i Servizi DevOps di Azure, è consigliabile visualizzare le risorse seguenti:

Tradizionalmente, le organizzazioni applicano la sicurezza tramite blocchi rigorosi. Il codice, le pipeline e gli ambienti di produzione devono affrontare restrizioni di accesso severe. Sebbene questo approccio funzioni bene nelle piccole organizzazioni con utenti e progetti limitati, le organizzazioni di grandi dimensioni affrontano una realtà diversa. Con numerosi collaboratori che hanno accesso al codice, il principio di "presupporre la violazione" diventa fondamentale. Comporta il funzionamento come se un antagonista disponesse dell'accesso collaboratore ai repository, richiedendo maggiore vigilanza.

Per raggiungere gli obiettivi di sicurezza, considerare i punti seguenti:

  • Impedire l'esecuzione di codice dannoso:

    • Assicurarsi che le pipeline siano configurate per impedire l'esecuzione non autorizzata di codice dannoso, che include le attività seguenti:
      • Limitare l'accesso a segreti e credenziali sensibili.
      • Convalidare i parametri di input e gli argomenti per evitare comportamenti imprevisti.
      • Esaminare e controllare gli script della pipeline per individuare regolarmente potenziali rischi per la sicurezza.
      • Implementare procedure di sicurezza come:
        • Usare query con parametri negli script per impedire l'inserimento di SQL.
        • Caratteri speciali di escape negli argomenti per evitare l'inserimento dei comandi della shell.
        • Limitare le autorizzazioni per le connessioni al servizio pipeline.
    • Prendere in considerazione l'uso di pipeline YAML, che forniscono un controllo granulare sull'esecuzione e sono meno soggetti a rischi per la sicurezza.
  • Attenuare l'esposizione laterale:

    • Isolare le pipeline per impedire lo spostamento laterale all'interno dei progetti e dei repository dell'organizzazione.
    • Limitare l'accesso solo ai repository e alle risorse necessari per ogni pipeline.
    • Monitorare l'attività della pipeline e configurare avvisi per comportamenti sospetti.
    • Esaminare e aggiornare le autorizzazioni per ridurre al minimo l'esposizione regolarmente.
  • Usare le pipeline YAML:

    • Le pipeline YAML offrono i vantaggi seguenti in termini di sicurezza:
      • Definire in modo esplicito i passaggi e le dipendenze della pipeline.
      • Controllo della versione per le definizioni della pipeline.
      • Cancellare la visibilità sulla configurazione della pipeline.
      • Riduzione del rischio di errori di configurazione accidentali.
      • Revisione del codice e richieste pull:
        • Gestire le pipeline YAML come qualsiasi altro codice.
        • Applicare le richieste pull per l'unione delle modifiche per evitare passaggi dannosi.
        • Usare i criteri dei rami per configurare questo processo di revisione.
      • Gestione degli accessi alle risorse:
      • Parametri di runtime:
        • I parametri di runtime consentono di evitare problemi di sicurezza correlati alle variabili, ad esempio l'inserimento di argomenti.
    • Valutare la possibilità di eseguire la migrazione delle pipeline esistenti al formato YAML per migliorare la sicurezza e la gestibilità.

La sicurezza è un processo continuo e le valutazioni e gli aggiornamenti regolari sono essenziali. Le pipeline YAML offrono la migliore sicurezza per Azure Pipelines.

Gli articoli seguenti illustrano le raccomandazioni per sviluppare una pipeline sicura basata su YAML: