In diesem Dokument wird erläutert, was die CIS-Benchmark ist, wie sie sich auf Container-Optimized OS (COS) bezieht, wie Sie den Compliance-Status in der Instanz prüfen und wie Sie im Fehlerfall vorgehen.
Übersicht
Das Center for Internet Security (CIS) veröffentlicht Benchmarks mit Best-Practice-Sicherheitsempfehlungen für verschiedene Plattformen. Die CIS-Benchmark von Container-Optimized OS besteht aus einer Reihe von Empfehlungen für die Konfiguration von Instanzen, die Container-Optimized OS verwenden, um ein hohes Sicherheitsniveau zu bieten. Sowohl COS-Images für x86 als auch für ARM sind CIS-konform.
Auf die Benchmark zugreifen
Die CIS-Benchmark von Container-Optimized OS ist auf der CIS-Website verfügbar:
- Rufen Sie die CIS-Benchmarks-Downloadseite auf.
- Suchen Sie die CIS Google Container-Optimized OS-Benchmark.
- Klicken Sie auf PDF herunterladen.
Sicherheitsempfehlungsstufen
CIS definiert die folgenden Empfehlungsstufen für Container-Optimized OS.
Stufe 1
Empfehlungen auf dieser Ebene sollten für die meisten Umgebungen gelten. Diese Stufe umfasst Empfehlungen wie die folgenden:
- Address Space Layout Randomization ist aktiviert
/tmpkann nicht zum Ausführen ausführbarer Binärdateien verwendet werden- Das Senden von Paketweiterleitungen ist deaktiviert
Stufe 2
Empfehlungen auf dieser Ebene erweitern die Empfehlungen der Stufe 1, was eine strengere Sicherheitsumgebung zur Folge hat. Die Empfehlungen der Stufe 2 sind nicht unbedingt für alle Fälle geeignet, da sie möglicherweise Anwendungsänderungen erfordern. Sie sollten die Empfehlungen auf Stufe 2 für Ihre Umgebung bewerten, bevor Sie sie anwenden. Diese Stufe umfasst Empfehlungen wie die folgenden:
- Für alle offenen Ports sind Firewallregeln vorhanden
- ICMP-Weiterleitungen und Router-Ankündigungen werden nicht akzeptiert
- Das Standardzeitlimit für die Nutzershell beträgt 900 Sekunden oder weniger
Wie Container-Optimized OS die CIS-Benchmarks erfüllt
Ab Meilenstein 97 entsprechen Container-Optimized OS-Images standardmäßig der CIS-Stufe 1 und bieten die Möglichkeit, der CIS-Stufe 2 zu entsprechen. Außerdem bieten wir einen Scanner, mit dem Sie Ihre Instanz anhand der CIS-Empfehlungsstufen prüfen können.
Die CIS-Konfiguration, die die Empfehlungen definiert, ist unter /usr/share/google/security/cis-compliance/cis_config.textproto vorhanden. Der CIS-Scanner verwendet die Konfiguration, um den Compliance-Status der Instanz zu prüfen. Die Ergebnisse jeder Ausführung des CIS-Level-Compliance-Scanners werden in /var/lib/google/cis_scanner_scan_result.textproto geschrieben. Diese Datei wird bei jeder Ausführung des CIS-Scanners überschrieben. Wenn eine der Überprüfungen der CIS-Stufe 1 oder 2 fehlschlägt, enthält die Datei cis_scanner_scan_result.textproto eine Liste aller fehlgeschlagenen Überprüfungen.
Compliance-Status der Instanz prüfen
Container-Optimized OS-Images bieten die folgenden systemd-Dienste für die Compliance-Prüfung und -Konfiguration:
- cis-level1.service: Standardmäßig aktiviert und wird beim Start ausgeführt. Wenn der Dienst gestartet wird, wird geprüft, ob die Instanz der CIS-Stufe 1 entspricht.
- cis-level2.service: Standardmäßig deaktiviert. Mit diesem Dienst können Sie die Instanz so konfigurieren, dass sie der CIS-Stufe 2 entspricht, und den Compliance-Status sowohl für Stufe 1 als auch für Stufe 2 prüfen.
In den folgenden Abschnitten wird erläutert, wie Sie den Compliance-Status der Instanz prüfen und den Überprüfungsprozess automatisieren.
Compliance-Status der CIS-Stufe 1 prüfen
Prüfen Sie den Status von cis-level1.service, um zu sehen, ob Ihre Instanz der CIS-Stufe 1 entspricht:
systemctl status cis-level1
Die Ausgabe sieht etwa so aus:
Reading scan config from /usr/share/google/security/cis-compliance/cis_config.textproto
Running scan of 62 benchmarks
Scan status: SUCCEEDED
Found 0 non-compliant benchmarks
Writing scan results to /var/lib/google/cis_scanner_scan_result.textproto
Wenn nicht konforme Überprüfungen gefunden werden, lesen Sie den Artikel CIS-Compliance-Überprüfung der Stufe 1 oder 2 schlägt fehl.
Der Dienst cis-level1.service prüft die Compliance mit der CIS-Stufe 1 nur einmal, wenn die Instanz gestartet wird. Informationen zum Konfigurieren regelmäßiger Compliance-Prüfungen finden Sie unter Regelmäßige Prüfung des CIS-Compliance-Status.
CIS-Stufe 2-Compliance konfigurieren und Status prüfen
Mit dem Dienst cis-level2 können Sie die Instanz so konfigurieren, dass sie der CIS-Stufe 2 entspricht, und den Compliance-Status sowohl für Stufe 1 als auch für Stufe 2 prüfen. Der systemd-Dienst unterstützt alle Empfehlungen der CIS-Stufe 2 außer den folgenden:
4.1.1.2 Ensure Logging is running (ID: logging-service-running)
Diese Empfehlung ist standardmäßig deaktiviert, kann aber wieder aktiviert werden, indem Sie die ID aus der Liste der deaktivierten Empfehlungen entfernen. Diese Liste finden Sie in der Datei
/etc/cis-scanner/env_vars. Diese Überprüfung ist nur in Meilensteinen ab 109 vorhanden. In früheren Meilensteinen entspricht die Empfehlung, wenn Sie das Logging selbst aktivieren. Wenn Sie die Deaktivierung rückgängig machen, wird beim Ausführen des Dienstescis-level2ein Skript ausgeführt, das das Fluent Bit-Logging startet. Lassen Sielogging-service-runningdeaktiviert, wenn Sie unser Standard-Logging nicht verwenden oder Ihr eigenes Logging verwenden möchten.
Bei den folgenden Empfehlungen konfiguriert der Dienst cis-level2 die Instanz, prüft aber nicht den Compliance-Status:
105 und niedriger:
- 3.3.1.1 Ensure IPv6 default deny firewall policy
- 3.3.1.2 Ensure IPv6 loopback traffic is configured
- 3.3.1.3 Ensure IPv6 outbound and established connections are configured
- 3.3.1.4 Ensure IPv6 firewall rules exist for all open ports
- 3.3.2.1 Ensure default deny firewall policy
- 3.3.2.2 Ensure loopback traffic is configured
- 3.3.2.3 Ensure outbound and established connections are configured
109 und höher:
- 3.3.1.4 Ensure IPv6 firewall rules exist for all open ports
Der Dienst cis-level2 ist standardmäßig deaktiviert. Führen Sie den folgenden Befehl aus, um den Dienst zu starten:
systemctl start cis-level2.service
Prüfen Sie den Status von cis-level2.service, um zu sehen, ob Ihre Instanz erfolgreich konfiguriert wurde und den Empfehlungen der CIS-Stufe 2 entspricht:
systemctl status cis-level2
Die Ausgabe sieht etwa so aus:
Reading scan config from /usr/share/google/security/cis-compliance/cis_config.textproto
Running scan of 112 benchmarks
Scan status: SUCCEEDED
Found 0 non-compliant benchmarks
Writing scan results to /var/lib/google/cis_scanner_scan_result.textproto
Wenn die Instanzkonfiguration fehlschlägt oder nicht konforme Überprüfungen gefunden werden, lesen Sie den Abschnitt Fehlerbehebung.
Der Dienst cis-level2 konfiguriert die Instanz und prüft die Compliance mit der CIS-Stufe 2 nur einmal. Informationen zum Konfigurieren regelmäßiger Compliance-Prüfungen finden Sie unter Regelmäßige Prüfung des CIS-Compliance-Status.
Regelmäßige Prüfung des CIS-Compliance-Status
Container-Optimized OS-Images enthalten die folgenden Dienste, um die CIS-Compliance regelmäßig zu prüfen:
- cis-compliance-scanner.service: Prüft den Compliance-Status anhand von Umgebungsvariablen, die unter
/etc/cis-scanner/env_varsdefiniert sind. Standardmäßig prüft dieser Dienst die Compliance mit der CIS-Stufe 1 und ist deaktiviert. - cis-compliance-scanner.timer: Führt
cis-compliance-scanner.serviceregelmäßig aus. Der Standardzeitraum ist einmal täglich.
Scannerdienst konfigurieren
Der Dienst cis-compliance-scanner.service ist für die Prüfung des CIS-Compliance-Status anhand der Umgebungsvariablen verantwortlich, die unter /etc/cis-scanner/env_vars definiert sind. Standardmäßig prüft dieser Dienst die Compliance mit der CIS-Stufe 1.
Wenn Sie die Compliance mit der CIS-Stufe 2 prüfen möchten, legen Sie die Umgebungsvariable LEVEL in /etc/cis-scanner/env_vars auf 2 fest. Die Datei /etc/cis-scanner/env_vars sieht etwa so aus:
# cis-compliance-scanner.service environment variables
# The config file defines which checks to perform by cis_scanner
CONFIG="/usr/share/google/security/cis-compliance/cis_config.textproto"
# Where to store the result of the scan
RESULT="/var/lib/google/cis_scanner_scan_result.textproto"
# Upto which level to scan. It can be 1 or 2
LEVEL="2"
# Extra options that can be passed to cis_scanner
# For valid options, see output of `cis_scanner -h`
EXTRA_OPTIONS=""
Timer konfigurieren
Wenn Sie regelmäßige Compliance-Scans einrichten möchten, starten Sie die Einheit cis-compliance-scanner.timer:
systemctl start cis-compliance-scanner.timer
Standardmäßig startet cis-compliance-scanner.timer den Dienst cis-compliance-scanner.service einmal täglich. Wenn Sie den Scanzeitraum ändern möchten, überschreiben Sie das Feld OnUnitActiveSec der Einheit cis-compliance-scanner.timer:
sudo mkdir /etc/systemd/system/cis-compliance-scanner.timer.d
sudo tee /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf <<EOF
[Unit]
Description=Run CIS Scanner once an hour
[Timer]
OnUnitActiveSec=1h
EOF
In diesem Beispiel wird der Scanzeitraum auf einmal pro Stunde festgelegt.
Aktualisieren Sie die systemd-Einheiten, um die Änderungen anzuwenden:
systemctl daemon-reload
Bestimmte CIS-Compliance-Prüfungen deaktivieren
Die Empfehlungen der CIS-Stufe 1 und 2 sind für die meisten Umgebungen geeignet. Einige Empfehlungen sind jedoch möglicherweise nicht auf Ihre spezifische Umgebung anwendbar. Wenn Sie bestimmte Empfehlungen deaktivieren möchten, verwenden Sie die Umgebungsvariable EXTRA_OPTIONS in /etc/cis-scanner/env_vars.
In der folgenden Beispieldatei env_vars wird die Empfehlung etc-passwd-permissions deaktiviert:
# cis-compliance-scanner.service environment variables
# The config file defines which checks to perform by cis_scanner
CONFIG="/usr/share/google/security/cis-compliance/cis_config.textproto"
# Where to store the result of the scan
RESULT="/var/lib/google/cis_scanner_scan_result.textproto"
# Upto which level to scan. It can be 1 or 2
LEVEL="1"
# Extra options that can be passed to cis_scanner
# For valid options:`cis_scanner -h`
EXTRA_OPTIONS="--benchmark-opt-out-ids=etc-passwd-permissions"
Aktivierung und Prüfung des CIS-Compliance-Status automatisieren
Sie können den Compliance-Prüfungsprozess für Ihre Instanzen mit cloud-init oder OS Policy automatisieren. Die folgenden Beispiele zeigen einige Anwendungsfälle für die einzelnen Tools:
- Beispiel 1: Compliance mit der CIS-Stufe 1 einmal täglich prüfen.
- Beispiel 2: Compliance mit der CIS-Stufe 1 einmal pro Stunde prüfen.
- Beispiel 3: Compliance mit der CIS-Stufe 2 einmal täglich prüfen.
- Beispiel 4: Bestimmte CIS-Compliance-Prüfung deaktivieren.
cloud-init verwenden
Bevor Sie die folgenden Beispiele ausprobieren, sollten Sie sich mit der Konfiguration einer COS-Instanz mit cloud-init vertraut machen. Folgen Sie dazu der Anleitung unter cloud-init mit dem Cloud-Konfigurationsformat verwenden.
Beispiel 1
Die folgende Beispielkonfiguration startet regelmäßige CIS-Stufe 1-Scans mit dem Standardzeitraum von einmal täglich.
#cloud-config runcmd: # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
Beispiel 2
Im folgenden Beispiel wird die regelmäßige CIS-Stufe 1-Prüfung einmal pro Stunde konfiguriert.
#cloud-config # Override cis-compliance-scanner.timer with 1 hour frequency. write_files: - path: /etc/systemd/system/cis-compliance-scanner.timer.d/override.conf permissions: 0600 owner: root content: | [Unit] Description=Run CIS Scanner once an hour [Timer] OnUnitActiveSec=1h runcmd: # Reload systemd units. - systemctl daemon-reload # Check the compliance status of the instance once an hour. - systemctl start cis-compliance-scanner.timer
Beispiel 3
Im folgenden Beispiel wird die regelmäßige CIS-Stufe 2-Prüfung mit dem Standardzeitraum von einmal täglich konfiguriert.
#cloud-config runcmd: # Configure the instance for CIS level 2. - systemctl start cis-level2.service # Change the scan level to CIS Level 2. - sed -i 's/^LEVEL=.*$/LEVEL="2"/' /etc/cis-scanner/env_vars # Check the compliance status of the instance once a day. - systemctl start cis-compliance-scanner.timer
Beispiel 4
Im folgenden Beispiel wird der Scanner so konfiguriert, dass er einmal täglich ausgeführt wird, und eine bestimmte CIS-Empfehlung wird deaktiviert.
#cloud-config runcmd: # Opt-out of the etc-passwd-permissions check. - sed -i 's/^EXTRA.*$/EXTRA_OPTIONS="--benchmark-opt-out-ids=etc-passwd-permissions"/' /etc/cis-scanner/env_vars # Check the compliance of the instance once a day. - systemctl start cis-compliance-scanner.timer
OS Policy verwenden
Sie können eine OS Policy verwenden, um CIS-Benchmark-Scans zu konfigurieren. Bevor Sie beginnen, sollten Sie sich mit OS Policy vertraut machen, einschließlich der folgenden Themen:
Außerdem müssen Sie in den folgenden Beispielen die Optionen instanceFilter und rollout für die Bereitstellung hinzufügen.
Beispiel 1
Die folgende Beispielkonfiguration startet regelmäßige CIS-Stufe 1-Scans mit dem Standardzeitraum von einmal täglich.
Beispiel 2
Im folgenden Beispiel wird die regelmäßige CIS-Stufe 1-Prüfung einmal pro Stunde konfiguriert.
Beispiel 3
Im folgenden Beispiel wird die regelmäßige CIS-Stufe 2-Prüfung mit dem Standardzeitraum von einmal täglich konfiguriert.
Beispiel 4
Im folgenden Beispiel wird der Scanner so konfiguriert, dass er einmal täglich ausgeführt wird, und eine bestimmte CIS-Empfehlung wird deaktiviert.
Fehlerbehebung
In diesem Abschnitt wird beschrieben, wie Sie Probleme im Zusammenhang mit CIS-Benchmark-Scans beheben.
Konfiguration einer Instanz zur Einhaltung der Empfehlungen der CIS-Stufe 2 schlägt fehl
Der Dienst cis-level2 konfiguriert zuerst die Instanz so, dass sie den Empfehlungen der CIS-Stufe 2 entspricht, und prüft dann die Compliance mit der CIS-Stufe 1 und 2. Wenn die Konfiguration der Instanz fehlschlägt, wird der Dienst cis-level2 mit der folgenden Fehlermeldung beendet:
Job for cis-level2.service failed because the control process exited with error code.
See "systemctl status cis-level2.service" and "journalctl -xeu cis-level2.service" for details.
In den Journal-Logs werden die Empfehlungen erwähnt, die nicht auf die Instanz angewendet werden konnten und zum Fehler des systemd-Dienstes cis-level2 geführt haben.
CIS-Compliance-Überprüfung der Stufe 1 oder 2 schlägt fehl
Die Scanergebnisse für jede Ausführung der CIS-Level-Compliance werden in /var/lib/google/cis_scanner_scan_result.textproto geschrieben. Wenn eine der Überprüfungen der CIS-Stufe 1 oder 2 fehlschlägt, enthält die Textproto-Datei die Liste aller fehlgeschlagenen Überprüfungen, wie im folgenden Beispiel:
cat /var/lib/google/cis_scanner_scan_result.textproto
# Output
start_time: {
seconds: 1648241700
nanos: 763152171
}
end_time: {
seconds: 1648241700
nanos: 812992527
}
scanner_version: "1.1.4.3"
benchmark_version: "1.0.0"
status: {
status: SUCCEEDED
}
non_compliant_benchmarks: {
id: "etc-passwd-permissions"
compliance_occurrence: {
non_compliant_files: {
path: "/etc/passwd"
reason: "File permission is 0664, expected the following bits to be set: 0444 and the following bits to be clear: 0133"
}
}
}
compliant_benchmarks: {
id: "etc-passwd-permissions"
compliance_occurrence: {}
}
Um die fehlgeschlagenen Überprüfungen zu beheben, verwenden Sie die CIS-Benchmark und folgen Sie der Anleitung im Abschnitt Remediation für die fehlgeschlagene Überprüfung, um die Instanz konform zu machen. Um herauszufinden, welche Empfehlung einer fehlgeschlagenen Überprüfung in der CIS-Benchmark entspricht, suchen Sie die non_compliant_benchmark's ID in der CIS-Scanner-Konfigurationsdatei unter /usr/share/google/security/cis-compliance/cis_config.textproto.