Che cos'è la politica come codice?

Policy-as-code è un approccio alla gestione delle policy in cui le policy vengono definite, aggiornate, condivise e applicate utilizzando il codice. Sfruttando l'automazione basata sul codice invece di affidarsi a processi manuali per gestire le policy, le policy-as-code consentono ai team di muoversi più rapidamente e di ridurre il potenziale di errori dovuti all'uomo.

Allo stesso tempo, un approccio di tipo policy-as-code a domini come quello della sicurezza permette di definire e gestire le policy in modi che diversi tipi di stakeholder - come gli sviluppatori e gli ingegneri della sicurezza - possono comprendere.

Questa pagina spiega come funziona la policy-as-code, perché è importante e come sfruttarla nel contesto della sicurezza.

 

Definizione di Policy-As-Code

Per capire cosa significa policy-as-code, bisogna innanzitutto comprendere la definizione di "policy".

In questo contesto, una policy è qualsiasi tipo di regola, condizione o istruzione che regola le operazioni o i processi IT. Una politica potrebbe essere una regola che definisce quali condizioni devono essere soddisfatte affinché un codice superi un controllo di sicurezza e possa essere distribuito, ad esempio. Oppure, potrebbe essere un insieme di procedure che vengono eseguite automaticamente in risposta a un evento di sicurezza.

La politica come codice è l'uso del codice per definire e gestire regole e condizioni. Con un approccio di tipo policy-as-code, i team scrivono le politiche utilizzando un qualche tipo di linguaggio di programmazione, come Python, YAML o Rego. Il linguaggio specifico dipende solitamente dagli strumenti di gestione e applicazione delle policy-as-code che sta utilizzando.

Quando gli ingegneri devono apportare aggiornamenti, lo fanno modificando il codice esistente. Possono anche condividere il codice con altri per dare loro visibilità alle loro politiche, utilizzando i sistemi di controllo di versione (VCS). E, ultimo ma non meno importante, possono utilizzare un motore di applicazione delle policy come codice per garantire il rispetto delle policy. Un motore di applicazione può essere un codice di policy-as-code autonomo, oppure può essere integrato in una piattaforma più grande.

 

Politica come codice vs. Infrastruttura come codice

Il concetto di policy-as-code può sembrare simile a Infrastructure as Code, o IaC. L'IaC, che utilizza file basati su codici per automatizzare la configurazione e il provisioning dell'infrastruttura, è una pratica comune da anni per i team operativi IT.

Mentre la IaC è vantaggiosa per i team operativi IT che devono effettuare il provisioning dell'infrastruttura, le policy-as-code possono migliorare le operazioni di sicurezza, la gestione della conformità, la gestione dei dati e molto altro ancora.

 

I vantaggi di Policy-as-Code

Rispetto all'alternativa - che consiste nel gestire manualmente regole, condizioni e procedure - le policy-as-code offrono diversi vantaggi critici:

  • Efficienza: Quando le politiche sono definite come codice, possono essere condivise e applicate automaticamente in scala virtualmente illimitata. Questo è molto più efficiente che richiedere ai tecnici di applicare manualmente una politica ogni volta che è necessario farlo. L'aggiornamento e la condivisione delle politiche sono anche più efficienti quando le politiche sono definite in un codice chiaro e conciso, anziché essere descritte in un linguaggio umano che alcuni ingegneri potrebbero interpretare in modo diverso da altri.
  • Velocità: La capacità di automatizzare l'applicazione delle policy significa anche che le policy-as-code si traducono in operazioni più rapide rispetto a un approccio manuale.
  • Visibilità: Quando le politiche sono definite nel codice, è facile per tutti gli stakeholder utilizzare il codice per capire cosa succede all'interno di un sistema. Possono rivedere le regole di allerta o di bonifica semplicemente controllando quali politiche basate sul codice sono in vigore, ad esempio, invece di dover chiedere ad altri ingegneri e attendere una risposta.
  • Collaborazione: Fornendo un mezzo uniforme e sistematico per gestire le politiche, le policy-as-code semplificano la collaborazione. Questo include la collaborazione non solo all'interno dello stesso team, ma anche tra diversi tipi di team, soprattutto tra gli sviluppatori (che sono abituati a pensare e a lavorare in termini di codice) e gli specialisti di altri settori, come il team addetti alla sicurezza o le operazioni IT.
  • Precisione: Quando i team definiscono e gestiscono le politiche utilizzando il codice, evitano il rischio di commettere errori di configurazione quando gestiscono un sistema manualmente.
  • Controllo della versione: Se tiene traccia delle diverse versioni dei suoi file di policy, man mano che vengono modificate, le policy-as-code assicurano che possa tornare facilmente ad una configurazione precedente nel caso in cui una nuova versione della policy crei un problema.
  • Test e validazione: Quando le politiche sono scritte nel codice, è facile convalidarle utilizzando strumenti di auditing automatizzati. In questo modo, le policy-as-code possono contribuire a ridurre il rischio di introdurre errori critici negli ambienti di produzione.

 

Come utilizzare la Policy-As-Code

Il modo più semplice per trarre vantaggio dalle policy-as-code oggi è adottare strumenti che supportano nativamente le policy-as-code per qualsiasi dominio che desidera gestire con un approccio di policy-as-code.

Ad esempio, nel campo della sicurezza, Prisma Cloud, Bridgecrew e Checkov consentono ai team di definire le politiche di sicurezza utilizzando il codice. Possono anche eseguire automaticamente la scansione e l'audit dei file di policy, per rilevare configurazioni errate o vulnerabilità prima della distribuzione. Questo approccio è un modo in cui questi strumenti semplificano la gestione della postura di sicurezza del cloud.

Potrebbe anche voler esplorare strumenti come Open Policy Agent, che mira a fornire un quadro comune per l'applicazione di policy-as-code a qualsiasi dominio. Ad oggi, tuttavia, l'adozione da parte dei fornitori di framework di policy-as-code basati sulla comunità come questo rimane limitata, motivo per cui la ricerca di strumenti del fornitore con supporto nativo di policy-as-code è il percorso più semplice per implementare un approccio di policy-as-code alla sicurezza o a qualsiasi altro dominio IT.

 

Domande frequenti sulla politica come codice

Infrastructure as Code (IaC) è un metodo di gestione e provisioning dell'infrastruttura informatica attraverso file di definizione leggibili dalla macchina, piuttosto che la configurazione dell'hardware fisico o gli strumenti di configurazione interattivi. Consente agli sviluppatori e ai professionisti IT di gestire, monitorare e fornire automaticamente le risorse attraverso il codice, migliorando la coerenza e riducendo gli errori manuali. L'IaC supporta la scalabilità e la flessibilità dei servizi cloud, assicurando che le distribuzioni dell'infrastruttura siano ripetibili e standardizzate.
La Compliance as Code è una pratica in cui le specifiche di conformità sono scritte nel codice e integrate nella pipeline di distribuzione automatizzata. Assicura che l'infrastruttura e le applicazioni IT aderiscano continuamente agli standard normativi e di sicurezza, con controlli di conformità codificati per processi di convalida automatici e ripetibili. Questo approccio minimizza l'errore umano e riduce il tempo e l'impegno necessari per gli audit di conformità.
Security as Code prevede l'integrazione delle pratiche di sicurezza nel ciclo di vita dello sviluppo del software, codificando le politiche e i controlli di sicurezza. Consente la valutazione e l'applicazione automatizzata della sicurezza all'interno della pipeline CI/CD, assicurando che i controlli di sicurezza siano parte integrante del processo di consegna del software, anziché un ripensamento. Strumenti come gli scanner di vulnerabilità automatizzati e i sistemi di gestione della configurazione vengono impiegati per mantenere le applicazioni sicure dall'inizio alla distribuzione.
La gestione della configurazione è il processo di gestione sistematica delle modifiche a un sistema in modo da garantire l'integrità nel tempo. Comporta la manutenzione dei registri e degli aggiornamenti dei componenti software e hardware, assicurando che i sistemi siano configurati in modo coerente e che qualsiasi modifica sia tracciabile. Strumenti di gestione centralizzata della configurazione come Ansible, Puppet e Chef automatizzano la distribuzione e il funzionamento dell'infrastruttura, consentendo scalabilità e affidabilità.
Gli script di automazione sono procedure codificate che eseguono attività senza l'intervento umano. Sono essenziali per automatizzare le operazioni ripetitive e complesse negli ambienti IT, aumentando l'efficienza e riducendo la probabilità di errore umano. Nel cloud computing, gli script di automazione vengono utilizzati per il provisioning delle risorse, la gestione delle distribuzioni e l'orchestrazione dei flussi di lavoro, spesso all'interno di strumenti come Terraform o attraverso interfacce di scripting dei provider cloud come AWS CloudFormation.
GitOps è un quadro operativo che prende le best practice DevOps utilizzate per lo sviluppo di applicazioni, come il controllo di versione, la collaborazione, la conformità e il CI/CD, e le applica all'automazione dell'infrastruttura. L'idea centrale di GitOps è quella di utilizzare Git come unica fonte di verità per le infrastrutture e le applicazioni dichiarative. Con Git al centro della pipeline CI/CD, i team possono effettuare richieste di pull per accelerare e semplificare la distribuzione delle applicazioni e le attività operative.
L'integrazione continua/la distribuzione continua (CI/CD) è un metodo di consegna del software che introduce l'automazione nelle fasi di sviluppo delle app. I concetti principali attribuiti al CI/CD sono integrazione continua, consegna continua e distribuzione continua. Il CI/CD integra le modifiche regolari del codice in un repository condiviso, esegue automaticamente i test e invia il codice agli ambienti di produzione. Questa pratica riduce gli errori manuali, abbrevia il ciclo di sviluppo e migliora la qualità del software.
L'infrastruttura immutabile è un approccio alla gestione dei servizi e delle distribuzioni software sulle risorse IT, in cui i componenti vengono sostituiti piuttosto che modificati. Una volta distribuita, l'infrastruttura non viene mai modificata; invece, qualsiasi aggiornamento o modifica viene effettuata sostituendo i server o i contenitori con una nuova versione. Questo paradigma riduce al minimo le incongruenze e le potenziali vulnerabilità di sicurezza dovute alla deriva della configurazione o agli interventi manuali.
La sicurezza del codice comprende i metodi e gli strumenti utilizzati per proteggere dalle vulnerabilità all'interno del codice del software e impedire l'accesso o le modifiche non autorizzate alla base di codice. Comporta pratiche come l'analisi statica e dinamica del codice, la firma del codice e l'uso di standard di codifica sicuri per garantire che il software sia sviluppato con una forte enfasi sulla sicurezza fin dall'inizio.
Un audit del codice è un'analisi completa in cui il codice sorgente viene esaminato per scoprire bug, violazioni della sicurezza o delle convenzioni di programmazione. Condotti sistematicamente, gli audit del codice aiutano a mantenere la salute della base di codice, a migliorare la sicurezza e a garantire la conformità agli standard di codifica e alle normative del settore.
L'applicazione delle politiche è il processo di implementazione e di garanzia dell'aderenza alle politiche definite all'interno di un ambiente IT. Comporta la gestione attiva dei controlli di accesso, dell'utilizzo delle risorse e del comportamento operativo, per garantire che tutte le azioni siano in linea con le politiche di sicurezza e i requisiti di conformità stabiliti.
La configurazione dichiarativa specifica lo stato desiderato di un sistema senza delineare i passaggi per raggiungerlo. Gli strumenti di gestione sottostanti del sistema sono responsabili dell'esecuzione delle azioni necessarie per mantenere lo stato dichiarato. Questo approccio contrasta con la configurazione imperativa, che richiede script o comandi per descrivere il processo per raggiungere lo stato desiderato.
I sistemi di controllo delle versioni sono strumenti che tengono traccia delle modifiche ai file, registrando le modifiche e chi le ha effettuate. Sono essenziali per lo sviluppo collaborativo del software, consentendo a più collaboratori di lavorare contemporaneamente sulla stessa base di codice senza sovrascrivere il lavoro dell'altro. I sistemi di controllo delle versioni facilitano i rollback, le ramificazioni e l'unione e aiutano a risolvere i conflitti quando si uniscono i contributi.
La prevenzione della deriva della configurazione assicura che lo stato dell'infrastruttura rimanga coerente con le configurazioni definite nel tempo. Automatizzando i processi di distribuzione e di operazioni e riconciliando regolarmente lo stato attuale con quello desiderato, gli strumenti di prevenzione della deriva come Puppet, Chef e Ansible rilevano e correggono le discrepanze, mantenendo così l'integrità e la sicurezza del sistema.
Le politiche di revisione del codice stabiliscono gli standard e le procedure per esaminare sistematicamente il codice sorgente da parte di colleghi prima che venga unito alla base di codice principale. Queste politiche applicano le migliori pratiche di codifica, identificano le potenziali vulnerabilità di sicurezza e migliorano la qualità del codice. Spesso specificano i criteri di assegnazione dei revisori, l'ambito di revisione e le condizioni di approvazione o rifiuto del codice.
Il Policy Definition Language (PDL) fornisce una sintassi formale per scrivere le politiche che regolano il comportamento del sistema, gestiscono l'accesso e impongono la conformità. Le PDL, come quella utilizzata in Open Policy Agent, consentono una chiara articolazione delle regole e l'applicazione automatizzata dei criteri nelle diverse fasi di sviluppo e distribuzione del software, garantendo un'applicazione coerente delle pratiche di sicurezza.
I modelli di infrastruttura come codice sono script o file predefiniti utilizzati per automatizzare il provisioning delle infrastrutture IT. Scritti in linguaggi come YAML o JSON, i modelli IaC descrivono le risorse e le configurazioni necessarie per un'applicazione, consentendo di configurare l'ambiente in modo coerente e ripetibile tra sviluppo, test e produzione.
La governance automatizzata integra l'applicazione dei criteri all'interno della pipeline di integrazione e distribuzione continua, assicurando che le modifiche aderiscano automaticamente agli standard aziendali e normativi. Impiega strumenti e pratiche che monitorano e controllano gli ambienti IT, riducendo la supervisione manuale e fornendo una garanzia di conformità in tempo reale. La governance automatizzata consente di identificare e risolvere rapidamente i problemi che si discostano dalle politiche stabilite.
Indietro Che cos'è la sicurezza nativa del cloud?
Avanti CSP-Built Security Vs. Cloud-Agnostic Security