Pattern per i test di conformità automatizzati con Chef InSpec

Last reviewed 2023-11-24 UTC

Questo documento descrive i pattern per l'automazione dei controlli dei criteri e di conformità per le tue risorse Google Cloud utilizzando Chef InSpec, un framework di test dell'infrastruttura open source. Questo documento è rivolto agli architect e ai professionisti DevOps che vogliono integrare i test di conformità continui nel flusso di lavoro di sviluppo del software.

Norme e conformità in Google Cloud

Google Cloud fornisce una gamma di strumenti per aiutarti ad applicare e controllare i requisiti dei criteri e di conformità:

Servizio Descrizione
Gerarchia delle risorse

Puoi utilizzare la gerarchia delle risorse per mappare la struttura operativa della tua azienda a Google Cloud e per gestire il controllo dell'accesso e le autorizzazioni per gruppi di risorse correlate. Puoi definire gruppi di risorse correlate e applicare controlli coerenti a tutte le risorse del gruppo.

Ad esempio, puoi raggruppare tutti i progetti Google Cloud soggetti alla conformità PCI DSS (Payment Card Industry Data Security Standard) in una cartella specifica. Puoi quindi applicare i controlli pertinenti a tutti i progetti in quella cartella.

Servizio Criteri dell'organizzazione

Puoi utilizzare il servizio Criteri dell'organizzazione per definire vincoli che limitano la disponibilità o la funzionalità dei servizi Google Cloud. Ad esempio, puoi utilizzare il vincolo di località delle risorse per limitare l'insieme di regioni in cui è possibile creare risorse basate sulla località come le macchine virtuali.

Il servizio Criteri dell'organizzazione interagisce con la gerarchia delle risorse. Puoi applicare i criteri dell'organizzazione a diversi livelli della gerarchia. Ad esempio, puoi definire un criterio dell'organizzazione per i tuoi progetti soggetti alla conformità PCI e applicarlo alla cartella PCI.

Security Command Center

Puoi utilizzare Security Command Center per una visibilità centralizzata di tutte le tue risorse Google Cloud. Security Command Center analizza automaticamente le risorse cloud per individuare vulnerabilità note e fornisce un'unica interfaccia utente e una singola piattaforma dati per aggregare e gestire i risultati sulla sicurezza.

Security Health Analytics può fornire funzionalità di monitoraggio e generazione di report sugli standard di conformità come PCI DSS e sugli standard di settore come il benchmark del Center for Internet Security (CIS). Puoi visualizzare i report in una dashboard per la conformità ed esportarli.

Security Command Center si integra con diverse origini di sicurezza di terze parti e fornisce un'API per consentirti di aggiungere e gestire i tuoi risultati personalizzati. Security Command Center fornisce un'interfaccia unificata per tutti i risultati di sicurezza e conformità.

Sincronizzazione della configurazione

Se utilizzi GKE Enterprise, puoi utilizzare Config Sync per mantenere sincronizzati i tuoi cluster Kubernetes con le configurazioni definite in un repository Git. Il repository Git agisce come unica fonte attendibile per i criteri e la configurazione dei cluster. Config Sync verifica continuamente il tuo ambiente GKE Enterprise per identificare e correggere i cluster che si discostano dalla configurazione definita nel tuo repository.

Policy Controller

Se utilizzi GKE Enterprise, puoi utilizzare Policy Controller, un controller di ammissione dinamico di Kubernetes, per applicare criteri completamente programmabili per i tuoi cluster. Con Policy Controller puoi impedire la creazione di oggetti all'interno dei cluster che non soddisfano i requisiti dei criteri. Ad esempio, puoi creare criteri per applicare la sicurezza dei pod.

Scopri Chef InSpec

Chef InSpec è un framework di test dell'infrastruttura open source con un linguaggio specifico di dominio (DSL) leggibile per specificare i requisiti di conformità, sicurezza e criteri.

Con Chef InSpec, puoi:

  • Definisci i requisiti di conformità come codice e testa la tua infrastruttura cloud in base a questi requisiti.
  • Consente ai team di sviluppo di aggiungere test specifici per le applicazioni e di valutare la conformità delle loro applicazioni ai criteri di sicurezza prima di apportare modifiche all'ambiente di produzione.
  • Automatizza la verifica della conformità nelle pipeline CI/CD e nell'ambito del processo di rilascio.
  • Testa l'infrastruttura Google Cloud nello stesso modo in cui testi l'infrastruttura in altri ambienti cloud.

Google Cloud offre diverse risorse per aiutarti a iniziare a utilizzare Chef InSpec:

Best practice per l'utilizzo di Chef InSpec con Google Cloud

Di seguito sono riportate le best practice generali per l'utilizzo di Chef InSpec:

  • Definisci e adotta una procedura per correggere le violazioni rilevate dai test Chef InSpec. Chef InSpec evidenzia le violazioni delle norme e i requisiti di conformità, ma non esegue alcuna correzione.
  • Concedi le autorizzazioni IAM appropriate all'account di servizio che utilizzi per eseguire i test di Chef InSpec. Ad esempio, se stai testando i bucket Cloud Storage, l'account di servizio deve avere i ruoli IAM appropriati per Cloud Storage.
  • Configura i reporter InSpec chef per produrre report formattati che descrivono i test e i risultati. Puoi archiviare questi report per fornire un record storico. Puoi anche utilizzare questi report come input per altri strumenti di sicurezza e conformità. Ad esempio, puoi Integrare Chef InSpec e Security Command Center.
  • Raggruppa i test InSpec correlati a Chef in profili. Puoi creare profili diversi per diversi casi d'uso. Ad esempio, potresti eseguire un profilo end-to-end completo come parte dei test notturni pianificati. Potresti anche creare un profilo più breve e più mirato in risposta a eventi in tempo reale.

Scrivere test Chef InSpec

I test Chef InSpec possono essere scritti utilizzando Chef InSpec DSL, una DSL Ruby per la scrittura di controlli di controllo.

Il seguente codice mostra un controllo per la convalida degli attributi dei bucket Cloud Storage:

control 'policy_gcs_bucket' do
 title 'Cloud Storage bucket policy'
 desc 'Compliance policy checks for Cloud Storage bucket'
 impact 'medium'

 google_storage_buckets(project: project_id).bucket_names.each do |bucket|
   describe "[#{project_id}] Cloud Storage Bucket #{bucket}" do
     subject { google_storage_bucket(name: bucket) }
     its('storage_class') { should eq 'STANDARD' }
     its('location') { should be_in ['EUROPE-WEST2', 'EU'] }
     end
   end
 end

Il controllo specifica le seguenti informazioni:

  • Metadati che descrivono il controllo
  • Impatto o gravità degli errori
  • Controlli dei criteri che verificano gli attributi di ogni bucket Cloud Storage

Esegui test Chef InSpec con Cloud Build

I pattern descritti in questo documento utilizzano Cloud Build e l'immagine container Chef InSpec per eseguire i test InSpec. Con Cloud Build, puoi eseguire immagini container e concatenare i passaggi di build per formare una pipeline. Ad esempio, puoi eseguire i test di Chef InSpec in un passaggio di build, quindi esportare o analizzare i report generati in un passaggio successivo. Tuttavia, l'utilizzo di Cloud Build non è obbligatorio. Puoi integrare Chef InSpec con qualsiasi strumento che utilizzi.

Il seguente file di configurazione di Cloud Build mostra una pipeline con due passaggi di build:

steps:
- id: 'run-inspec-cis'
  name: chef/inspec:latest
  entrypoint: '/bin/sh'
  args:
   - '-c'
   - |
     inspec exec https://github.com/GoogleCloudPlatform/inspec-gcp-cis-benchmark.git \
     --target gcp:// \
     --input gcp_project_id=${PROJECT_ID} \
     --reporter cli json:/workspace/report.json \
     --chef-license accept || touch fail.marker

- id: 'store-report'
  name: gcr.io/cloud-builders/gsutil:latest
  args:
   - cp
   - /workspace/report.json
   - gs://${_REPORTS_BUCKET}/cis-report-${BUILD_ID}.json

Il primo passaggio esegue i test del Benchmark CIS di Google Cloud e genera un report in formato JSON. Il passaggio di build utilizza l'immagine container chef/inspec e recupera i test dal repository GitHub pubblico di Google Cloud CIS. Il secondo passaggio di build copia il report generato in un bucket Cloud Storage.

Per semplicità, l'esempio precedente fa riferimento al tag latest per tutte le immagini container. Per fare in modo che le build siano riproducibili, ti consigliamo di fare riferimento a una versione specifica dell'immagine container fissa, anziché a una versione in sequenza, ad esempio latest.

Se uno o più test hanno esito negativo, Chef InSpec restituisce un errore. Invece di completare la build, il primo passaggio di build scrive un file fail.marker e il secondo viene eseguito anche se uno dei test di Chef InSpec ha esito negativo. Se vuoi far sì che la build evidenzi gli errori in modo esplicito, puoi cercare il file fail.marker in un passaggio finale della build e, se esistente, non eseguire la build.

Analizzare i report Chef InSpec

Puoi configurare i reporter Chef InSpec in modo che generi report formattati che descrivono i test e i risultati di InSpec. Puoi archiviare questi report per fornire un record storico. Puoi anche utilizzare questi report come input per altri strumenti di sicurezza e conformità o per generare visualizzazioni o avvisi. I pattern descritti più avanti in questo documento consigliano di archiviare i report InSpec di Chef in un bucket Cloud Storage.

Il seguente diagramma mostra come archiviare i report e attivare automaticamente ulteriori azioni.

Eventi attivati dai report.

L'aggiunta del report a un bucket Cloud Storage genera un evento. Puoi attivare ulteriori azioni o analisi del report in risposta a questo evento. Nel diagramma precedente, attiverai una Cloud Function che scrive i dettagli dei test di Chef InSpec in BigQuery e un'altra Cloud Function che aggiunge risultati a Security Command Center.

Integra Chef InSpec e Security Command Center

Security Command Center è il database canonico di sicurezza e rischi per Google Cloud. Security Command Center offre una visibilità centralizzata di tutte le risorse Google Cloud e analizza automaticamente le risorse cloud alla ricerca di vulnerabilità note. Ti consigliamo di abilitare Security Command Center per la tua organizzazione.

Puoi aggiungere i risultati dei test di Chef InSpec a Security Command Center. Security Command Center funge da piattaforma dati centralizzata per aggregare e gestire i risultati sulla sicurezza da più origini.

Security Command Center include Security Health Analytics. Security Health Analytics analizza automaticamente le risorse e i progetti Google Cloud alla ricerca di vulnerabilità comuni. Ad esempio, Security Health Analytics esegue scansioni che valutano i progetti in base al benchmark CIS Google Cloud Foundation 1.0. Puoi anche eseguire un set simile di test utilizzando il profilo CIS InSpec di Google Cloud. Devi confrontare l'ambito dei test Chef InSpec in modo che non duplichino quelli eseguiti da Security Health Analytics.

Esistono diversi modi per aggiungere i risultati di Chef InSpec a Security Command Center:

Modelli

Questa sezione descrive i pattern per l'integrazione di Chef InSpec nelle tue operazioni quotidiane. Puoi combinare questi pattern per ottenere test di conformità continui.

Pianifica i test di Chef InSpec

In questo pattern, esegui il set di test di Chef InSpec in base a un programma fisso. Ti consigliamo questo approccio a programmazione fissa come un buon modo per iniziare a utilizzare Chef InSpec perché puoi introdurre i test di Chef InSpec senza modificare i processi esistenti.

Il seguente diagramma mostra come eseguire i test in base a una pianificazione.

Pianifica i test di Chef InSpec.

Nel diagramma precedente, crei un job Cloud Scheduler che viene eseguito con la frequenza che preferisci. Ogni volta che il job viene eseguito, attiva una pipeline di Cloud Build che esegue i test di Chef InSpec e restituisce il report sul test a Cloud Storage. Per maggiori informazioni, consulta Pianificazione delle build.

Questo schema offre i seguenti vantaggi:

  • Puoi introdurre test di Chef InSpec con modifiche minime ai processi esistenti.
  • Puoi utilizzare i test di Chef InSpec indipendentemente da qualsiasi processo che utilizzi per eseguire il provisioning e la gestione dell'infrastruttura e delle app.

Questo pattern presenta le seguenti limitazioni:

  • I test Chef InSpec sono disaccoppiati dal provisioning dell'infrastruttura, il che rende più difficile attribuire modifiche specifiche ai test Chef InSpec non superati.
  • I test Chef InSpec vengono eseguiti solo periodicamente, quindi potrebbe verificarsi un ritardo prima di identificare la conformità o le violazioni delle norme

Integrazione diretta con le tue pipeline CI/CD

Molte organizzazioni automatizzano il provisioning e la gestione dell'infrastruttura utilizzando strumenti come Terraform o Config Connector. In genere, l'infrastruttura viene creata o modificata solo come parte di una pipeline CI/CD. Per ulteriori informazioni sui concetti di CI/CD su Google Cloud, consulta CI/CD moderni con GKE Enterprise.

In questo pattern, aggiungi i test Chef InSpec come passaggi aggiuntivi nelle pipeline di deployment dell'infrastruttura, in modo da poter convalidare l'infrastruttura ogni volta che esegui la pipeline di deployment. Non puoi eseguire la build se sono presenti violazioni della conformità.

Il seguente diagramma mostra un flusso di lavoro comune in cui viene attivata la pipeline di deployment in base a un commit che include modifiche all'infrastruttura.

Integra Chef Inspec con pipeline CI/CD.

Nel diagramma precedente, le modifiche all'infrastruttura vengono applicate a un ambiente di test o gestione temporanea, quindi i test di Chef InSpec vengono eseguiti su quell'ambiente. Se tutti i controlli Chef InSpec sono conformi, puoi unire e applicare le modifiche dell'infrastruttura all'ambiente di produzione. I test di Chef InSpec vengono eseguiti di nuovo nell'ambiente di produzione.

Questo schema offre i seguenti vantaggi:

  • I test di Chef InSpec sono integrati direttamente nel processo di deployment, in modo da identificare rapidamente le violazioni.
  • Se i test di Chef InSpec non vengono superati, puoi eliminare esplicitamente il deployment.

Questo pattern presenta le seguenti limitazioni:

  • I test Chef InSpec sono direttamente integrati con le pipeline di build, perciò il team che gestisce la pipeline di build deve
  • Se hai più build che richiedono i test Chef InSpec, devi aggiungere passaggi Chef InSpec in ogni singola build, il che potrebbe rendere più difficile gestire e scalare le tue attività Chef InSpec.

Integra indirettamente le tue pipeline CI/CD

Questo pattern è simile al pattern precedente, ma invece di eseguire direttamente i test Chef InSpec come passaggio all'interno della pipeline di deployment, esegui i test Chef InSpec in una pipeline separata. Questa pipeline separata viene attivata dalle pipeline di deployment. Puoi mantenere la logica Chef InSpec separata dalle pipeline dell'infrastruttura, ma continuare a eseguire i test di conformità e criteri nell'ambito del flusso di lavoro di deployment.

Cloud Build genera automaticamente notifiche di build quando lo stato della build cambia, ad esempio quando viene creata, quando la build passa a uno stato funzionante e quando la build viene completata. I messaggi di notifica vengono pubblicati in un argomento Pub/Sub e contengono informazioni sulla build, inclusi i singoli passaggi di build e i relativi argomenti.

Il seguente diagramma mostra come creare una funzione Cloud Functions che viene attivata automaticamente ogni volta che un messaggio viene pubblicato nell'argomento Pub/Sub della notifica di build.

Integrazione indiretta di Chef InSpec con pipeline CI/CD.

Nel diagramma precedente, la funzione può esaminare il messaggio di notifica della build e quindi attivare la pipeline Chef InSpec quando richiesto. Ad esempio, vuoi attivare la pipeline InSpec di Chef solo in risposta a build riuscite che contengono determinati passaggi di build.

Questo schema offre i seguenti vantaggi:

  • I test di Chef InSpec sono indipendenti dalle pipeline di deployment. I team che gestiscono le pipeline di deployment non devono interagire con Chef InSpec.
  • Puoi centralizzare i test Chef InSpec, semplificando la gestione e la scalabilità delle iniziative di Chef InSpec.
  • Puoi eseguire selettivamente i test Chef InSpec in base ai risultati e all'output delle build a monte.

Questo pattern presenta le seguenti limitazioni:

  • Devi scrivere e gestire il codice per analizzare e analizzare i messaggi di notifica della build al fine di determinare se eseguire i test Chef InSpec e passare i parametri a questi test.
  • Le notifiche di Cloud Build vengono pubblicate in un argomento Pub/Sub nello stesso progetto. Se hai build in più progetti, devi eseguire il deployment della Cloud Function in ogni progetto.

Attivare i test Chef InSpec in risposta alle notifiche di Cloud Asset Inventory

Cloud Asset Inventory fornisce un inventario di tutte le tue risorse Google Cloud. Puoi utilizzare Cloud Asset Inventory per cercare, analizzare ed esportare asset e metadati degli asset nei progetti, nelle cartelle e nell'organizzazione di Google Cloud. Puoi anche utilizzare Cloud Asset Inventory per inviare notifiche in tempo reale relative alle modifiche alle risorse e ai criteri cloud.

Il seguente diagramma mostra come eseguire i test Chef InSpec in base alle notifiche di Cloud Asset Inventory.

Attiva i test di Chef InSpec in base alle notifiche.

Il diagramma precedente mostra come ricevere feedback quasi in tempo reale su qualsiasi risorsa cloud nuova o aggiornata non conforme. Puoi filtrare le notifiche in modo da ricevere quelle solo per le modifiche apportate a determinati tipi di risorse. Puoi usare queste notifiche per attivare test mirati di Chef InSpec specifici per le risorse. Ad esempio, esegui un determinato insieme di test ogni volta che viene creato un bucket Cloud Storage e un insieme diverso di test InSpec di Chef quando viene aggiornato un criterio IAM.

Questo schema offre i seguenti vantaggi:

  • Puoi attivare test Chef InSpec mirati alle risorse, a seconda delle modifiche specifiche ai tuoi asset cloud.
  • Le notifiche di Cloud Asset Inventory vengono inviate quasi in tempo reale, in modo che qualsiasi conformità o violazione delle norme venga identificata rapidamente.
  • Puoi utilizzare questo pattern indipendentemente da qualsiasi processo utilizzato per il provisioning e la gestione dell'infrastruttura. I test Chef InSpec vengono eseguiti indipendentemente dal fatto che l'infrastruttura venga creata o modificata da un singolo sviluppatore o da una pipeline CI/CD.
  • Cloud Asset Inventory può generare notifiche sulle modifiche apportate alle risorse in tutta l'organizzazione o da cartelle o progetti selezionati. Puoi eseguire determinati insiemi di test Chef InSpec a seconda della cartella o del progetto da cui ha avuto origine la modifica.
  • Puoi utilizzare questo pattern insieme agli altri. Ad esempio, molte organizzazioni non dispongono di deployment automatizzati per i propri ambienti di sviluppo o sandbox. Puoi utilizzare questo pattern per eseguire controlli dei criteri selezionati in questi ambienti, integrando con le tue pipeline CI/CD per gli ambienti di produzione e di gestione temporanea.

Questo pattern presenta le seguenti limitazioni:

  • Questo pattern potrebbe non essere pratico se viene apportato un volume elevato di modifiche agli asset cloud, perché i test InSpec di Chef potrebbero essere attivati da ogni modifica.
  • Devi scrivere e gestire il codice per analizzare e analizzare i messaggi di notifica di Cloud Asset Inventory e determinare se eseguire i test Chef InSpec.

Passaggi successivi