Consigli proteggere l'infrastruttura condivisa in Azure Pipelines

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

Le risorse protette in Azure Pipelines sono un'astrazione dell'infrastruttura reale. Seguire queste raccomandazioni per proteggere l'infrastruttura sottostante.

Usare pool ospitati da Microsoft

I pool ospitati da Microsoft offrono isolamento e una macchina virtuale pulita per ogni esecuzione di una pipeline. Se possibile, usare pool ospitati da Microsoft anziché pool self-hosted.

Separare gli agenti per ogni progetto

Un agente può essere associato a un solo pool. È possibile condividere agenti tra progetti condividendo il pool con più progetti. In altre parole, più progetti possono eseguire processi nello stesso agente, uno dopo l'altro. Anche se questa pratica consente di risparmiare sui costi dell'infrastruttura, può consentire lo spostamento laterale.

Per eliminare tale forma di spostamento laterale e impedire a un progetto di "avvelenamento" un agente per un altro progetto, mantenere pool di agenti separati con agenti separati per ogni progetto.

Usare account con privilegi limitati per eseguire gli agenti

È difficile ma pericoloso eseguire l'agente con un'identità che può accedere direttamente alle risorse di Azure DevOps. Questa configurazione problematica è comune nelle organizzazioni che usano Microsoft Entra ID. Se si esegue l'agente con un'identità supportata da Microsoft Entra ID, può accedere direttamente alle API di Azure DevOps senza usare il token di accesso del processo. È invece consigliabile eseguire l'agente come account locale senza privilegi, ad esempio servizio di rete.

Azure DevOps ha un gruppo denominato in modo fuorviante account del servizio di raccolta di progetti. Per ereditarietà, anche i membri degli account del servizio raccolta progetti sono membri dei Amministrazione istrator della raccolta di progetti. I clienti a volte eseguono gli agenti di compilazione usando un'identità supportata dall'ID Microsoft Entra ed è un membro degli account del servizio di raccolta di Project. Se gli avversari eseguono una pipeline su uno di questi agenti di compilazione, possono assumere il controllo dell'intera organizzazione di Azure DevOps.

Sono stati anche visti gli agenti self-hosted eseguiti con account con privilegi elevati. Spesso questi agenti usano account con privilegi per accedere ai segreti o agli ambienti di produzione. Tuttavia, se gli avversari eseguono una pipeline compromessa su uno di questi agenti di compilazione, possono accedere a tali segreti. Gli avversari possono quindi spostarsi in un secondo momento attraverso altri sistemi accessibili tramite tali account.

Per proteggere i sistemi, usare l'account con privilegi più bassi per eseguire agenti self-hosted. Ad esempio, usare l'account del computer o un'identità del servizio gestito. Consentire ad Azure Pipelines di gestire l'accesso ai segreti e agli ambienti.

Ridurre al minimo l'ambito delle connessioni al servizio

Le connessioni al servizio devono essere in grado di accedere solo alle risorse necessarie. Se possibile, usare la federazione dell'identità del carico di lavoro anziché un'entità servizio per la connessione al servizio di Azure. La federazione delle identità del carico di lavoro usa una tecnologia standard del settore, Open ID Connessione (OIDC), per facilitare l'autenticazione tra Azure e Azure DevOps e non usa segreti.

La connessione al servizio di Azure deve avere come ambito le risorse a cui deve accedere la connessione al servizio. Gli utenti non devono avere diritti di collaboratore generali per l'intera sottoscrizione di Azure.

Quando si crea una nuova connessione al servizio Azure Resource Manager, selezionare sempre un gruppo di risorse. Assicurarsi che il gruppo di risorse contenga solo le macchine virtuali o le risorse necessarie per la compilazione. Analogamente, quando si configura l'app GitHub, concedere l'accesso solo ai repository da compilare usando Azure Pipelines.

Passaggi successivi

Prendere in considerazione alcuni consigli generali per la sicurezza.