Pattern per i test di conformità automatici utilizzando Chef InSpec

Last reviewed 2023-11-24 UTC

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

Norme e conformità in Google Cloud

Google Cloud offre una serie di strumenti per aiutarti a applicare e verificare i requisiti relativi a norme e 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 tuoi progetti Google Cloud soggetti alla conformità allo standard PCI DSS (Payment Card Industry Data Security Standard) in una determinata cartella. Puoi quindi applicare i controlli pertinenti a tutti i progetti in quella cartella.

Servizio Criteri dell'organizzazione

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

Il Servizio Criteri dell'organizzazione collabora con la gerarchia delle risorse. Puoi e applicare criteri dell'organizzazione a diversi livelli gerarchici. Per Ad esempio, puoi definire un criterio dell'organizzazione per i tuoi progetti soggetta a conformità PCI e applicare il criterio alla cartella PCI.

Security Command Center

Puoi usare Security Command Center per una visibilità centralizzata di tutti i tuoi dell'accesso a specifiche risorse Google Cloud. Security Command Center analizza automaticamente il tuo cloud per individuare le vulnerabilità note e fornire un'unica interfaccia utente basata sui dati per aggregare e gestire i risultati sulla sicurezza.

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

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

Config Sync

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 l'unica fonte attendibile per la configurazione e i criteri del cluster. Config Sync controlla 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 servizio Kubernetes ingresso dinamico , per applicare criteri completamente programmabili per i tuoi cluster. Utilizzando Policy Controller, puoi impedire la creazione di all'interno dei cluster che non soddisfano i requisiti dei criteri. Ad esempio, puoi creare criteri per applicare la sicurezza dei pod.

Ti presentiamo Chef InSpec

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

Con Chef InSpec puoi:

  • Definire i requisiti di conformità come codice e testare il cloud la tua infrastruttura a questi requisiti.
  • Consenti ai team di sviluppo di aggiungere test specifici per le applicazioni e valutarli della conformità delle loro applicazioni ai criteri di sicurezza prima del push modifiche all'ambiente di produzione.
  • Automatizza la verifica della conformità nelle pipeline CI/CD e come parte del processo di release.
  • Testa l'infrastruttura Google Cloud nello stesso modo in cui testi l'infrastruttura in altri ambienti cloud.

Google Cloud fornisce 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 dei requisiti di conformità, ma non esegue alcuna correzione.
  • Concedi le autorizzazioni appropriate IAM le autorizzazioni all'account di servizio che utilizzi per eseguire Chef InSpec test. Ad esempio, se stai testando i bucket Cloud Storage, l'account di servizio deve avere i token appropriati Ruoli IAM per Cloud Storage.
  • Configura i report di Chef InSpec per produrre report formattati che descrivono i test e i risultati. Puoi memorizzare questi report per creare un record storico. Puoi utilizzare anche questi come input per gli altri strumenti di sicurezza e conformità. Ad esempio, puoi integrare Chef InSpec e Security Command Center.
  • Raggruppa i test Chef InSpec correlati in profili. Puoi creare profili diversi per casi d'uso diversi. Ad esempio, potresti eseguire un profilo completo end-to-end nell'ambito dei test notturni pianificati. In alternativa, puoi pubblicare un profilo più breve e mirato in risposta a eventi in tempo reale.

Scrivere i test Chef InSpec

Scrivi i test InSpec per Chef usando Chef InSpec DSL, un DSL Ruby per la scrittura dei controlli di controllo.

Il seguente codice mostra un controllo per la convalida degli attributi di 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 Cloud Storage del tuo progetto

Eseguire i 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 mettere in catena i passaggi di compilazione per formare una pipeline. Ad esempio, puoi eseguire i test InSpec di Chef in un solo passaggio di creazione, quindi esportare o analizzare generati in un passaggio successivo. Tuttavia, l'utilizzo di Cloud Build non è obbligatorio. Puoi integrare Chef InSpec con qualsiasi strumento che utilizzi.

Le seguenti 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 Benchmark CIS di Google Cloud e genera un report in formato JSON. Il passaggio di build utilizza chef/inspec e recupera i test dal pubblico Repository GitHub di Google Cloud CIS. Il secondo passaggio di compilazione copia il report generato in un bucket Cloud Storage.

Per semplicità, l'esempio precedente fa riferimento al tag latest per tutti i tag immagini container. Per contribuire a rendere riproducibili le build, ti consigliamo di fare riferimento a una versione specifica e fissa dell'immagine del contenitore anziché a una versione incrementale, come latest.

Se uno dei test non va a buon fine, Chef InSpec restituisce un errore. Invece di non riuscire a completare la compilazione, il primo passaggio di compilazione scrive un file fail.marker e il secondo passaggio di compilazione viene eseguito anche se uno dei test Chef InSpec non va a buon fine. Se vuoi interrompere esplicitamente la compilazione per evidenziare gli errori, puoi controllare se esiste il file fail.marker in un passaggio di compilazione finale e interrompere la compilazione se esiste.

Analizza i report di Chef InSpec

Puoi configurare i report di Chef InSpec per produrre report formattati che descrivono i test e i risultati di InSpec. Puoi memorizzarli 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 ti consigliamo di archiviare i tuoi report Chef InSpec in un bucket Cloud Storage.

Il seguente diagramma mostra come puoi archiviare i report e attivare automaticamente un'ulteriore azione.

Eventi attivati dai report.

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

Integrare Chef InSpec e Security Command Center

Security Command Center è il database canonico di sicurezza e rischi per Google Cloud. Security Command Center offre visibilità centralizzata di tutte le tue risorse Google Cloud e analizza automaticamente le tue risorse cloud per rilevare le vulnerabilità note. Ti consigliamo di abilitare Security Command Center per dell'organizzazione.

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

Security Command Center include Security Health Analytics. Security Health Analytics scansiona automaticamente i progetti Google Cloud e per individuare le vulnerabilità comuni. Ad esempio, Security Health Analytics esegue scansioni che valutano i tuoi progetti in base al benchmark CIS Google Cloud Foundation 1.0. Puoi anche eseguire un insieme di test simile utilizzando Profilo CIS di Google Cloud InSpec. Dovresti confrontare l'ambito dei test InSpec di Chef in modo che non duplicare i controlli eseguiti da Security Health Analytics.

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

Pattern

Questa sezione descrive i pattern per integrare Chef InSpec nel tuo delle attività quotidiane. È possibile combinare questi pattern per ottenere test di conformità.

Pianifica test InSpec chef

Con questo pattern, esegui la serie di test Chef InSpec in base a una programmazione fissa. Ti consigliamo questo approccio con pianificazione fissa come un buon modo per iniziare a utilizzare Chef InSpec perché puoi introdurre i test Chef InSpec senza modificare le tue procedure esistenti.

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

Pianifica i test Chef InSpec.

Nel diagramma precedente, crei una Cloud Scheduler che viene eseguito con la frequenza che preferisci. Ogni volta che il job viene eseguito, attiva una pipeline Cloud Build che esegue i test di Chef InSpec invia il report di test a Cloud Storage. Per ulteriori informazioni, consulta Pianificare le build.

Questo pattern presenta i seguenti vantaggi:

  • Puoi introdurre i test Chef InSpec con modifiche minime alle tue procedure esistenti.
  • Puoi utilizzare i test Chef InSpec indipendentemente da qualsiasi processo utilizzato per eseguire il provisioning e gestire l'infrastruttura e le app.

Questo pattern presenta i seguenti limiti:

  • I test Chef InSpec sono disaccoppiati dal provisioning dell'infrastruttura, il che rende più difficile attribuire modifiche specifiche ai test Chef InSpec non riusciti.
  • I test Chef InSpec vengono eseguiti solo periodicamente, pertanto potrebbe esserci un certo ritardo prima di identificare la conformità o le violazioni dei criteri.

Integrazione diretta con le 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 all'interno di una pipeline CI/CD. Per saperne di più sui concetti di CI/CD su Google Cloud, consulta Approccio CI/CD moderno 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. Puoi fallire la build se sono presenti violazioni della conformità.

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

Integra Chef Inspec con le pipeline CI/CD.

Nel diagramma precedente, le modifiche all'infrastruttura vengono applicate a un ambiente di test o di staging, dopodiché i test Chef InSpec vengono eseguiti in questo ambiente. Se tutti i controlli InSpec di Chef sono conformi, puoi unire e applicare le modifiche all'infrastruttura per l'ambiente di produzione e la Chef InSpec vengono eseguiti nuovamente nell'ambiente di produzione.

Questo pattern presenta i seguenti vantaggi:

  • I test Chef InSpec sono integrati direttamente nel processo di deployment, in modo che le violazioni vengano identificate rapidamente.
  • Se i test Chef InSpec non vengono superati, puoi fallire esplicitamente il deployment.

Questo pattern presenta i seguenti limiti:

  • I test Chef InSpec sono integrati direttamente con le pipeline di compilazione, pertanto il team che gestisce la pipeline di compilazione deve comprendere i test Chef InSpec.
  • Se hai più build che richiedono test Chef InSpec, devi aggiungere i passaggi Chef InSpec a ogni singola build, il che potrebbe rendere più difficile la manutenzione e la scalabilità di Chef InSpec.

Eseguire l'integrazione indiretta con le pipeline CI/CD

Questo pattern è simile a quello precedente, ma anziché direttamente eseguendo i test Chef InSpec come passaggio della pipeline di deployment, per eseguire i test InSpec di Chef in una pipeline separata. Questa pipeline separata viene attivata dalle pipeline di deployment. Puoi mantenere la logica di Chef InSpec distinta dalle pipeline di infrastruttura, ma continuare a eseguire i test di conformità e delle norme 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 di funzionamento e quando viene completata. La di notifica vengono pubblicati Pub/Sub e contenere informazioni sulla build, tra cui la singola build passaggi e i relativi argomenti.

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

Integrazione indiretta di Chef InSpec con pipeline CI/CD.

Nel diagramma precedente, la funzione può ispezionare il messaggio di notifica della compilazione e attivare la pipeline Chef InSpec quando necessario. Ad esempio: vuoi attivare solo la pipeline Chef InSpec in risposta all'esito contenenti determinati passaggi di build.

Questo pattern presenta i seguenti vantaggi:

  • I test 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à di Chef InSpec.
  • Puoi eseguire in modo selettivo i test Chef InSpec in base ai risultati e all'output delle build a monte.

Questo pattern presenta i seguenti limiti:

  • Devi scrivere e gestire il codice per analizzare e analizzare i messaggi di notifica della compilazione per determinare se eseguire i test Chef InSpec e per passare i parametri ai test Chef InSpec.
  • Le notifiche di Cloud Build vengono pubblicate in un argomento Pub/Sub nello stesso progetto. Se disponi di build in più progetti, devi eseguire il deployment della funzione Cloud Run progetto.

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

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

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

Attiva i test InSpec di Chef in base alle notifiche.

Il diagramma precedente mostra come puoi ricevere un feedback quasi in tempo reale su eventuali risorse cloud nuove o aggiornate non conformi. Puoi filtrare le notifiche in modo da ricevere una notifica solo per le modifiche a determinati tipi di risorse. Puoi utilizzare queste notifiche per attivare test Chef InSpec mirati e specifici per risorsa. Ad esempio, esegui un particolare insieme ogni volta che viene creato un bucket Cloud Storage ed eseguire un'altra insieme di test InSpec di Chef quando un criterio IAM viene aggiornato.

Questo pattern presenta i seguenti vantaggi:

  • Puoi attivare test Chef InSpec mirati e specifici per le risorse in base alle modifiche specifiche apportate alle risorse cloud.
  • Le notifiche di Cloud Asset Inventory vengono inviate quasi in tempo reale, quindi della conformità o delle norme vengono identificate rapidamente.
  • Puoi utilizzare questo pattern indipendentemente da qualsiasi processo utilizzato per eseguire il provisioning e gestire l'infrastruttura. I test Chef InSpec vengono eseguiti indipendentemente dal fatto che l'infrastruttura sia stata creata o modificata da un singolo sviluppatore o da una pipeline CI/CD.
  • L'inventario delle risorse cloud può generare notifiche relative alle modifiche apportate alle risorse dell'intera organizzazione o di cartelle o progetti selezionati. Puoi eseguire insiemi specifici di test Chef InSpec a seconda della cartella o del progetto da cui ha avuto origine la modifica.
  • Puoi utilizzare questo motivo insieme agli altri motivi. Ad esempio, molti le organizzazioni non dispongono di deployment automatizzati di sviluppo o sandbox. Puoi utilizzare questo pattern per eseguire controlli dei criteri selezionati su questi ambienti, integrandoli con le pipeline CI/CD per gli ambienti di produzione e di staging.

Questo pattern presenta le seguenti limitazioni:

  • Questo schema potrebbe non essere pratico se c'è un grande volume di agli asset cloud perché i test Chef InSpec potrebbero attivati da ogni modifica.
  • Devi scrivere e gestire il codice per analizzare e analizzare Messaggi di notifica di Cloud Asset Inventory per determinare se eseguire o meno Test di ispezione chef

Passaggi successivi