Protezione dei segreti in Azure Pipelines

Questo articolo illustra le procedure consigliate per la protezione dei segreti in Azure Pipelines. Un segreto è qualsiasi elemento per cui si vuole controllare rigorosamente l'accesso, ad esempio chiavi API, password, certificati o chiavi crittografiche.

Azure Pipelines non genera valori segreti. Potrebbe tuttavia essere necessario aggiungere un segreto a una pipeline per archiviare dati sensibili come una chiave API. Per altre informazioni sull'impostazione delle variabili segrete, vedere Impostare le variabili segrete.

Non usare segreti se è disponibile un altro metodo

Il metodo migliore per proteggere un segreto non è avere un segreto al primo posto. Verificare se la pipeline può usare un metodo diverso rispetto all'uso di un segreto per eseguire un'attività.

Usare le variabili segrete

I valori sensibili non devono mai essere archiviati come testo non crittografato in un file di azure Pipelines .yml .

Le variabili segrete possono essere usate per informazioni private come password, ID e altri dati di identificazione che non si desidera esporre in una pipeline. Il modo consigliato per impostare le variabili segrete è con Azure Key Vault. È anche possibile impostare variabili segrete nell'interfaccia utente o in un gruppo di variabili. Non è consigliabile usare un comando di registrazione per impostare una variabile privata. Quando si imposta un segreto con un comando di registrazione, chiunque possa accedere alla pipeline potrà visualizzare anche il segreto.

Le variabili segrete vengono crittografate e possono essere usate nelle pipeline senza esporre i relativi valori. Anche se i valori non sono esposti, non eseguono mai l'eco dei segreti come output e non passano segreti nella riga di comando. È invece consigliabile eseguire il mapping dei segreti alle variabili di ambiente.

Quando si crea un segreto, seguire le linee guida per la denominazione delle variabili e assicurarsi che il nome del segreto non divulghi informazioni riservate.

Limitare l'accesso alle variabili segrete

Per limitare l'accesso ai segreti in Azure DevOps, è possibile:

  • Archiviare i segreti in Azure Key Vault. Con Azure Key Vault è quindi possibile usare il modello di controllo degli accessi in base al ruolo di Azure per limitare l'accesso a un segreto o a un gruppo di segreti.
  • Impostare le variabili segrete nell'interfaccia utente per una pipeline. Le variabili segrete impostate nell'interfaccia utente delle impostazioni della pipeline per una pipeline hanno come ambito la pipeline in cui sono impostate. È quindi possibile avere segreti visibili solo agli utenti con accesso a tale pipeline.
  • Impostare i segreti in un gruppo di variabili. I gruppi di variabili seguono il modello di sicurezza della libreria. È possibile controllare chi può definire nuovi elementi in una raccolta e chi può usare un elemento esistente.

Non scrivere segreti nei log

Azure Pipelines tenta di eseguire lo scrubbing dei segreti dai log laddove possibile. Questo filtraggio viene eseguito con la massima diligenza possibile e non è in grado di individuare tutti i modi in cui i segreti possono essere divulgati. Evitate di ripetere i segreti nella console, di usarli nei parametri della riga di comando o di registrarli nei file. Ad esempio, alcuni comandi dell'interfaccia della riga di comando di Azure generano informazioni che è necessario proteggere. Se si chiama l'interfaccia della riga di comando di Azure dalla pipeline, usare il formato di output Nessuno e, se è necessario recuperare un segreto da una chiamata all'interfaccia della riga di comando di Azure, usare il formato di output none e recuperare le informazioni di sicurezza in una variabile privata.

Non usare dati strutturati come segreti

I dati strutturati possono causare errori di redazione dei segreti all'interno dei log, perché la procedura di rollforward si basa in gran parte sulla ricerca di una corrispondenza esatta per il valore del segreto specifico. Ad esempio, non usare un BLOB di JSON, XML o YAML (o simile) per incapsulare un valore segreto, inclusi i caratteri di controllo, ad esempio ritorno a capo (\r) e avanzamento riga (\n), in quanto ciò riduce significativamente la probabilità che i segreti vengano correttamente elaborati. Creare invece singoli segreti per ogni valore sensibile.

Controllare come vengono gestiti i segreti

Controllare il modo in cui vengono usati i segreti per assicurarsi che vengano gestiti come previsto. A tale scopo, esaminare il codice sorgente del repository che ospita la pipeline e verificare le attività usate nella pipeline. Ad esempio, verificare che non vengano inviati a host imprevisti o che vengano stampati in modo esplicito per registrare l'output.

Visualizzare i log di esecuzione per la pipeline dopo il test di input validi/non validi e verificare che i segreti siano corretti o non visualizzati. Non è sempre ovvio come un comando o uno strumento che stai richiamando genererà errori e i segreti potrebbero finire in un secondo momento nei log degli errori. Azure Pipelines tenta di eseguire lo scrubbing dei segreti dai log laddove possibile. Questo filtraggio viene eseguito con la massima diligenza possibile e non è in grado di individuare tutti i modi in cui i segreti possono essere divulgati. Di conseguenza, è consigliabile esaminare manualmente i log della pipeline dopo il test di input validi e non validi.

Controllare e ruotare i segreti

Esaminare periodicamente i segreti registrati usati dalle pipeline per verificare che siano ancora necessari e rimuovere quelli che non sono più necessari.

Ruotare periodicamente i segreti per ridurre l'intervallo di tempo durante il quale un segreto compromesso è valido.

I tipi di segreti usati dalle pipeline possono includere:

Passaggi successivi