In dieser Anleitung erfahren Sie, wie Sie eine ereignisgesteuerte Pipeline erstellen, mit der Sie das Prüfen von Dateien auf schädlichen Code automatisieren können.
Ein manuelles Prüfen der großen Anzahl von Dateien, die auf Cloud Storage hochgeladen werden, ist für die meisten Anwendungen zu zeitaufwendig.
Diese Pipeline wird mithilfe von Google Cloud-Produkten und einer Open-Source-Antivirus-Engine namens ClamAV erstellt. In dieser Anleitung wird ClamAV in einem Docker-Container ausgeführt, der in Cloud Run gehostet wird. Die Pipeline schreibt auch Logeinträge in Cloud Logging und zeichnet Messwerte in Cloud Monitoring auf.
Sie können mit diesen Logging-Logeinträgen logbasierte Warnungen für infizierte Dateien auslösen. Das Einrichten solcher Warnungen wird in dieser Anleitung jedoch nicht behandelt.
Der Begriff Malware wird in dieser Anleitung als Oberbegriff für Trojaner, Viren und anderen schädlichen Code verwendet.
In dieser Anleitung wird davon ausgegangen, dass Sie mit den Grundfunktionen von Cloud Storage, Cloud Run, Cloud Scheduler, Eventarc, Docker und Node.js vertraut sind.
Architektur
Das folgende Diagramm bietet einen Überblick über die Architektur.
Von dieser Architektur werden zwei Pipelines verwaltet:
- Dateiscan-Pipeline, die prüft, ob eine hochgeladene Datei Malware enthält
- ClamAV Malware Database-Spiegelungs-Pipeline, die einen aktuellen Spiegel der von ClamAV verwendeten Malware-Datenbank verwaltet.
Pipeline zum Scannen von Dateien
Die Dateiscan-Pipeline funktioniert so:
- Endnutzer laden ihre Dateien in den nicht gescannten Cloud Storage-Bucket hoch.
- Der Eventarc-Dienst erfasst dieses Uploadereignis und informiert den Cloud Run-Dienst über diese neue Datei.
- Der Cloud Run-Dienst lädt die neue Datei aus dem nicht gescannten Cloud Storage-Bucket herunter und übergibt sie an den ClamAV Malwarescanner.
- Je nach Ergebnis des Malware-Scans führt der Dienst eine der folgenden Aktionen aus:
- Wenn ClamAV deklariert, dass die Datei sauber ist, wird sie vom nicht gescannten Cloud Storage-Bucket in den sauberen Cloud Storage-Bucket verschoben.
- Wenn ClamAV deklariert, dass die Datei Malware enthält, wird sie aus dem ungescannten Cloud Storage-Bucket in den Quarantäne Cloud Storage-Bucket verschoben.
- Der Dienst meldet das Ergebnis dieser Aktionen an Logging und Monitoring, damit Administratoren Aktionen ausführen können.
Pipeline zur Aktualisierung des ClamAV Malware-Datenbankspiegels
Damit der ClamAV Malwarescanner effektiv gescannt werden kann, muss eine aktuelle Datenbank mit Malwaresignaturen vorhanden sein.
Der ClamAV-Dienst wird mit Cloud Run ausgeführt, einem zustandslosen Dienst. Beim Start einer Instanz des Dienstes muss ClamAV immer die neueste vollständige Malware-Datenbank herunterladen, die mehrere Hundert Megabyte groß ist.
Die öffentliche Malware-Datenbank für ClamAV wird in einem Content Distribution Network (CDN) gehostet, was diese Downloads begrenzt. Wenn mehrere Instanzen gestartet werden und versuchen, die vollständige Datenbank herunterzuladen, kann die Ratenbegrenzung ausgelöst werden. Dadurch wird die von Cloud Run verwendete externe IP-Adresse 24 Stunden lang blockiert. Dadurch wird verhindert, dass der ClamAV-Dienst gestartet wird, und verhindert den Download von Malware-Datenbankupdates.
Außerdem verwendet Cloud Run einen gemeinsamen Pool externer IP-Adressen. Daher werden Downloads von Malwareinstanzen der verschiedenen Projekte vom CDN als von einer einzigen Adresse stammend angesehen und lösen den Block aus.
Diese Pipeline speichert einen aktuellen privaten lokalen Spiegel der Datenbank in Cloud Storage. Dadurch wird sichergestellt, dass auf die öffentliche ClamAV-Datenbank nur einmal pro Update zugegriffen wird, um die kleineren Dateien für differenzielle Updates und nicht die vollständige Datenbank herunterzuladen, wodurch eine Ratenbegrenzung verhindert wird.
Diese Pipeline funktioniert so:
- Ein Cloud Scheduler-Job ist so konfiguriert, dass er alle zwei Stunden ausgelöst wird. Dies entspricht dem Standardintervall für die Aktualisierungsprüfung, das vom ClamAV Freshclam-Dienst verwendet wird. Dieser Job stellt eine HTTP-POST-Anfrage an den Cloud Run-Dienst, der ihn anweist, die Malware-Datenbankspiegelung zu aktualisieren.
- Die Cloud Run-Instanz kopiert die Malware-Datenbankspiegelung aus dem Cloud Storage-Bucket in das lokale Dateisystem.
- Die Instanz führt dann das Tool ClamAV CVDUpdate aus, das alle verfügbaren differenziellen Aktualisierungen herunterlädt und sie auf die Datenbankspiegelung anwendet.
- Anschließend wird der aktualisierte Malware-Datenbankspiegel in den Cloud Storage-Bucket kopiert.
Der in der Cloud Run-Instanz ausgeführte ClamAV freshclam lädt die Malware-Datenbank beim Start von Cloud Storage herunter und überprüft regelmäßig die verfügbaren Datenbankaktualisierungen und lädt sie herunter. Cloud Storage-Bucket während der Laufzeit
Lernziele
Erstellen Sie eine Spiegelung der ClamAV-Malware-Definitionsdatenbank in einem Cloud Storage-Bucket.
Erstellen Sie einen Cloud Run-Dienst mit den folgenden Funktionen:
- Scannen Sie Dateien in einem Cloud Storage-Bucket nach Malware. Verschieben Sie gescannte Dateien je nach Ergebnis des Scans in bereinigte oder unter Quarantäne gestellte Buckets.
- Spiegel der ClamAV-Malware-Definitionsdatenbank in Cloud Storage verwalten.
Erstellen eines Eventarc-Triggers um den Malwarescan-Dienst auszulösen, wenn eine Datei in Cloud Storage hochgeladen wird.
Erstellen Sie einen Cloud Scheduler-Job, um den Malwarescan-Dienst auszulösen, um den Spiegel der Malwaredefinitionsdatenbank in Cloud Storage zu aktualisieren.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build APIs aktivieren.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build APIs aktivieren.
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.
In dieser Anleitung führen Sie alle Befehle über Cloud Shell aus.
Umgebung einrichten
In diesem Abschnitt weisen Sie Einstellungen für Werte zu, die in der gesamten Anleitung verwendet werden, z. B. Regionen und Zonen.
In dieser Anleitung verwenden Sie us-central1
als Region für den Cloud Run-Dienst und us
als Speicherort für den Eventarc-Trigger und Cloud Storage-Buckets.
Legen Sie in Cloud Shell gängige Shell-Variablen fest, einschließlich Region und Standort:
REGION=us-central1 LOCATION=us PROJECT_ID=PROJECT_ID SERVICE_NAME="malware-scanner" SERVICE_ACCOUNT="${SERVICE_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
Legen Sie PROJECT_ID auf Ihre Projekt-ID fest.
Initialisieren Sie die
gcloud
-Umgebung mit Ihrer Projekt-ID:gcloud config set project "${PROJECT_ID}"
Erstellen Sie drei Cloud Storage-Buckets mit eindeutigen Namen:
gsutil mb -l "${LOCATION}" "gs://unscanned-${PROJECT_ID}" gsutil mb -l "${LOCATION}" "gs://quarantined-${PROJECT_ID}" gsutil mb -l "${LOCATION}" "gs://clean-${PROJECT_ID}"
${PROJECT_ID}
wird verwendet, um sicherzustellen, dass die Bucket-Namen eindeutig sind.Diese drei Buckets enthalten die hochgeladenen Dateien in verschiedenen Phasen der Dateiscan-Pipeline:
unscanned-PROJECT_ID
: Enthält Dateien, bevor sie gescannt werden. Die Nutzer laden ihre Dateien in diesen Bucket hoch.quarantined-PROJECT_ID
: Enthält Dateien, die vom Malwarescanner gescannt wurden und Malware enthalten.clean-PROJECT_ID
: Enthält Dateien, die vom Malwarescanner gescannt wurden und nicht infiziert sind.
Erstellen Sie einen vierten Cloud Storage-Bucket:
gsutil mb -l "${LOCATION}" "gs://cvd-mirror-${PROJECT_ID}"
${PROJECT_ID}
wird verwendet, um sicherzustellen, dass der Bucket-Name eindeutig ist.Mit diesem Bucket
cvd-mirror-PROJECT_ID
wird eine lokale Spiegelung der Malware-Definitionsdatenbank verwaltet, die verhindert, dass die Ratenbegrenzung vom ClamAV-CDN ausgelöst wird.
Dienstkonto für den Malwarescanner-Dienst erstellen und Berechtigungen gewähren
In diesem Abschnitt erstellen Sie ein Dienstkonto, das für den Malwarescanner-Dienst verwendet werden soll, und weisen dem Dienstkonto die entsprechenden Rollen zu, damit es Berechtigungen zum Lesen und Schreiben in den Cloud Storage-Buckets hat. Dadurch wird sichergestellt, dass das Konto nur minimale Berechtigungen und nur Zugriff auf die benötigten Ressourcen hat.
Erstellen Sie das Dienstkonto
malware-scanner
:gcloud iam service-accounts create ${SERVICE_NAME}
Weisen Sie den Buckets die Rolle „Objektadministrator“ zu, damit der Dienst Dateien aus dem ungescannten Bucket lesen und löschen sowie Dateien in die unter Quarantäne gestellten und sauberen Buckets schreiben kann.
gsutil iam ch \ "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \ "gs://unscanned-${PROJECT_ID}" gsutil iam ch \ "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \ "gs://clean-${PROJECT_ID}" gsutil iam ch \ "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \ "gs://quarantined-${PROJECT_ID}" gsutil iam ch \ "serviceAccount:${SERVICE_ACCOUNT}:objectAdmin" \ "gs://cvd-mirror-${PROJECT_ID}"
Weisen Sie die Rolle des Messwertautors zu, mit der der Dienst Messwerte in Monitoring schreiben kann:
gcloud projects add-iam-policy-binding \ "${PROJECT_ID}" \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role=roles/monitoring.metricWriter
Malwarescanner-Dienst in Cloud Run erstellen
In diesem Abschnitt stellen Sie den Malwarescanner-Dienst in Cloud Run bereit. Der Dienst wird in einem Docker-Container ausgeführt und enthält Folgendes:
- Ein
Dockerfile
zum Erstellen eines Container-Images mit dem Dienst, der Node.js-Laufzeit, dem GCloud SDK und ClamAV-Binärdateien. - Die Node.js-Dateien für den Malwarescanner Cloud Run-Dienst.
config.json
-Konfigurationsdatei, um Ihre Cloud Storage-Bucket-Namen anzugeben.updateCvdMirror.sh
-Shell-Skript zum Aktualisieren des ClamAV-Malware-Definition-Datenbankspiegels in Cloud Storage.cloud-run-proxy
-Dienst zum Weiterleiten vonfreshclam
-HTTP-Anfragen, die authentifizierten Zugriff auf Cloud Storage APIs bieten.bootstrap.sh
-Shell-Skript zum Ausführen der erforderlichen Dienste beim Instanzstart.
Klonen Sie in Cloud Shell das GitHub-Repository, das die Codedateien enthält:
git clone https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner.git
Wechseln Sie in das Verzeichnis
cloudrun-malware-scanner
:cd docker-clamav-malware-scanner/cloudrun-malware-scanner
Bearbeiten Sie die Konfigurationsdatei
config.json
, um die soeben erstellten Cloud Storage-Buckets anzugeben. Da sie auf der Projekt-ID basieren, kann ein einfacher Suchen und Ersetzen verwendet werden:sed "s/-bucket-name/-${PROJECT_ID}/" config.json.tmpl > config.json
Sie können die aktualisierte Konfigurationsdatei ansehen:
cat config.json
Führen Sie eine anfängliche Population des ClamAV Malware-Datenbankspiegels in Cloud Storage durch:
python3 -m venv pyenv . pyenv/bin/activate pip3 install crcmod cvdupdate ./updateCvdMirror.sh "cvd-mirror-${PROJECT_ID}" deactivate
Dadurch wird das
CVDUpdate
-Tool lokal installiert, damit die Malware-Datenbank heruntergeladen und anschließend in den zuvor erstellten Cloud Storage-cvd-Mirror-Bucket hochgeladen.Sie können den Inhalt des Spiegels prüfen:
gsutil ls "gs://cvd-mirror-${PROJECT_ID}/cvds"
Der Bucket sollte mehrere CVD-Dateien mit der vollständigen Malware-Datenbank, mehrere
.cdiff
-Dateien mit den täglichen differenziellen Aktualisierungen und zwei.json
-Dateien mit Konfigurations- und Statusinformationen enthalten.Erstellen und stellen Sie den Cloud Run-Dienst mit dem zuvor erstellten Dienstkonto bereit:
gcloud beta run deploy "${SERVICE_NAME}" \ --source . \ --region "${REGION}" \ --no-allow-unauthenticated \ --memory 4Gi \ --cpu 1 \ --concurrency 20 \ --min-instances 1 \ --max-instances 5 \ --no-cpu-throttling \ --cpu-boost \ --service-account="${SERVICE_ACCOUNT}"
Dadurch wird eine Cloud Run-Instanz mit einer vCPU erstellt und 4 GiB RAM verwendet. Dies ist eine akzeptable Größe für diese Anleitung. In einer Produktionsumgebung sollten Sie jedoch eine größere CPU- und Speichergröße für die Instanz und einen größeren
--max-instances
-Parameter auswählen, je nachdem, wie viel Traffic der Dienst verarbeiten muss.Der Parameter
--concurrency
gibt die Anzahl der gleichzeitigen Anfragen an, die jede Instanz verarbeiten kann.Der Parameter
--no-cpu-throttling
ermöglicht der Instanz, Vorgänge im Hintergrund auszuführen, z. B. das Aktualisieren von Malware-Definitionen.Der Parameter
--cpu-boost
verdoppelt die Anzahl der vCPUs beim Start der Instanz, um die Startlatenz zu reduzieren.Der Parameter
--min-instances 1
sorgt dafür, dass mindestens eine Instanz aktiv ist, da die Startzeit jeder Instanz relativ hoch ist.Der Parameter
--max-instances 5
verhindert, dass der Dienst zu hoch skaliert wird.Geben Sie bei Aufforderung
Y
ein.
Der Build und die Bereitstellung dauern etwa zehn Minuten. Nach Abschluss des Vorgangs wird eine Meldung angezeigt:
Service [malware-scanner] revision [malware-scanner-NNNNN-XXX] has been deployed and is serving 100 percent of traffic. Service URL: https://malware-scanner-XXXXXXXX-XX.a.run.app
Speichern Sie den Wert Service URL
aus der Ausgabe des Bereitstellungsbefehls in einer Shell-Variable. Sie wird später beim Erstellen eines Cloud Scheduler-Jobs verwendet:
SERVICE_URL="SERVICE_URL"
Der Cloud Run-Dienst erfordert, dass alle Aufrufe authentifiziert werden und die authentifizierenden Identitäten die Berechtigung run.routes.invoke
für den Dienst haben.
Mit dem folgenden Befehl können Sie den ausgeführten Dienst und die ClamAV-Version prüfen:
curl -D - -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ ${SERVICE_URL}
Cloud Storage-Trigger für Eventarc erstellen
In diesem Abschnitt fügen Sie Berechtigungen hinzu, damit Eventarc Cloud Storage-Ereignisse erfassen und einen Trigger zum Senden dieser Ereignisse an den Cloud Run-Dienst malware-scanner
ausführen kann.
Wenn Sie ein vorhandenes Projekt verwenden, das vor dem 8. April 2021 erstellt wurde, konfigurieren Sie Pub/Sub für Push-Benachrichtigungen.
Weisen Sie in Cloud Shell dem Cloud Storage-Dienstkonto die Rolle
roles/pubsub.publisher
zu:STORAGE_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p "${PROJECT_ID}") gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:${STORAGE_SERVICE_ACCOUNT}" \ --role "roles/pubsub.publisher"
Erlauben Sie dem Dienstkonto
malware-scanner
, den Cloud Run-Dienst aufzurufen, und fungieren Sie als Eventarc-Ereignisempfänger:gcloud run services add-iam-policy-binding "${SERVICE_NAME}" \ --region="${REGION}" \ --member "serviceAccount:${SERVICE_ACCOUNT}" \ --role roles/run.invoker gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:${SERVICE_ACCOUNT}" \ --role "roles/eventarc.eventReceiver"
Erstellen Sie einen Eventarc-Trigger, um das endgültige Objektereignis im nicht gescannten Cloud Storage-Bucket zu erfassen und an Ihren Cloud Run-Dienst zu senden. Der Trigger verwendet das Dienstkonto
malware-scanner
zur Authentifizierung:BUCKET_NAME="unscanned-${PROJECT_ID}" gcloud eventarc triggers create "trigger-${BUCKET_NAME}-${SERVICE_NAME}" \ --destination-run-service="${SERVICE_NAME}" \ --destination-run-region="${REGION}" \ --location="${LOCATION}" \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=${BUCKET_NAME}" \ --service-account="${SERVICE_ACCOUNT}"
Wenn einer der folgenden beiden Fehler angezeigt wird, warten Sie eine Minute und führen Sie den Befehl noch einmal aus:
ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was invalid: Bucket "unscanned-PROJECT_ID" was not found. Please verify that the bucket exists.
ERROR: (gcloud.eventarc.triggers.create) FAILED_PRECONDITION: Invalid resource state for "": Permission denied while using the Eventarc Service Agent. If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent. Otherwise, verify that it has Eventarc Service Agent role.
Ändern Sie die Nachrichtenbestätigungsfrist im zugrunde liegenden Pub/Sub-Abo, das vom Eventarc-Trigger verwendet wird, auf zwei Minuten:
SUBSCRIPTION_NAME=$(gcloud eventarc triggers describe \ "trigger-${BUCKET_NAME}-${SERVICE_NAME}" \ --location="${LOCATION}" \ --format="get(transport.pubsub.subscription)") gcloud pubsub subscriptions update "${SUBSCRIPTION_NAME}" --ack-deadline=120
Der Standardwert von zehn Sekunden ist zu groß für große Dateien oder hohe Lasten.
Cloud Scheduler-Job erstellen, um Aktualisierungen der ClamAV-Datenbankspiegelung auszulösen
Erstellen Sie einen Cloud Scheduler-Job, der eine HTTP POST-Anfrage an den Cloud Run-Dienst ausführt, mit einem Befehl, um die Spiegelung der Malware-Definitionsdatenbank zu aktualisieren. Damit nicht zu viele Clients denselben Slot verwenden, müssen Sie für ClamAV den Job nach einem Zufallsprinzip zwischen 3 und 57 planen und ein Vielfaches von 10 vermeiden.
while : ; do
# set MINUTE to a random number between 3 and 57
MINUTE="$((RANDOM%55 + 3))"
# exit loop if MINUTE is not a multiple of 10
[[ $((MINUTE % 10)) != 0 ]] && break
done
gcloud scheduler jobs create http \
"${SERVICE_NAME}-mirror-update" \
--location="${REGION}" \
--schedule="${MINUTE} */2 * * *" \
--oidc-service-account-email="${SERVICE_ACCOUNT}" \
--uri="${SERVICE_URL}" \
--http-method=post \
--message-body='{"kind":"schedule#cvd_update"}' \
--headers="Content-Type=application/json"
Das Befehlszeilenargument --schedule
definiert, wann der Job mit dem Stringformat unix-cron ausgeführt wird.
Der angegebene Wert gibt an, dass er alle zwei Stunden zur jeweiligen zufällig generierten Minute ausgeführt werden soll.
Mit diesem Job wird nur der ClamAV-Spiegel in Cloud Storage aktualisiert. Der ClamAV-Refresh-Daemon in jeder Instanz von Cloud Run prüft den Spiegel alle 30 Minuten auf neue Definitionen und aktualisiert den ClamAV-Daemon.
Pipeline durch Hochladen von Dateien testen
Sie laden eine saubere Datei (ohne Malware) und eine infizierte Datei hoch, um die Pipeline zu testen.
Erstellen Sie eine Beispieltextdatei oder verwenden Sie eine vorhandene saubere Datei, um die Pipeline-Prozesse zu testen.
Kopieren Sie die Datei mit den Beispieldaten in den ungescannten Bucket:
gsutil cp filename "gs://unscanned-${PROJECT_ID}"
Ersetzen Sie
filename
durch den Namen der sauberen Textdatei. Der Malwarescanner-Dienst prüft jedes Dokument und verschiebt es in einen entsprechenden Bucket. Diese Datei wird in den sauberen Bucket verschoben.Warten Sie ein paar Sekunden, bis die Pipeline die Datei verarbeitet hat. Prüfen Sie dann den bereinigten Bucket, um festzustellen, ob sich dort die verarbeitete Datei befindet:
gsutil ls -r "gs://clean-${PROJECT_ID}"
Die Datei wurde aus dem ungescannten Bucket entfernt:
gsutil ls -r "gs://unscanned-${PROJECT_ID}"
Laden Sie in Cloud Shell eine Datei mit dem Namen
eicar-infected.txt
, die die EICAR-Standard-Anti-Malware-Testsignatur enthält, in den -Bucket hoch:echo -e 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' \ | gsutil cp - "gs://unscanned-${PROJECT_ID}/eicar-infected.txt"
Warten Sie einige Sekunden und prüfen Sie dann im Quarantäne-Bucket, ob die Datei die Pipeline erfolgreich durchlaufen hat. Der Dienst protokolliert auch einen Logging-Logeintrag, wenn eine mit Malware infizierte Datei erkannt wird.
gsutil ls -r "gs://quarantined-${PROJECT_ID}"
Die Datei wurde aus dem ungescannten Bucket entfernt:
gsutil ls -r "gs://unscanned-${PROJECT_ID}"
Mechanismus zur Datenbankaktualisierung mit Malware-Definitionen testen
In Cloud Shell können Sie die Prüfung auf Aktualisierungen auslösen, indem Sie die Ausführung des Cloud Scheduler-Jobs erzwingen:
gcloud scheduler jobs run "${SERVICE_NAME}-mirror-update" --location="${REGION}"
Die Ergebnisse dieses Befehls werden nur in den detaillierten Logs angezeigt.
Dienst überwachen
Der Dienst kann mit Cloud Logging und Cloud Monitoring überwacht werden.
Detaillierte Logs ansehen
Rufen Sie in der Google Cloud Console die Seite "Log-Explorer" von Cloud Logging auf.
Wenn der Filter Logfelder nicht angezeigt wird, klicken Sie auf die Schaltfläche Logfelder.
Klicken Sie im Filter Logfelder auf Cloud Run Revision.
Klicken Sie im Abschnitt Servicename des Filters Logfelder auf Malware-Scanner.
Die Ergebnisse der Logabfrage enthalten die Logs des Dienstes, darunter mehrere Zeilen mit den Scananfragen und dem Status der zwei hochgeladenen Dateien. Beispiel:
Scan request for gs://unscanned-PROJECT_ID/filename, (##### bytes) scanning with clam ClamAV CLAMAV_VERSION_STRING Scan status for gs://unscanned-PROJECT_ID/filename: CLEAN (##### bytes in #### ms) ... Scan request for gs://unscanned-PROJECT_ID/eicar-infected.txt, (69 bytes) scanning with clam ClamAV CLAMAV_VERSION_STRING Scan status for gs://unscanned-PROJECT_ID/eicar-infected.txt: INFECTED stream: Eicar-Signature FOUND (69 bytes in ### ms)
Wie Sie sehen, werden die ClamAV-Version und die Überarbeitung der Malware-Datenbanksignatur zusammen mit dem Malware-Namen für die infizierte Testdatei gemeldet.
Sie können diese Logmeldungen verwenden, um Warnungen für den Fall von Malware oder für Fehler beim Scannen einzurichten.
Die Malware-Definitionen für Spiegel-Updates werden ebenfalls angezeigt und sehen so aus:
Starting CVD Mirror update CVD Mirror update check complete. output: ...
Wenn der Spiegel aktualisiert wurde, wird eine zusätzliche Zeile angezeigt:
CVD Mirror updated: DATE_TIME - INFO: Downloaded daily.cvd. Version: VERSION_INFO
Freshclam-Aktualisierungslogs werden alle 30 Minuten angezeigt und so angezeigt:
DATE_TIME -> Received signal: wake up DATE_TIME -> ClamAV update process started at DATE_TIME DATE_TIME -> daily.cvd database is up-to-date (version: VERSION_INFO) DATE_TIME -> main.cvd database is up-to-date (version: VERSION_INFO) DATE_TIME -> bytecode.cvd database is up-to-date (version: VERSION_INFO)
Wenn die Datenbank aktualisiert wurde, werden stattdessen die Bereinigen-Logzeilen so angezeigt:
DATE_TIME -> daily.cld updated (version: VERSION_INFO)
Messwerte ansehen
Der Dienst generiert die folgenden Messwerte zu Monitoring- und Benachrichtigungszwecken:
- Anzahl der verarbeiteten Bereinigungsdateien:
custom.googleapis.com/opencensus/malware-scanning/clean_files
- Anzahl der verarbeiteten infizierten Dateien:
custom.googleapis.com/opencensus/malware-scanning/infected_files
- Zeit, die für das Scannen von Dateien aufgewendet wurde:
custom.googleapis.com/opencensus/malware-scanning/scan_duration
- Gesamtzahl gescannter Byte:
custom.googleapis.com/opencensus/malware-scanning/bytes_scanned
- Anzahl der fehlgeschlagenen Malware-Scans:
custom.googleapis.com/opencensus/malware-scanning/scans_failed
- Anzahl der CVD-Mirror-Update-Prüfungen:
custom.googleapis.com/opencensus/malware-scanning/cvd-mirror-updates
Sie können diese Messwerte im Metrics Explorer von Cloud Monitoring aufrufen.
Rufen Sie in der Google Cloud Console die Cloud Monitoring-Seite "Metrics Explorer" auf.
Klicken Sie auf das Feld Messwert auswählen und geben Sie den Filterstring
malware
ein.Wählen Sie den Messwert OpenCensus/Malware-Scanning/clean_files aus. Das Diagramm zeigt einen Datenpunkt, der angibt, wann die saubere Datei gescannt wurde.
Messwerte können verwendet werden, um die Pipeline zu überwachen und Warnungen zu erstellen, wenn Malware erkannt wird oder wenn Dateien nicht verarbeitet werden können.
Weitere Informationen können nach verschiedenen Messwertlabels aufgeschlüsselt werden:
- source_bucket
- destination_bucket
- clam_version
- cloud_run_revision
Mehrere Buckets verarbeiten
Der Malwarescanner-Dienst kann Dateien aus mehreren Quell-Buckets scannen und sie an separate, unter Quarantäne gestellte Buckets senden.
Diese erweiterte Konfiguration wird in dieser Anleitung zwar nicht behandelt, aber in den folgenden Schritte zusammengefasst:
Erstellen Sie die verschiedenen nicht gescannten, bereinigten und unter Quarantäne gestellten Cloud Storage-Buckets mit eindeutigen Namen.
Weisen Sie dem Dienstkonto
malware-scanner
in den verschiedenen Buckets die entsprechenden Rollen zu.Bearbeiten Sie die Konfigurationsdatei
config.json
, um die Bucket-Namen für jede Konfiguration anzugeben:{ "buckets": [ { "unscanned": "unscanned-bucket-1-name", "clean": "clean-bucket-1-name", "quarantined": "quarantined-bucket-1-name" }, { "unscanned": "unscanned-bucket-2-name", "clean": "clean-bucket-2-name", "quarantined": "quarantined-bucket-2-name" } ] "ClamCvdMirrorBucket": "cvd-mirror-bucket-name" }
Für jeden nicht gescannten Bucket erstellen Sie einen Eventarc-Trigger, der für jeden Bucket einen eindeutigen Triggernamen bietet.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Nächste Schritte
- Dokumentation zu Cloud Storage ansehen
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center