Questo è il terzo articolo della nostra serie di articoli su Caravan, la piattaforma cloud nativa di Bitrock basata sullo stack di HashiCorp. Consultate la prima e la seconda parte.
Caravan si basa in larga misura sulle funzionalità offerte da HashiCorp Vault. Vault è alla base dell’elevata dinamicità e automazione di Caravan. Possiamo addirittura dire che Caravan non sarebbe stato lo stesso senza Vault, data la sua profonda integrazione con tutti i componenti in uso.
In questo articolo mostriamo alcune delle funzionalità di Vault su cui si basa Caravan.
PKI Secrets Engine
Il PKI secrets engine genera certificati X.509 dinamici. È possibile caricare un’autorità di certificazione esistente o lasciare che Vault ne generi una nuova, e in questo modo Vault ne gestirà completamente il ciclo di vita. Questo motore sostituisce il processo manuale di generazione di chiavi private e CSR, di invio alla CA e di attesa del completamento del processo di verifica e firma. Utilizzando TTL brevi, è anche meno probabile che sia necessario revocare un certificato, quindi le CRL sono brevi e l’intero sistema è facilmente scalabile per grandi carichi di lavoro.
In Caravan utilizziamo la PKI di Vault per firmare sia i certificati Consul Connect mTLS sia i certificati lato server (ad esempio Consul e Nomad) per le comunicazioni TLS.
Dynamic Secrets di Consul & Nomad
I dynamic segrets sono una caratteristica fondamentale di Vault. La loro peculiarità è che i segreti non esistono finché non vengono letti, quindi non c’è il rischio che qualcuno li rubi o che un altro client usi gli stessi segreti. Vault dispone di meccanismi di revoca integrati: in questo modo i segreti dinamici vengono periodicamente revocati e rigenerati, riducendo al minimo l’esposizione al rischio.
Vault integra i segreti dinamici con diversi componenti:
- Fornitori di cloud (ad es. AWS, Azure, GCP, …)
- Database (ad esempio PostgreSQL, Elasticsearch, MongoDB, …)
- Console
- Nomad
- e molti altri…
In Caravan, utilizziamo il motore dei segreti dinamici per la generazione dei token di accesso per gli agenti Consul e Nomad. Prima di tutto, definiamo nel Vault i ruoli Consul e Nomad necessari con le autorizzazioni necessarie e poi li mappiamo nei ruoli Vault. In questo modo, consentiamo alle entità di Vault autenticate di richiedere i token Consul e Nomad con le autorizzazioni definite nel ruolo associato. Ad esempio, abbiamo impostato il ruolo Nomad Server e il ruolo Nomad Client, con ambiti di autorizzazione diversi.
Backend di autenticazione Cloud
Distribuire le credenziali di accesso ai client di Vault potrebbe essere un compito difficile e delicato, soprattutto in ambienti dinamici con istanze effimere. Per nostra fortuna, Vault ha affrontato questa operazione e l’ha semplificata molto nello scenario del cloud. Vault implementa diversi metodi di autenticazione che dipendono dal cloud provider per l’autenticazione delle entità di Vault.
Ad esempio, quando Vault viene eseguito con istanze AWS, è possibile autenticare le entità in base al ruolo AWS IAM associato. Vault sfrutta le API AWS per convalidare l’identità dei client, utilizzando le primitive offerte dal cloud. In questo modo, un client di Vault in esecuzione in un’istanza AWS non deve conoscere alcuna credenziale di accesso legata a Vault per accedere a Vault, ma AWS convalida direttamente l’identità del client. La stessa logica si applica anche ad altri provider cloud come Azure, GCP e molti altri.
In Caravan, ci affidiamo ai backend di autenticazione del cloud per autenticare sia i componenti lato server che quelli lato client della piattaforma. In questo modo, non abbiamo più bisogno di distribuire le credenziali alle istanze spinned, che sarebbe un compito difficile e noioso.
Vault Agent
Vault Agent è un daemon client che fornisce funzionalità utili ai client che devono integrarsi e comunicare con Vault senza modificare il codice dell’applicazione client. Vault Agent consente una facile autenticazione a Vault in un’ampia varietà di ambienti. Vault Agent consente la memorizzazione nella cache lato client di risposte contenenti token appena creati e di risposte contenenti segreti in leasing generati da questi token appena creati. Vault Agent consente il rendering di modelli forniti dall’utente da parte di Vault Agent, utilizzando il token generato dall’Auto-Auth.
In particolare, Caravan si affida ai modelli di Vault Agent per il rendering dei file di configurazione di una serie di componenti. Ad esempio, il file di configurazione degli agenti Nomad è un modello renderizzato da Vault Agent, poiché contiene segreti dinamici come il token Consul e i certificati TLS utilizzati per la comunicazione con i componenti del server.
Vuoi saperne di più su Caravan? Visita il sito web dedicato, consulta il nostro repository GitHub ed esplora la nostra documentazione.
Autore: Matteo Gazzetta, DevOps Engineer @ Bitrock – Simone Ripamonti, DevOps Engineer @ Bitrock