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 bei einem Fehler Fehlerbehebungen durchführen.
Übersicht
Das Center for Internet Security (CIS) veröffentlicht Benchmarks mit Best Practices in Bezug auf Sicherheitsempfehlungen für verschiedene Plattformen. Die CIS-Benchmark für 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-x86- als auch ARM-Images 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 Ebene enthält Empfehlungen wie die folgenden:
- Die Adressraum-Layout-Zufallsmix-Funktion ist aktiviert
/tmp
kann 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 zu einer strengeren Sicherheitsumgebung führt. Die Empfehlungen der Stufe 2 sind nicht unbedingt auf alle Fälle anwendbar, da möglicherweise Anwendungsänderungen erforderlich sind. Sie sollten die Empfehlungen auf Stufe 2 für Ihre Umgebung bewerten, bevor Sie sie anwenden. Diese Ebene enthält Empfehlungen wie die folgenden:
- Firewallregeln für alle offenen Ports vorhanden
- ICMP-Weiterleitungen und Router-Anzeigen werden nicht akzeptiert
- Das Standardzeitlimit für die Nutzer-Shell beträgt maximal 900 Sekunden.
So entspricht Container-Optimized OS den CIS-Benchmarks
Ab Meilenstein 97 entsprechen Container-Optimized OS-Images standardmäßig CIS-Level 1 und bieten eine Option zur Einhaltung von CIS-Level 2. Außerdem stellen wir einen Scanner bereit, 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 jedes Durchlaufs des Compliance-Scanners auf CIS-Ebene werden in /var/lib/google/cis_scanner_scan_result.textproto
geschrieben. Diese Datei wird bei jedem Durchlauf des CIS-Scanners überschrieben. Wenn einer der CIS-Level-1- oder -Level-2-Scans fehlschlägt, enthält die Datei cis_scanner_scan_result.textproto
eine Liste aller fehlgeschlagenen Prüfungen.
Compliancestatus der Instanz prüfen
Container-Optimized OS-Images bieten die folgenden systemd-Dienste für die Complianceprüfung und -konfiguration:
- cis-level1.service: Standardmäßig aktiviert und beim Booten gestartet. Beim Starten des Dienstes wird geprüft, ob die Instanz CIS Level 1 entspricht.
- cis-level2.service: Standardmäßig deaktiviert. Mit diesem Dienst können Sie die Instanz so konfigurieren, dass sie CIS Level 2 entspricht. Der Compliance-Status wird sowohl anhand von Level 1 als auch von Level 2 geprüft.
In den folgenden Abschnitten wird beschrieben, wie Sie den Compliance-Status der Instanz prüfen und den Audit-Prozess automatisieren.
CIS Level 1-Compliancestatus prüfen
Prüfen Sie den Status von cis-level1.service
, um festzustellen, ob Ihre Instanz CIS Level 1-konform ist:
systemctl status cis-level1
Die Ausgabe sieht in 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 Prüfungen gefunden werden, lesen Sie den Hilfeartikel CIS-Compliance-Prüfung für Stufe 1/Stufe 2 schlägt fehl.
Die cis-level1.service
prüft nur einmal, beim Starten der Instanz, ob die CIS-Level-1-Anforderungen erfüllt sind. Informationen zum Konfigurieren regelmäßiger Complianceprüfungen finden Sie unter Regelmäßige Überprüfung des CIS-Compliancestatus.
CIS-Level-2-Compliance konfigurieren und Status prüfen
Sie können den Dienst cis-level2
verwenden, um die Instanz so zu konfigurieren, dass sie CIS-Level 2 entspricht und den Compliancestatus sowohl für Level 1 als auch für Level 2 prüft. Der systemd-Dienst unterstützt alle CIS-Level-2-Empfehlungen mit Ausnahme der folgenden:
4.1.1.2 Prüfen, ob die Protokollierung ausgeführt wird (ID: logging-service-running)
Diese Empfehlung ist standardmäßig deaktiviert, kann aber wieder aktiviert werden, indem Sie die ID aus der deaktivierten Liste in der Datei
/etc/cis-scanner/env_vars
löschen. Diese Prüfung gibt es nur in den Meilensteinen 109 und höher. In früheren Meilensteinen erreichen Sie diese Empfehlung, wenn Sie Logging selbst aktivieren. Wenn Sie die Deaktivierung rückgängig machen, wird beim Ausführen des Dienstescis-level2
ein Skript ausgeführt, das das fluent-Bit-Logging startet. Lassen Sielogging-service-running
deaktiviert, wenn Sie unser Standard-Logging nicht verwenden oder Ihr eigenes Logging verwenden möchten.
Bei den folgenden Empfehlungen konfiguriert der cis-level2
-Dienst die Instanz, überprüft den Compliance-Status jedoch nicht:
105 und niedriger:
- 3.3.1.1 Standardmäßige IPv6-Richtlinie zur Ablehnung der Firewall sicherstellen
- 3.3.1.2 IPv6-Loopback-Traffic muss konfiguriert sein
- 3.3.1.3 IPv6-Ausgehende und bestehende Verbindungen müssen konfiguriert sein
- 3.3.1.4 IPv6-Firewallregeln für alle offenen Ports
- 3.3.2.1 Standard-Firewall-Ablehnungsrichtlinie sicherstellen
- 3.3.2.2 Sicherstellen, dass Loopback-Traffic konfiguriert ist
- 3.3.2.3 Ausgehende und bestehende Verbindungen müssen konfiguriert sein
109 und höher:
- 3.3.1.4 IPv6-Firewallregeln für alle offenen 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 festzustellen, ob Ihre Instanz erfolgreich konfiguriert wurde und den CIS-Level-2-Empfehlungen entspricht:
systemctl status cis-level2
Die Ausgabe sieht in 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 Prüfungen gefunden werden, lesen Sie den Abschnitt Fehlerbehebung.
Der cis-level2
-Dienst konfiguriert die Instanz und prüft nur einmal auf die CIS-Level-2-Compliance. Informationen zum Konfigurieren der regelmäßigen Compliance-Prüfung 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 zur regelmäßigen Überprüfung der CIS-Compliance:
- cis-compliance-scanner.service: Prüft den Compliance-Status anhand der unter
/etc/cis-scanner/env_vars
definierten Umgebungsvariablen. Dieser Dienst prüft standardmäßig auf CIS-Level-1-Compliance und ist deaktiviert. - cis-compliance-scanner.timer: wird regelmäßig ausgeführt. Der Standardzeitraum ist einmal täglich.
Scanner-Dienst konfigurieren
Der cis-compliance-scanner.service
ist dafür verantwortlich, den Status der CIS-Compliance anhand der unter /etc/cis-scanner/env_vars
definierten Umgebungsvariablen zu prüfen. Standardmäßig wird mit diesem Dienst die Einhaltung von CIS Level 1 geprüft.
Legen Sie die Umgebungsvariable LEVEL in /etc/cis-scanner/env_vars
auf 2 fest, um die CIS-Level-2-Compliance zu prüfen. Die /etc/cis-scanner/env_vars
-Datei sieht in 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
Starten Sie die Einheit cis-compliance-scanner.timer
, um regelmäßige Compliancescans einzurichten:
systemctl start cis-compliance-scanner.timer
Standardmäßig beginnt cis-compliance-scanner.timer
einmal täglich am cis-compliance-scanner.service
. Wenn Sie den Scanzeitraum ändern möchten, überschreiben Sie das Feld OnUnitActiveSec der cis-compliance-scanner.timer
-Einheit:
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 zu übernehmen:
systemctl daemon-reload
Bestimmte CIS-Compliance-Prüfungen deaktivieren
Die Empfehlungen der CIS-Ebene 1 und 2 sollen für die meisten Umgebungen gelten. Einige Empfehlungen treffen jedoch möglicherweise nicht auf Ihre spezifische Umgebung zu. Verwenden Sie die Umgebungsvariable EXTRA_OPTIONS in /etc/cis-scanner/env_vars
, um bestimmte Empfehlungen zu deaktivieren.
Mit 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-Compliancestatus automatisieren
Sie können die Compliance-Prüfung für Ihre Instanzen mit cloud-init oder Betriebssystemrichtlinien automatisieren. Die folgenden Beispiele zeigen einige Anwendungsfälle für jedes Tool:
- Beispiel 1: CIS-Level-1-Compliance einmal täglich prüfen
- Beispiel 2: CIS-Konformitätsstufe 1 einmal pro Stunde prüfen
- Beispiel 3: CIS-Level-2-Compliance einmal täglich prüfen
- Beispiel 4: Bestimmte CIS-Compliance-Prüfungen 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
In der folgenden Beispielkonfiguration wird ein regelmäßiger CIS-Level-1-Scan mit dem Standardzeitraum von einmal täglich gestartet.
#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 ein stündliches, regelmäßiges CIS-Level-1-Scannen 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 werden regelmäßige CIS-Level-2-Scans mit dem Standardzeitraum 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. Dabei wird eine bestimmte CIS-Empfehlung 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
Betriebssystemrichtlinie verwenden
Sie können eine Betriebssystemrichtlinie verwenden, um das CIS-Benchmark-Scannen zu konfigurieren. Machen Sie sich mit den folgenden Punkten vertraut, bevor Sie beginnen:
- Betriebssystemrichtlinie schreiben
- Zuweisung von Betriebssystemrichtlinien
- Berichte zur Zuweisung von Betriebssystemrichtlinien ansehen
Außerdem müssen Sie in den folgenden Beispielen für die Bereitstellung die Optionen instanceFilter
und rollout
hinzufügen.
Beispiel 1
In der folgenden Beispielkonfiguration wird ein regelmäßiger CIS-Level-1-Scan mit dem Standardzeitraum von einmal täglich gestartet.
Beispiel 2
Im folgenden Beispiel wird ein stündliches, regelmäßiges CIS-Level-1-Scannen konfiguriert.
Beispiel 3
Im folgenden Beispiel werden regelmäßige CIS-Level-2-Scans mit dem Standardzeitraum 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 dem CIS-Benchmark-Scan beheben.
Konfiguration einer Instanz gemäß den CIS-Empfehlungen der Stufe 2 schlägt fehl
Der Dienst cis-level2
konfiguriert die Instanz zuerst so, dass sie CIS-konform ist.
Stufe 2-Empfehlungen und prüft dann die Einhaltung von CIS-Level-1 und -Level 2. Wenn die Konfiguration der Instanz fehlschlägt, wird der cis-level2
-Dienst 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 Journalprotokollen werden die Empfehlungen aufgeführt, die nicht auf die Instanz angewendet werden konnten und zum Absturz des cis-level2
-Systemd-Dienstes geführt haben.
CIS-Compliance-Prüfung auf Stufe 1 oder 2 schlägt fehl
Die Scanergebnisse für jede Ausführung der Compliance auf CIS-Ebene werden in /var/lib/google/cis_scanner_scan_result.textproto
geschrieben. Wenn einer der CIS-Scans der Ebene 1 oder 2 fehlschlägt, enthält die Textproto-Datei eine Liste aller fehlgeschlagenen Prü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: {}
}
Verwenden Sie zur Vermeidung von fehlgeschlagenen Prüfungen die CIS-Benchmark und folgen Sie den Schritten im Abschnitt Remediation
für die fehlgeschlagene Prüfung, um die Instanz konform zu machen. Wenn Sie wissen möchten, welche Empfehlung einer fehlgeschlagenen Prüfung in der CIS-Benchmark entspricht, suchen Sie in der CIS-Scannerkonfigurationsdatei unter /usr/share/google/security/cis-compliance/cis_config.textproto
nach der non_compliant_benchmark's
-ID.