Table of Contents
Migliori Pratiche per la gestione dei segreti con HashiCorp Vault in CI/CD
La gestione dei segreti è un aspetto critico delle moderne tubazioni CI/CD. Qualsiasi perdita di chiavi API, credenziali di database o gettoni può portare a violazioni dei dati catastrofiche, violazioni della conformità e danni reputazionali. HashiCorp Vault fornisce una soluzione robusta e di livello enterprise per la gestione segreta, consentendo alle organizzazioni di proteggere i dati sensibili durante il ciclo di vita di sviluppo e di distribuzione.
Questa guida delinea strategie collaudate per l'utilizzo di HashiCorp Vault in ambienti CI/CD. Imparerai come sfruttare i segreti dinamici, implementare politiche in grana fine, crittografare i dati in transito e a riposo, ruotare continuamente le credenziali e monitorare tutti gli accessi segreti.
Aderendo a queste pratiche non solo rafforzare la postura di sicurezza, ma anche semplificare i flussi di lavoro operativi, ridurre la sovraccarica manuale, e contribuire a soddisfare i requisiti normativi come SOC 2, PCI DSS e HIPAA.
Comprendere HashiCorp Vault in CI/CD
HashiCorp Vault è uno strumento progettato per memorizzare e controllare in modo sicuro l'accesso a gettoni, password, certificati e altri segreti. Nei flussi di lavoro CI/CD, Vault può generare dinamicamente segreti, gestire il ciclo di vita segreto e applicare le politiche di accesso.
Vault si integra con i sistemi CI/CD attraverso i suoi plugin REST API, CLI e di autenticazione nativo.
- Autorizzazione:[] Il canale CI/CD autentica a Vault utilizzando un metodo sicuro come AppRole, Kubernetes auth, o un gettone brevemente vissuto iniettato dallo strumento CI.
- Recupero di sicurezza:[ Durante una fase di costruzione o di distribuzione, il condotto richiede segreti da Vault — sia segreti statici da un negozio KV o segreti dinamici da un database, cloud, o motore PKI.
- Usage:[] I segreti vengono temporaneamente iniettati in variabili di ambiente, file di configurazione o argomenti di comando, quindi utilizzati per attività come la connessione a un database, la firma di artefatti, o la distribuzione a un provider cloud.
- Cleanup:[ Dopo l'uso, il gasdotto revoca le credenziali temporanee o le variabili di ambiente non impostate per ridurre la finestra di esposizione.
Questo approccio elimina la necessità di memorizzare segreti nei repository Git, file di configurazione CI/CD, o registri di artefatti, riducendo drasticamente la superficie di attacco.
Principi fondamentali della gestione segreta con Vault
1. Utilizzare i segreti dinamici
Se compromessi, essi danno accesso persistente fino a quando non vengono ruotati manualmente. I motori segreti di Vault creano credenziali in volo con valori brevi di tempo per vivere (TTL). Ad esempio, Vault può generare una password limitata e unica per un utente PostgreSQL o una chiave di accesso IAM per un ruolo AWS.
I segreti dinamici offrono diversi vantaggi:
- breve durata di vita:[] I segreti scadono automaticamente, spesso in pochi minuti o ore.
- Unità di sessione:[ Ogni flusso di gasdotti ottiene credenziali distinte, rendendo impossibile riutilizzare un segreto compromesso da una precedente costruzione.
- Ricorso automatico:[] Vault può revocare i segreti dinamici immediatamente dopo la conclusione della pipeline, o quando il TTL scade.
Per implementare segreti dinamici, configurare un motore segreto (ad esempio, database, AWS, Azure) con un ruolo definito e TTL predefinito. Il tuo pipeline quindi richiede un contratto di locazione per quel ruolo e utilizza le credenziali restituite solo per la durata del lavoro.
2. Controllo di accesso a livello di implementazione
Le politiche di Vault sono scritte in HCL (HashiCorp Configuration Language) e seguono un modello di autorizzazioni basato sul percorso. Ogni politica concede o nega l'accesso a percorsi e funzionalità segreti specifici (leggi, crea, aggiorna, elimina, elenca, sudo).
Considerate queste linee guida:
- Le politiche basate sul ruolo:[] Creare politiche separate per lo sviluppo, la stadiazione e le condotte di produzione.
- Ricordi di matematica:[] Limitare l'accesso solo ai percorsi segreti esatti necessari. Ad esempio, una politica di database potrebbe consentire su ] ma negare tutto il resto.
- Accesso a tempo:[ Combina le politiche con TTL gettati e limiti di rinnovo. Anche se il gettone di un condotto viene rubato, la finestra di validità è limitata.
- Utilizza le identità:[[] Leva Vault Identity Entities and Groups per allegare politiche a specifici strumenti CI/CD, lavori o conti di servizio.
Esempio di politica minima per un canale CI:
path "database/creds/ci-app" {
capabilities = ["read", "list"]
}
path "secret/data/ci/*" {
capabilities = ["read", "list"]
}
path "auth/token/lookup-self" {
capabilities = ["read"]
}
3. Crittografia Segreti a riposo e in Transit
Vault automaticamente crittografa tutti i dati memorizzati nel suo backend utilizzando una chiave master. Questa chiave è in sé crittografata e può essere gestita con un servizio di gestione chiave esterna (KMS) o un modulo di sicurezza hardware (HSM). Tuttavia, la crittografia in transito è altrettanto importante.
Migliori pratiche:
- Abilita TLS:[] Configurare il server Vault con un certificato valido da una CA attendibile o da un PKI interno.
- Verificare i certificati:[[] I client CI/CD devono verificare la catena di certificati del server Vault.
- Utilizzare TLS comuni quando possibile:[ Per una maggiore sicurezza, richiedono certificati client dai sistemi CI/CD.
- Avoid plaintext sulla rete:[] Non cercare mai segreti su connessioni HTTP o non crittografate. La maggior parte degli agenti CI/CD supporta variabili di ambiente che possono iniettare l'indirizzo Vault e gettare in modo sicuro.
4. Automatizzare la rotazione segreta
La rotazione regolare riduce il danno da un segreto trapelato. I segreti dinamici di Vault vengono ruotati automaticamente con ogni richiesta di locazione, ma i segreti statici nei negozi KV hanno anche bisogno di rotazione. HashiCorp raccomanda di usare i meccanismi di Vault ]rotation] e ] leasing] con politiche periodiche per far rispettare la rotazione all'applicazione.
Per automatizzare la rotazione dei segreti statici:
- Conservare i segreti statici nel motore KV v2 di Vault, che supporta le operazioni di versione e check-and-set.
- Scrivere un lavoro programmato (cron, Nomad lotto periodico, o CI pipeline) che genera nuovi valori e li scrive a Vault.
- Aggiornare qualsiasi sistema dipendente (databases, gateway API) con il nuovo segreto tramite l'ecosistema plugin di Vault o script esterni.
- Utilizzare l'endpoint di Vault per ruotare la chiave di crittografia della radice a intervalli regolari.
5. Audit e Monitor Access
È possibile inviare registri di audit a file, syslog o servizi esterni come Elasticsearch, Splunk o Datadog. I registri di audit contengono l'IP client, il metodo di autenticazione, il percorso di richiesta, i dati di risposta (se consentito) e qualsiasi errore.
Pratiche di monitoraggio chiave:
- Abilita la registrazione dell'audit:[ Configurare almeno un dispositivo di audit. Utilizzare una destinazione sicura e solo per gli append-per evitare manomissioni.
- Serve di arresto:[] Crea avvisi per tentativi di autenticazione falliti, accesso a percorsi sensibili (ad esempio, credenziali di database di produzione), o revoca di locazione.
- Recensione regolarmente:[] Periodicamente verifica l'uso e i modelli di accesso della politica.
- Usa l'endpoint di Vault:[] Per lo streaming in tempo reale delle voci di registro, utile per il debug durante le corse CI/CD.
Integrazione del Vault in CI/CD Pipelines
Metodi di autenticazione per CI/CD
La scelta del metodo di autenticazione giusto è fondamentale per la sicurezza e la facilità d'uso.
- AppRole:[]] Raccomandato per l'autenticazione automatica. Un servizio CI/CD crea un ruolo Vault con un e . Il gasdotto autentica presentando entrambi, ricevendo un token client di breve durata.
- Kubernetes Auth:[] Ideale per le tubazioni in esecuzione in Kubernetes. Vault convalida il token del servizio Kubernetes tramite il server API Kubernetes e rilascia un token Vault basato sulle politiche di accesso del conto di servizio.
- AWS/GCP/Azure Auth:[ Per le tubazioni in esecuzione su fornitori di cloud, Vault può verificare il ruolo dei metadati di istanza o IAM per emettere token senza chiavi in codice rigido.
- Token-Based:[] Per semplici configurazioni, uno strumento CI/CD come Jenkins può iniettare un token Vault come una variabile segreta. Questo approccio è meno sicuro e dovrebbe essere utilizzato solo con gettoni molto di breve durata.
Configurare i TTL token per corrispondere alla durata massima di esecuzione del gasdotto (ad esempio, 30 minuti) e impostare un numero ragionevole di usi (se applicabile).
Integrazione con gli strumenti specifici CI/CD
Jenkins:[] Usare il Plugin HashiCorp Vault. Configurare un indirizzo server Vault, metodo di autenticazione (AppRole o token), e definire le tubazioni che catturano i segreti tramite passi. Il plugin supporta l'incodifica base64, l'iniezione dei file e l'assegnazione variabile dell'ambiente.
GitLab CI:[] GitLab CI supporta in nativo Vault tramite il token . Configura Vault ad accettare l'autenticazione JWT da parte di GitLab JWT emittente. In , usa il blocco ] per richiedere un Vault token e poi secret CLI
GitHub Azioni:[] Usare l'azione GitHub. Supporta l'autenticazione OIDC (ricomposta), token, o AppRole. Aggiungi un passo che mappa i segreti alle variabili di ambiente o li scrive ai file. Per OIDC, configurare Vault con un metodo JWT auth affidabile per emettere [Fpositories]
CircleCI:[] Usare le chiamate a livello di Google o API diretta. La funzione di contesto di CircleCI può memorizzare un token Vault, ma è preferito AppRole o OIDC.
Flusso di lavoro con AppRole a Jenkins
Considera un canale Jenkins che costruisce un'immagine Docker e lo distribuisce a un cluster Kubernetes, invece di memorizzare la configurazione Kubernetes e la password del registro di Jenkins, li fetches from Vault a runtime.
- Vault preconfigurazione:[]] Creare una politica che consenta l'accesso a [ e []]. Creare un ruolo AppRole con quella politica, un TTL di 10 minuti, e un memorizzato in Jenkins come credenziali.
- Pipeline Step:[] Usare il Plugin HashiCorp Vault con l'ID ruolo AppRole (anche una credenziale) e il SecretID. Il plugin autentica e ottiene un token Vault.
- Fetch Secrets:[] Leggi la password del registro Docker e token Kubernetes da Vault. Il plugin li scrive a variabili di ambiente temporanee o file.
- Usage:[] Correre ] con le credenziali. Quindi eseguire con la configurazione. Dopo il passaggio, il condotto termina e il token Vault scade.
- Cleanup:[] Opzionalmente revocare il SecretID dell'AppRole se non è desiderato riutilizzabilità.
Considerazioni avanzate
Motori segreti e loro casi di utilizzo
Vault supporta molti motori segreti. Per CI/CD, i più rilevanti sono:
- KV v2 (Key-Value):[] Conservare segreti statici come chiavi API, certificati o impostazioni specifiche per l'ambiente.
- Database:[]] Generare utenti temporanei di database con credenziali dinamiche per MySQL, PostgreSQL, MongoDB e altri.
- I fornitori di cloud (AWS, Azure, GCP):[] Genera ruoli temporanei IAM, principi di servizio o chiavi di account di archiviazione.
- PKI:[] Emettere certificati TLS di breve durata per mTLS tra microservizi o per registri dei container.
- Trassegna:[]] Crittografia / decifra dati senza memorizzarlo — utile per la crittografia di artefatti prima di memorizzarli in un repository.
Le migliori pratiche di progettazione delle politiche
Politiche di progettazione con una chiara convenzione di denominazione e struttura gerarchica.
- – per segreti specifici di CI.
- – per la messa in scena di segreti ambientali.
- – per i segreti di produzione (con accesso molto limitato).
Evita di usare percorsi jolly troppo in generale. Invece, concedere l'accesso a percorsi segreti specifici. Utilizzare ] regole con parsimonia; Vault negare di default è sufficiente. Combinazioni di e ]] dovrebbero essere testate prima di distribuire alla produzione. Il comando Vault CLI è utile per la validazione.
Backup e ripristino di emergenza
Il backend di storage di Vault (consul, raft, file, ecc.) deve essere eseguito regolarmente. Se si utilizza lo storage integrato (Raft), abilita i backup istantanei. Per le tubazioni CI/CD che dipendono da Vault per tutti i segreti, un'interruzione di Vault distribuisce le distribuzioni.
- Eseguire Vault in una configurazione molto disponibile (HA) con almeno tre nodi.
- Sto cercando un set di segreti in un negozio criptato alternativo (ad esempio, AWS Secrets Manager) con un breve TTL — ma trattalo come ultima risorsa.
- Testare regolarmente le procedure di ripristino dei disastri, compreso il ripristino da un'istantanea.
Pitfalls comuni da evitare
- Hardcoding a Vault Token in CI/CD Variables:[] Anche se il token viene memorizzato come una variabile segreta, può essere trapelato attraverso log di costruzione o artefatti.
- Utilizzando il Token Root in Pipelines:[ Il token root dovrebbe essere utilizzato solo per inizializzazione ed emergenze. Tutti i condotti devono utilizzare token a spettro limitato con politiche appropriate.
- Non impostare TTL corti:[] Un canale CI funziona tipicamente per minuti, non ore. Impostare TTL token per la durata del lavoro prevista più un piccolo buffer.
- Ignorando i registri di controllo:[ Senza il monitoraggio dell'audit, si perdono gli indicatori di compromesso o le politiche malconfigurate.
- Storing Secrets in Pipeline Outputs:[] Non stampare mai segreti per console, file di registro, o costruire artefatti.
- Per la revoca delle locazioni:[] I segreti dinamici rimangono validi fino alla scadenza del contratto o alla revoca.
Conclusioni
Integrando HashiCorp Vault nelle tue tubazioni CI/CD elimina la fonte più pericolosa di perdite segrete: credenziali statiche con codici rigidi o con un sistema di protezione ambientale. Seguindo le migliori pratiche qui delineate, i segreti dinamici, il controllo dell'accesso con precisione, la crittografia, la rotazione automatizzata e l'auditing completo, è possibile ottenere un flusso di lavoro di gestione segreto robusto e pronto alla produzione.
Iniziare piccolo: adottare l'autenticazione AppRole per un pipeline, prendere una credenziali di database dinamica e monitorare i registri di audit. Espandi gradualmente per coprire tutte le tubazioni e i tipi segreti. Con Vault, sicurezza e velocità andare di pari passo, assicurando che le uscite CI/CD siano sicure e affidabili.
Risorse aggiuntive: