Muster für automatisierte Compliance-Tests mit Chef InSpec

Last reviewed 2023-11-24 UTC

In diesem Dokument werden Muster zur Automatisierung von Richtlinien- und Complianceprüfungen für Ihre Google Cloud-Ressourcen mit Chef InSpec beschrieben, einem Open-Source-Infrastrukturtest-Framework. Dieses Dokument richtet sich an Architekten und DevOps-Experten, die kontinuierliche Compliancetests in ihren Softwareentwicklungsworkflow einbinden möchten.

Richtlinien und Compliance in Google Cloud

Google Cloud bietet eine Reihe von Tools, mit denen Sie Richtlinien- und Compliance-Anforderungen erzwingen und prüfen können:

Dienst Beschreibung
Ressourcenhierarchie

Mithilfe der Ressourcenhierarchie können Sie die operative Struktur Ihres Unternehmens in Google Cloud abbilden und die Zugriffssteuerung und Berechtigungen für Gruppen verwandter Ressourcen verwalten. Sie können Gruppen verwandter Ressourcen definieren und konsistente Kontrollen auf alle Ressourcen in der Gruppe anwenden.

Sie können beispielsweise alle Google Cloud-Projekte, die der PCI DSS-Compliance (Payment Card Industry Data Security Standard) unterliegen, in einem bestimmten Ordner gruppieren. Sie können dann relevante Kontrollen auf alle Projekte in diesem Ordner anwenden.

Organisationsrichtliniendienst

Mit dem Organisationsrichtliniendienst können Sie Einschränkungen definieren, die die Verfügbarkeit oder Funktionalität von Google Cloud-Diensten einschränken. Mit der Einschränkung der Ressourcenstandorte können Sie beispielsweise die Region einschränken, in der standortbasierte Ressourcen wie virtuelle Maschinen erstellt werden können.

Der Organisationsrichtliniendienst arbeitet mit der Ressourcenhierarchie zusammen. Sie können Organisationsrichtlinien auf verschiedenen Hierarchieebenen anwenden. Beispielsweise haben Sie die Möglichkeit, eine Organisationsrichtlinie für Ihre Projekte gemäß der PCI-Compliance zu definieren und die Richtlinie auf den PCI-Ordner anzuwenden.

Security Command Center

Sie können Security Command Center verwenden, um eine zentrale Sichtbarkeit aller Ihrer Google Cloud-Ressourcen zu erhalten. Security Command Center analysiert automatisch Ihre Cloud-Ressourcen auf bekannte Sicherheitslücken und bietet eine zentrale Benutzeroberfläche und Datenplattform, mit der Sie Sicherheitsergebnisse zusammenfassen und verwalten können.

Security Health Analytics kann Monitoring und Berichte für Compliance-Standards wie PCI DSS und Branchenstandards wie den Center for Internet Security (CIS)-Benchmark bereitstellen. Sie können die Berichte in einem Compliance-Dashboard ansehen und dann exportieren.

Security Command Center bindet mehrere Sicherheitsquellen von Drittanbietern ein und bietet eine API, über die Sie Ihre benutzerdefinierten Ergebnisse hinzufügen und verwalten können. Security Command Center bietet eine einheitliche Oberfläche für alle Ihre Sicherheits- und Complianceergebnisse.

Config Sync

Wenn Sie GKE Enterprise verwenden, können Sie mit Config Sync Ihre Kubernetes-Cluster mit Konfigurationen synchronisieren, die in einem Git-Repository definiert sind. Das Git-Repository fungiert als zentrale Informationsquelle für Ihre Clusterkonfiguration und -richtlinien. Config Sync prüft Ihre GKE Enterprise-Umgebung kontinuierlich, um Cluster zu identifizieren und zu korrigieren, die von der in Ihrem Repository definierten Konfiguration abweichen.

Policy Controller

Wenn Sie GKE Enterprise verwenden, können Sie Policy Controller, einen dynamischen Zugangs-Controller von Kubernetes, verwenden, um vollständig programmierbare Richtlinien für Folgendes zu erzwingen: Ihren Clustern. Mit Policy Controller können Sie das Erstellen von Objekten in Ihren Clustern verhindern, die Ihren Richtlinienanforderungen nicht entsprechen. Sie können beispielsweise Richtlinien zur Erzwingung von Pod-Sicherheit erstellen.

Einführung in Chef InSpec

Chef InSpec ist ein Open-Source-Infrastrukturtest-Framework mit einer für Menschen lesbaren domainspezifischen Sprache (Domain-Specific Language, DSL), mit der die Compliance-, Sicherheits- und Richtlinienanforderungen angegeben werden können.

Mit Chef InSpec können Sie Folgendes tun:

  • Compliance-Anforderungen als Code definieren und Ihre Cloud-Infrastruktur anhand dieser Anforderungen testen.
  • Entwicklungsteams ermöglichen, anwendungsspezifische Tests hinzuzufügen und die Compliance ihrer Anwendungen zu Sicherheitsrichtlinien zu prüfen, bevor Änderungen in die Produktionsumgebung übertragen werden.
  • Die Complianceprüfung in CI/CD-Pipelines und als Teil des Release-Prozesses automatisieren.
  • Ihre Google Cloud-Infrastruktur auf die gleiche Weise testen, wie Sie Ihre Infrastruktur in anderen Cloudumgebungen testen.

Google Cloud bietet verschiedene Ressourcen, die Ihnen den Einstieg in Chef InSpec erleichtern:

  • Das Google Cloud InSpec-Ressourcenpaket enthält die Referenzressourcen für das Schreiben von Chef InSpec-Tests für Google Cloud-Objekte.
  • Das Google Cloud InSpec CIS-Profil enthält eine Reihe von Chef InSpecs-Tests, die die Sicherheitslage Ihrer Google Cloud-Projekte anhand des Center for Internet Security-Benchmark (CIS) bewerten.

Best Practices für die Verwendung von Chef InSpec mit Google Cloud

Im Folgenden finden Sie allgemeine Best Practices für die Verwendung von Chef InSpec:

  • Definieren und übernehmen Sie einen Prozess zur Behebung der bei Ihren Chef InSpec-Tests ermittelten Verstöße. Chef InSpec hebt Verstöße gegen Ihre Richtlinien- und Compliance-Anforderungen hervor, führt jedoch keine Behebung durch.
  • Erteilen Sie dem Dienstkonto, mit dem Sie die Chef InSpec-Tests ausführen, die entsprechenden IAM-Berechtigungen. Wenn Sie beispielsweise Cloud Storage-Buckets testen, muss das Dienstkonto die entsprechenden IAM-Rollen für Cloud Storage haben.
  • Konfigurieren Sie Chef InSpec-Reporter so, dass formatierte Berichte erstellt werden, die die Tests und Ergebnisse beschreiben. Sie können diese Berichte speichern, um einen Verlaufsdatensatz bereitzustellen. Sie können diese Berichte auch als Eingaben für Ihre anderen Sicherheits- und Compliancetools verwenden. Sie können beispielsweise Chef InSpec und Security Command Center einbinden.
  • Gruppieren Sie verwandte Chef InSpec-Tests in Profilen. Sie können für unterschiedliche Anwendungsfälle verschiedene Profile erstellen. Beispiel: Sie können als Teil Ihrer geplanten nächtlichen Tests ein umfassendes End-to-End-Profil ausführen. Oder Sie erstellen ein kürzeres, zielgerichteteres Profil als Reaktion auf Echtzeitereignisse.

Chef InSpec-Tests schreiben

Schreiben Sie die Chef InSpec-Tests mit Chef InSpec DSL, einer Ruby-DSL zum Schreiben von Auditkontrollen.

Der folgende Code zeigt ein Kontrollelement zum Überprüfen von Attributen von Cloud Storage-Buckets:

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

Mit dem Kontrollelement werden die folgenden Informationen angegeben:

  • Metadaten, die das Kontrollelement beschreiben
  • Auswirkungen oder Schweregrad von Fehlern
  • Richtlinienprüfungen, die Attribute jedes Cloud Storage-Buckets in Ihrem Projekt verifizieren

Chef InSpec-Tests mit Cloud Build ausführen

Die in diesem Dokument beschriebenen Muster verwenden Cloud Build und das Chef InSpec-Container-Image, um die InSpec-Tests auszuführen. Mit Cloud Build können Sie Container-Images ausführen und Build-Schritte zu einer Pipeline verketten. Sie können beispielsweise die Chef InSpec-Tests in einem Build-Schritt ausführen und dann die generierten Berichte in einem nachfolgenden Schritt exportieren oder analysieren. Die Verwendung von Cloud Build ist jedoch nicht erforderlich. Sie können Chef InSpec in beliebige Tools einbinden.

Die folgende Cloud Build-Konfigurationsdatei zeigt eine Pipeline mit zwei Build-Schritten:

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

Im ersten Schritt werden die Google Cloud CIS-Benchmark-Tests ausgeführt und ein Bericht im JSON-Format erstellt. Der Build-Schritt verwendet das Container-Image chef/inspec und ruft die Tests aus dem öffentlichen Google Cloud CIS-GitHub-Repository ab. Im zweiten Build-Schritt wird der generierte Bericht in einen Cloud Storage-Bucket kopiert.

Der Einfachheit halber verweist das vorherige Beispiel auf das Tag latest für alle Container-Images. Damit Ihre Builds reproduzierbar sind, sollten Sie auf eine bestimmte, feste Container-Image-Version verweisen und nicht auf eine rollierende Version wie latest.

Wenn einer der Tests fehlschlägt, gibt Chef InSpec einen Fehler zurück. Anstatt den Build fehlschlagen zu lassen, schreibt der erste Build-Schritt eine fail.marker-Datei und der zweite Build-Schritt wird auch dann ausgeführt, wenn einer der Chef InSpec-Tests fehlschlägt. Wenn der Build zur Hervorhebung der Fehler explizit fehlschlagen soll, können Sie in einem letzten Build-Schritt nach der Datei fail.marker suchen und den Build fehlschlagen lassen, falls sie vorhanden ist.

Chef InSpec-Berichte analysieren

Sie können Chef InSpec-Reporter konfigurieren, um formatierte Berichte zu erstellen, die die InSpec-Tests und -Ergebnisse beschreiben. Sie können diese Berichte speichern, um einen Verlaufsdatensatz bereitzustellen. Sie können diese Berichte auch als Eingaben für Ihre anderen Sicherheits- und Compliancetools verwenden oder Visualisierungen oder Warnungen generieren. Für die später in diesem Dokument beschriebenen Muster wird empfohlen, die Chef InSpec-Berichte in einem Cloud Storage-Bucket zu speichern.

Das folgende Diagramm zeigt, wie Sie die Berichte speichern und automatisch weitere Aktionen auslösen können.

Durch Berichte ausgelöste Ereignisse.

Wenn Sie den Bericht einem Cloud Storage-Bucket hinzufügen, wird ein Ereignis generiert. Sie können als Reaktion auf dieses Ereignis eine weitere Aktion oder Analyse des Berichts auslösen. Im obigen Diagramm lösen Sie eine Cloud Functions-Funktion aus, die Details der Chef InSpec-Tests in BigQuery schreibt, und eine weitere Cloud Functions-Funktion, die Ergebnisse zu Security Command Center hinzufügt.

Chef InSpec und Security Command Center einbinden

Security Command Center ist die kanonische Sicherheits- und Risikodatenbank für Google Cloud. Security Command Center bietet zentralisierte Sichtbarkeit aller Ihrer Google Cloud-Ressourcen und eine automatische Analyse Ihrer Cloud-Ressourcen auf bekannte Sicherheitslücken. Wir empfehlen, Security Command Center für Ihre Organisation zu aktivieren.

Sie können die Ergebnisse Ihrer Chef InSpec-Tests zu Security Command Center hinzufügen. Security Command Center dient als zentrale Datenplattform zum Aggregieren und Verwalten von Sicherheitsergebnissen aus mehreren Quellen.

Security Command Center umfasst Security Health Analytics. Security Health Analytics scannt Ihre Google Cloud-Projekte und Ressourcen automatisch auf gängige Sicherheitslücken. Security Health Analytics führt beispielsweise Scans aus, die Ihre Projekte in Bezug auf die CIS Google Cloud Foundation 1.0-Benchmark prüfen. Sie können einen ähnlichen Satz von Tests auch mit dem Google Cloud InSpec CIS-Profil ausführen. Vergleichen Sie den Umfang Ihrer Chef InSpec-Tests so, dass die Tests die von Security Health Analytics durchgeführten Prüfungen nicht duplizieren.

Es gibt mehrere Möglichkeiten, Chef InSpec-Ergebnisse zu Security Command Center hinzuzufügen:

Muster

In diesem Abschnitt werden Muster zur Einbindung von Chef InSpec in Ihre täglichen Vorgänge beschrieben. Sie können diese Muster kombinieren, um kontinuierliche Compliance-Tests zu ermöglichen.

Planen Sie die Chef InSpec-Tests.

Bei diesem Muster werden die Chef InSpec-Tests nach einem festen Zeitplan ausgeführt. Wir empfehlen diesen Ansatz mit festem Zeitplan für den Einstieg in Chef InSpec, da Sie Chef InSpec-Tests durchführen können, ohne Ihre vorhandenen Prozesse zu ändern.

Das folgende Diagramm zeigt, wie Sie Ihre Tests nach einem Zeitplan ausführen können.

Planen Sie die Chef InSpec-Tests.

Im vorherigen Diagramm erstellen Sie einen Cloud Scheduler-Job, der mit der von Ihnen bevorzugten Häufigkeit ausgeführt wird. Jedes Mal, wenn Ihr Job ausgeführt wird, wird eine Cloud Build-Pipeline ausgelöst, die Ihre Chef InSpec-Tests ausführt und den Testbericht an Cloud Storage ausgibt. Weitere Informationen finden Sie unter Builds planen.

Dieses Muster bietet folgende Vorteile:

  • Sie können Chef InSpec-Tests mit minimalen Änderungen an Ihren vorhandenen Prozessen ausführen.
  • Sie können Chef InSpec-Tests unabhängig von den Prozessen verwenden, die Sie zum Bereitstellen und Verwalten Ihrer Infrastruktur und Anwendungen verwenden.

Dieses Muster unterliegt den folgenden Einschränkungen:

  • Die Chef InSpec-Tests sind von der Infrastrukturbereitstellung entkoppelt, wodurch es schwieriger ist, bestimmte Änderungen fehlgeschlagener Chef InSpec-Tests zuzuordnen.
  • Die Chef InSpec-Tests werden nur regelmäßig ausgeführt. Daher kann es zu einigen Verzögerungen kommen, bevor Sie Compliance- oder Richtlinienverstöße feststellen.

Direkt in CI/CD-Pipelines einbinden

Viele Organisationen automatisieren die Bereitstellung und Verwaltung ihrer Infrastruktur mithilfe von Tools wie Terraform oder Config Connector. Normalerweise wird die Infrastruktur nur als Teil einer CI/CD-Pipeline erstellt oder geändert. Weitere Informationen zu CI/CD-Konzepten in Google Cloud finden Sie unter Moderne CI/CD mit GKE Enterprise.

In diesem Muster fügen Sie Chef InSpec-Tests als zusätzliche Schritte in Ihre Infrastrukturbereitstellungspipelines ein, damit Sie Ihre Infrastruktur bei jeder Ausführung Ihrer Bereitstellungspipeline validieren können. Sie können den Build fehlschlagen lassen, wenn es Verstöße gegen die Compliance gibt.

Das folgende Diagramm zeigt einen gängigen Workflow, bei dem die Bereitstellungspipeline basierend auf einem Commit ausgelöst wird, der Infrastrukturänderungen enthält.

Chef Inspec in CI/CD-Pipelines einbinden.

Im obigen Diagramm werden die Infrastrukturänderungen auf eine Test- oder Staging-Umgebung angewendet und dann die Chef InSpec-Tests für diese Umgebung ausgeführt. Wenn alle Chef InSpec-Prüfungen konform sind, können Sie die Infrastrukturänderungen zusammenführen und auf die Produktionsumgebung anwenden, und die Chef InSpec-Tests laufen noch einmal gegen die Produktionsumgebung.

Dieses Muster bietet folgende Vorteile:

  • Die Chef InSpec-Tests sind direkt in Ihren Bereitstellungsprozess eingebunden, sodass Verstöße schnell erkannt werden.
  • Wenn die Chef InSpec-Tests nicht erfolgreich sind, können Sie die Bereitstellung explizit fehlschlagen lassen.

Dieses Muster unterliegt den folgenden Einschränkungen:

  • Die Chef InSpec-Tests sind direkt in Ihre Build-Pipelines eingebunden. Daher muss das Team, das Ihre Build-Pipeline verwaltet, die Chef InSpec-Tests verstehen.
  • Wenn Sie mehrere Builds haben, die Chef InSpec-Tests erfordern, müssen Sie jedem einzelnen Build Chef-InSpec-Schritte hinzufügen, was das Verwalten und Skalieren von Chef InSpec-Maßnahmen erschwert.

Indirekt in CI-/CD-Pipelines einbinden

Dieses Muster ähnelt dem vorherigen Muster, allerdings führen Sie Ihre Chef InSpec-Tests nicht direkt als Schritt in der Bereitstellungspipeline, sondern in einer separaten Pipeline aus. Diese separate Pipeline wird von Ihren Bereitstellungspipelines ausgelöst. Sie können Ihre Chef InSpec-Logik von Ihren Infrastrukturpipelines trennen, aber weiterhin Compliance- und Richtlinientests als Teil des Bereitstellungsworkflows ausführen.

Cloud Build generiert automatisch Build-Benachrichtigungen, wenn der Status des Builds geändert wird. Dies ist beispielsweise der Fall, wenn der Build erstellt wird, der Build in einen funktionsfähigen Zustand wechselt oder der Build abgeschlossen wird. Die Benachrichtigungen werden in einem Pub/Sub-Thema veröffentlicht und enthalten Informationen zum Build, einschließlich der einzelnen Build-Schritte und ihrer Argumente.

Das folgende Diagramm zeigt, wie Sie eine Cloud Functions-Funktion erstellen können, die automatisch ausgelöst wird, wenn eine Nachricht im Pub/Sub-Thema für die Build-Benachrichtigung veröffentlicht wird.

Indirekte Integration von Chef InSpec in CI/CD-Pipelines.

Im obigen Diagramm kann die Funktion die Build-Benachrichtigung prüfen und bei Bedarf die Chef InSpec-Pipeline auslösen. Beispielsweise möchten Sie die Chef InSpec-Pipeline nur als Reaktion auf erfolgreiche Builds auslösen, die bestimmte Build-Schritte enthalten.

Dieses Muster bietet folgende Vorteile:

  • Die Chef InSpec-Tests sind unabhängig von Ihren Bereitstellungspipelines. Die Teams, die die Bereitstellungspipelines verwalten, müssen nicht mit Chef InSpec interagieren.
  • Sie können Ihre Chef InSpec-Tests zentralisieren, um die Verwaltung und Skalierung Ihrer Chef InSpec-Maßnahmen zu vereinfachen.
  • Sie können die Chef InSpec-Tests je nach den Ergebnissen und Ausgaben der vorgelagerten Builds selektiv ausführen.

Dieses Muster unterliegt den folgenden Einschränkungen:

  • Sie müssen Code schreiben und verwalten, um die Build-Benachrichtigungen zu parsen und zu analysieren, um zu bestimmen, ob Ihre Chef InSpec-Tests ausgeführt und Parameter an Ihre Chef InSpec-Tests übergeben werden sollen.
  • Cloud Build-Benachrichtigungen werden in einem Pub/Sub-Thema im selben Projekt veröffentlicht. Wenn Builds in mehreren Projekten vorhanden sind, müssen Sie die Cloud Functions-Funktion in jedem Projekt bereitstellen.

Chef InSpec-Tests als Reaktion auf Cloud Asset Inventory-Benachrichtigungen auslösen

Cloud Asset Inventory bietet ein Inventar aller Ihrer Google Cloud-Ressourcen. Mit Cloud Asset Inventory können Sie Assets und Asset-Metadaten in Ihren Google Cloud-Projekten, Ordnern und Ihrer Organisation suchen, analysieren und exportieren. Sie können Cloud Asset Inventory auch verwenden, um in Echtzeit Benachrichtigungen über Änderungen an Ihren Cloud-Ressourcen und Richtlinien zu senden.

Das folgende Diagramm zeigt, wie Sie Ihre Chef InSpec-Tests anhand von Benachrichtigungen aus Cloud Asset Inventory ausführen können.

Chef InSpec-Tests anhand von Benachrichtigungen auslösen.

Das obige Diagramm zeigt, wie Sie nahezu in Echtzeit Feedback zu neuen oder aktualisierten Cloud-Ressourcen erhalten können, die nicht konform sind. Sie können die Benachrichtigungen so filtern, dass Sie nur bei Änderungen an bestimmten Ressourcentypen benachrichtigt werden. Sie können diese Benachrichtigungen verwenden, um gezielte, ressourcenspezifische Chef InSpec-Tests auszulösen. Sie führen beispielsweise immer einen bestimmten Satz von Tests aus, wenn ein Cloud Storage-Bucket erstellt wird, und einen anderen Chef InSpec-Testsatz, wenn eine IAM-Richtlinie aktualisiert wird.

Dieses Muster bietet folgende Vorteile:

  • Je nach den spezifischen Änderungen an Ihren Cloud-Assets können Sie gezielte, ressourcenspezifische Chef InSpec-Tests auslösen.
  • Cloud Asset Inventory-Benachrichtigungen werden nahezu in Echtzeit zugestellt, sodass etwaige Compliance- oder Richtlinienverstöße schnell erkannt werden.
  • Sie können dieses Muster unabhängig von allen Prozessen nutzen, die Sie zum Bereitstellen und Verwalten Ihrer Infrastruktur verwenden. Die Chef InSpec-Tests werden unabhängig davon ausgeführt, ob die Infrastruktur von einem einzelnen Entwickler oder einer CI-/CD-Pipeline erstellt oder geändert wurde.
  • Cloud Asset Inventory kann Benachrichtigungen über Änderungen an Ihren Ressourcen in der gesamten Organisation oder aus ausgewählten Ordnern oder Projekten generieren. Sie können je nach Ordner oder Projekt, aus dem die Änderung stammt, bestimmte Gruppen von Chef InSpec-Tests ausführen.
  • Sie können dieses Muster zusammen mit den anderen Mustern verwenden. Viele Organisationen haben beispielsweise keine automatisierten Bereitstellungen für ihre Entwicklungs- oder Sandbox-Umgebungen. Sie können dieses Muster verwenden, um ausgewählte Richtlinienprüfungen für diese Umgebungen durchzuführen und gleichzeitig die CI/CD-Pipelines für Ihre Produktions- und Staging-Umgebungen einzubinden.

Dieses Muster unterliegt den folgenden Einschränkungen:

  • Dieses Muster ist möglicherweise nicht praktikabel, wenn eine große Anzahl von Änderungen an Ihren Cloud-Assets auftritt, da Ihre Chef InSpec-Tests bei jeder Änderung ausgelöst werden können.
  • Sie müssen Code schreiben und verwalten, um die Benachrichtigungen von Cloud Asset Inventory zu parsen und zu analysieren, um zu bestimmen, ob Sie Ihre Chef InSpec-Tests ausführen möchten.

Nächste Schritte