Punto fermo degli stack tecnologici DevOps, Terraform è uno strumento di provisioning e gestione dell’Infrastructure-as-Code (IaC) sviluppato da HashiCorp. Sebbene Terraform sia raramente associato alla sicurezza delle applicazioni e non sia direttamente correlato alla sicurezza e alla protezione informatica delle applicazioni, il suo corretto utilizzo è fondamentale per l’implementazione delle best practice di sicurezza.
Poiché DevOps continua a trasformarsi in DevSecOps e gli attacchi alla supply chain continuano a violare i sistemi aziendali, l’uso di Terraform in un’ottica di sicurezza è fondamentale per proteggere gli ambienti cloud.
Un modo particolarmente utile per massimizzare la sicurezza delle app quando si usa Terraform è l’integrazione di Open Policy Agent (OPA) quando si creano criteri di sicurezza come codice. OPA funge da esecutore delle policy scritte come codice. Aggiunge a Terraform la capacità di valutare le configurazioni dell’infrastruttura rilevanti per la sicurezza.
OPA facilita la valutazione dei piani di Terraform per rilevare le configurazioni errate della sicurezza durante il ciclo di sviluppo, soprattutto nella parte iniziale e vicino alla fase di distribuzione. In questo modo si garantisce che l’infrastruttura non ancora ritenuta sicura non venga fornita, impedendo l’esposizione delle applicazioni alle vulnerabilità. Inoltre, OPA mette in atto dei guardrail per l’infrastruttura basati su policy, come la segnalazione di regole di ingresso “troppo permissive” o poco rigorose.
Inoltre, OPA supporta l’integrazione con le pipeline CI/CD, consentendo alle organizzazioni di applicare in modo coerente e automatico i criteri di sicurezza. Blocca i piani Terraform che sono considerati in violazione delle politiche di sicurezza esistenti.
OPA aiuta le organizzazioni a spostare a sinistra il loro approccio alla sicurezza, in quanto fornisce un modo proattivo di condurre test di sicurezza, a vantaggio della sicurezza delle app.
In Terraform, il looping è la capacità di generare automaticamente diverse risorse o moduli. Viene utilizzato quando si creano diversi record DNS, si distribuiscono più istanze in diverse zone di disponibilità e si gestiscono più account utente.
Il looping è utile perché riduce la necessità di scrivere ripetutamente lo stesso blocco di risorse, che è l’obiettivo dell’efficienza IaC. Questo approccio consente agli ingegneri di creare istanze su base dinamica, in quanto disaccoppia la logica di creazione di più risorse dalle configurazioni specifiche.
Essendo un meccanismo di automazione dell’infrastruttura, il looping di Terraform non ha necessariamente un impatto diretto sulla sicurezza delle applicazioni. Tuttavia, il modo in cui viene eseguito il looping può influire sulla sicurezza delle applicazioni. Per questo è importante che il looping sia gestito con cautela. Nel caso del ciclo “for_each” di Terraform, ad esempio, è importante sottolineare la gestione sicura dei dati, evitando di memorizzare dati sensibili come password e chiavi API all’interno del ciclo for_each.
Inoltre, è fondamentale rivedere la logica dei cicli per assicurarsi che l’iterazione sulla struttura di dati prevista proceda come previsto e che gli errori siano risolti. Inoltre, è consigliabile osservare il principio del minimo privilegio, le regole di ingresso e di uscita appropriate e un adeguato controllo e revisione delle versioni.
L’hardening della configurazione, come suggerisce l’espressione, consiste nell’ottenere impostazioni dell’infrastruttura ottimizzate (e possibilmente regolate e riadattate) per ottenere la configurazione più adatta a ridurre al minimo i problemi di sicurezza. Comporta la conformità alle best practice o alle linee guida di sicurezza che possono essere applicate tramite Terraform. Ad esempio, alcuni fornitori di cloud possono consigliare di disabilitare i servizi inutilizzati su una specifica immagine di macchina virtuale. Terraform può essere impostato in modo da configurare automaticamente l’immagine, al momento del provisioning, per disabilitare i servizi inutilizzati fin dall’inizio.
D’altra parte, i moduli di Terraform possono supportare la sicurezza delle applicazioni grazie al loro ruolo nella costruzione di un ambiente applicativo sicuro. Questi moduli consentono il concetto di security-by-design e promuovono l’applicazione coerente delle pratiche di sicurezza grazie alle configurazioni di sicurezza in essi incorporate.
I moduli Terraform facilitano anche l’integrazione di strumenti di sicurezza, come gli scanner di sicurezza, che vengono distribuiti automaticamente con le risorse dell’infrastruttura. Inoltre, i moduli aiutano a controllare la possibilità di fuga di vulnerabilità che possono emergere a causa di configurazioni errate.
Terraform è dotato di una funzione di gestione dei dati sensibili che può rafforzare in modo significativo la sicurezza delle applicazioni, anche se indirettamente. Questo strumento IaC consente di ridurre al minimo i rischi di esposizione delle credenziali e di migliorare la verificabilità e la conformità.
Terraform supporta la gestione sicura dei segreti, consentendo di evitare di incorporare credenziali e segreti come le chiavi API nel codice stesso di Terraform. I dati sensibili possono essere contenuti in sistemi di controllo delle versioni, nel Vault di HashiCorp o in strumenti di gestione dei segreti di terze parti, per garantire che l’accesso al codice IaC non significhi automaticamente accesso ai dati sensibili.
A volte le organizzazioni memorizzano le credenziali delle app nel loro codice IaC, soprattutto quelle che sono nuove al provisioning e alla gestione IaC. Terraform offre modi per evitare di farlo. Inoltre, le funzioni di gestione dei dati di Terraform, insieme all’uso delle variabili d’ambiente, supportano i requisiti di conformità della sicurezza dei dati e migliorano la verificabilità.
La sicurezza dell’infrastruttura contribuisce in modo significativo alla creazione di posture di sicurezza delle app affidabili. Una gestione meticolosa dell’IaC riduce al minimo le configurazioni errate e i problemi di sicurezza che, a loro volta, contribuiscono a ridurre le superfici di attacco e le vulnerabilità. Gli attori delle minacce avranno difficoltà a compromettere le app o a sfruttare le vulnerabilità a livello di applicazione se l’infrastruttura è costruita con pratiche di sicurezza solide.
Anche in questo caso, Terraform non è progettato per garantire la sicurezza delle applicazioni e non ha strumenti o funzioni specifiche che proteggano direttamente le applicazioni stesse. Tuttavia, può aiutare a stabilire le basi per la sicurezza delle applicazioni, in particolare il rilevamento e la risoluzione di configurazioni errate, l’integrazione di un agente di sicurezza, le migliori pratiche di sicurezza del cloud e la gestione dei dati sensibili.
Terraform non è destinato esclusivamente al cloud, ma la maggior parte dei suoi utenti tende ad avere a che fare con ambienti ibridi e multi-cloud. È perfettamente sensato allineare la sicurezza di Terraform con le raccomandazioni di sicurezza stabilite dai fornitori di servizi cloud e dagli esperti di sicurezza, principalmente i benchmark CIS, l’hardening della configurazione e la sicurezza dei moduli.
I benchmark CIS si riferiscono all’insieme di best practice pubblicate dal Center for Internet Security (CIS). Queste best practice si applicano ai prodotti di oltre 25 fornitori e, sebbene questi benchmark siano destinati principalmente alla sicurezza dell’infrastruttura cloud sottostante, la loro osservanza offre vantaggi anche per la sicurezza delle applicazioni. Questi vantaggi includono la riduzione delle superfici di attacco informatico che coinvolgono le app, la mitigazione delle vulnerabilità di configurazione errata e la creazione di una base sicura per lo sviluppo delle app.