Sägetstrasse 18, 3123 Belp, Switzerland +41 79 173 36 84 info@ict.technology

      Terraform @ Scale - Parte 1e: Scalabilità oltre i confini organizzativi

      La gestione dell'infrastruttura Terraform diventa particolarmente impegnativa quando si estende su più unità aziendali o addirittura su diverse organizzazioni clienti.
      In tali scenari, non è più sufficiente configurare singoli Workspaces o Pipeline in modo tecnicamente corretto. I decisori, i CTO, gli architetti e i senior engineer hanno invece bisogno di responsabilità chiaramente strutturate, di una governance rigorosa e di processi completamente automatizzati per garantire coerenza, sicurezza ed efficienza. Abbiamo già trattato ampiamente questa separazione degli States, ma riassumiamola ancora una volta in modo schematico.

      Strutture dei team e responsabilità

      La supervisione dell'intera infrastruttura può essere idealmente suddivisa in almeno tre aree di responsabilità:

      Platform-Engineering-Team

      Il Platform-Engineering-Team gestisce le Root-Tenancies nonché tutti gli account cloud centrali e i compartimenti dell'azienda, creando così il quadro organizzativo per tutte le attività successive.

      Inoltre, il team crea, versiona e mantiene i moduli di base utilizzati da tutti gli altri team per garantire una base tecnica uniforme.

      Allo stesso tempo, definisce linee guida architetturali vincolanti, standard di tagging e convenzioni di denominazione - regole che assicurano coerenza e trasparenza a livello aziendale.

      Infine, il Platform-Engineering-Team gestisce e rinforza il backend di Terraform e la piattaforma CI/CD, garantendo un funzionamento stabile, scalabile e conforme ai requisiti di revisione.

      Service-Teams

      I Service-Teams utilizzano i moduli di base forniti e sviluppano moduli di servizio specifici per dominio o prodotto, adattandoli esattamente ai rispettivi ambiti di competenza.

      Si assumono la responsabilità dell'infrastruttura delle proprie unità aziendali e trasformano direttamente i requisiti funzionali in artefatti di Infrastructure-as-Code.

      I moduli necessari vengono ottenuti comodamente tramite una Private Registry, Git-Submodule o package manager consolidati, garantendo una fornitura coerente delle versioni più aggiornate.

      Applikations-Teams

      Gli Applikations-Teams effettuano il provisioning delle risorse specifiche per le applicazioni sulla base dei moduli di servizio, potendosi così concentrare pienamente sul valore aggiunto del proprio software.

      Integrano infrastruttura e codice in pipeline di deployment end-to-end, rendendo i rilasci riproducibili, auditabili e automatizzati.

      Nonostante l'elevata autonomia, si impegnano a rispettare tutte le linee guida definite centralmente per garantire sicurezza e governance all'interno della piattaforma complessiva.

      Zone di fiducia e isolamento degli States

      Ogni livello organizzativo possiede una propria zona di fiducia. Le configurazioni del backend, le IAM-Policies e le pipeline CI/CD garantiscono che i team possano accedere esclusivamente agli States di loro competenza. In questo modo si impedisce, ad esempio, che un Applikations-Team modifichi involontariamente le risorse della piattaforma.

      Governance e Compliance

      Policy-as-Code

      HashiCorp Sentinel o Open Policy Agent consentono l'applicazione di regole vincolanti sotto forma di codice, creando così un'istanza di controllo automatizzata durante l'intero ciclo di vita dell'infrastruttura.


      import "tfplan/v2" as tfplan
      
      mandatory_tags = ["Owner","CostCenter","Environment"]
      
      validate_instances = rule {
        all tfplan.resource_changes as _, rc {
          rc.type is "oci_core_instance" and rc.change.actions contains "create" implies
            all mandatory_tags as tag { rc.change.after.defined_tags[tag] is not null }
        }
      }
      
      main = rule { validate_instances }
      

      Automazione della Compliance

      La generazione automatica della documentazione di compliance direttamente dagli output di Terraform riduce il lavoro manuale e consente di disporre in ogni momento di prove di audit verificabili.

      Inoltre, scansioni regolari dell'infrastruttura produttiva effettuano un confronto continuo con lo stato dichiarato, rilevando tempestivamente eventuali deviazioni.

      Strategie Multi-Account

      Account cloud separati aumentano l'isolamento tra i tenant, ma richiedono una gestione disciplinata delle credenziali e pipeline CI/CD adattate per non compromettere operatività e sicurezza. Pertanto, oltre ai Terraform Workspaces, è consigliabile utilizzare anche Provider-Aliases come dimostrato qui:


      provider "oci" {
        alias            = "tenant_a"
        tenancy_ocid     = var.tenant_a_ocid
        user_ocid        = var.tenant_a_user_ocid
        fingerprint      = var.tenant_a_fingerprint
        private_key_path = var.tenant_a_private_key_path
        auth_type        = "api_key"
        region           = var.tenant_a_region
      }
      
      provider "oci" {
        alias        = "tenant_b"
        tenancy_ocid = var.tenant_b_ocid
        auth_type    = "api_key"
      }

      Integrazione CI/CD

      Un workflow robusto della pipeline attraversa sistematicamente le fasi di Validation, Planning, Approval, Apply e Verification, costituendo così la base per deployment riproducibili e auditabili in ambienti Multi-Tenant.

      Configurazione dinamica dei Tenant

      Le informazioni sui tenant possono essere lette dinamicamente da diverse fonti. Solitamente si tratta di database o directory, ma possono anche essere semplici strutture YAML o JSON. Un esempio:


      tenants:
        - name: customer_a
          environment: production
          region: eu-frankfurt-1
          approval_required: true
        - name: internal_test
          environment: development
          region: eu-amsterdam-1
          approval_required: false

       

      Job di esempio per la validazione delle Policy (GitLab)

      Se non utilizzate Sentinel e vi affidate invece a uno strumento esterno, potete integrarlo facilmente come passaggio aggiuntivo nella pipeline, come ad esempio lo script Python di questo esempio:


      validate_policies:
        image: hashicorp/terraform:1.7
        stage: validate
        script:
          - terraform init
          - terraform plan -out=tfplan
          - terraform show -json tfplan | gzip > tfplan.json.gz
          - python scripts/validate_policies.py tfplan.json.gz
        artifacts:
          paths:
            - tfplan.json.gz

       

      Self-Service-Portal

      Un Self-Service-Portal con un catalogo di moduli curato consente ai reparti specialistici di ordinare infrastrutture standardizzate con pochi clic, mentre in background pipeline CI/CD automatizzate garantiscono un provisioning controllato.

      Se rendete obbligatorio l'uso di un Self-Service-Portal, migliorerete anche l'intera compliance aziendale, poiché solo il portale stesso avrà il permesso di effettuare il provisioning a livello dei team applicativi. Ciò che il Self-Service-Portal non fornisce, non potrà più essere implementato, riducendo così il rischio di Shadow-IT e facilitando l'implementazione di Zero Trust, poiché i team applicativi stessi non saranno più considerati un'organizzazione di fiducia. In questo modo, tratterete i vostri utenti finali interni come clienti.

      Funzionalità importanti di Terraform Cloud ed Enterprise

      Per infrastrutture complesse non si può prescindere da Terraform Cloud o Terraform Enterprise. Se attribuite importanza alla piena sovranità dei dati, come è standard nell'Unione Europea, o se siete soggetti a requisiti normativi in materia di sicurezza, Terraform Enterprise rappresenta l'unica soluzione praticabile.  

      Gestione dei Workspaces

      Workspaces separati per tenant, come supportato da Terraform Enterprise e Terraform Cloud (da non confondere con il comando CLI terraform workspace della versione gratuita di Terraform, che è una cosa completamente diversa), garantiscono un isolamento rigoroso e permettono al contempo processi di versionamento e approvazione granulari per ogni tenant.

      Tag e Variable Sets riutilizzabili semplificano notevolmente la gestione delle configurazioni e riducono le duplicazioni in ampi paesaggi di Workspace.

      Gestione di team e permessi

      Una matrice di ruoli finemente graduata distingue per Workspace tra permessi di lettura, scrittura e approvazione, supportando così una chiara separazione dei compiti.

      L'integrazione SSO senza complicazioni collega Terraform Cloud o Enterprise al sistema di identità aziendale esistente e accelera i processi di onboarding e offboarding.

      Run Triggers e dipendenze

      Le modifiche in un Workspace centrale possono automaticamente innescare Plans in Workspaces dipendenti, garantendo aggiornamenti consistenti su più livelli.

      Private Registry

      La Private Registry gestisce la versione centrale di tutti i moduli, ne pubblica automaticamente la documentazione e crea un Single Point of Truth per i componenti infrastrutturali riutilizzabili.

      Previsioni dei costi e rilevamento della deriva

      Una previsione dei costi integrata fornisce stime affidabili dei costi infrastrutturali per tenant già prima dell'Apply, consentendo una pianificazione del budget precisa. I Cloud-Provider offrono generalmente strumenti a tal fine, ma anche laddove un Cloud-Provider non lo supporti nativamente, è possibile realizzarlo tramite Pricing-Tags definiti autonomamente. I valori di questi Tag possono, ad esempio, provenire da fonti come file CSV o database. Se i prezzi cambiano, l'aggiornamento nei componenti infrastrutturali è semplice, poiché i custom tags sono solitamente aggiornabili e non distruttivi. La vera sfida risiede invece nelle tariffe basate sul volume come il traffico di rete, ovvero costi nascosti come quelli tipici di AWS.  

      Parallelamente, il rilevamento della deriva monitora continuamente le discrepanze tra lo stato dichiarato e quello reale, segnalando immediatamente anomalie prima che si trasformino in problemi. Il rilevamento della deriva è una funzionalità di Terraform Enterprise e Terraform Cloud.

      Auditing e sicurezza delle revisioni

      AuditUn setup Terraform scalabile su più tenant necessita non solo di responsabilità strutturate e automazione continua, ma anche di auditabilità completa di tutte le modifiche alle risorse infrastrutturali.

      Terraform Cloud e Terraform Enterprise offrono un audit log integrato che documenta tutti gli eventi rilevanti - come l'avvio di un Plan, modifiche alle variabili, assegnazioni ai team o l'esecuzione di un terraform apply - in modo cronologico, immutabile ed esportabile. Questi log possono essere integrati, se necessario, in sistemi SIEM esterni per soddisfare policy di sicurezza, requisiti legali o standard di compliance settoriali come ISO 27001, BSI C5 o SOC 2.

      Per le aziende con esigenze particolarmente elevate di tracciabilità e sicurezza delle revisioni, è consigliabile integrare anche una gestione centralizzata dei log basata su soluzioni come Elastic Stack o Splunk. In questo modo non solo si monitorano le attività a livello di Terraform, ma si possono correlare e analizzare anche informazioni contestuali provenienti da GitLab, pipeline CI/CD, Identity-Provider e API dei Cloud-Provider.

      Particolarmente utili sono i meccanismi di collegamento dei Changeset ai sistemi di ticketing (ad esempio Jira) e un chiaro processo di approvazione dei cambiamenti, che assicura che ogni modifica venga controllata e approvata da almeno una persona autorizzata. Questo rappresenta un elemento centrale delle strategie di Separation of Duties e Least Privilege.

      Conclusione

      La scalabilità oltre i confini organizzativi richiede molto più che una semplice conoscenza di Terraform. Chi combina strutture di team chiaramente definite, controlli di policy coerenti, processi di compliance automatizzati e moderne pipeline CI/CD con le funzionalità di Multi-Tenancy di Terraform Cloud o Enterprise, crea la base per un'infrastruttura sicura, riproducibile ed efficiente, che funziona in modo affidabile anche attraverso numerosi tenant.