Automatisierte Malware-Scans für Dateien bereitstellen, die in Cloud Storage hochgeladen wurden

Last reviewed 2023-06-20 UTC

In diesem Dokument wird beschrieben, wie Sie die Architektur unter Malware-Scans für Dateien automatisieren, die in Cloud Storage hochgeladen werden bereitstellen.

In diesem Bereitstellungsleitfaden wird davon ausgegangen, dass Sie mit den grundlegenden Funktionen der folgenden Technologien vertraut sind:

Architektur

Das folgende Diagramm zeigt die Bereitstellungsarchitektur, die Sie in diesem Dokument erstellen.

Architektur der Malwarescan-Pipeline

Das Diagramm zeigt die folgenden zwei Pipelines, die von dieser Architektur verwaltet werden:

  • Pipeline zum Scannen von Dateien, die prüft, ob eine hochgeladene Datei Malware enthält.
  • Aktualisierte Pipeline der gespiegelten Malware-Datenbank von ClamAV, die eine aktuelle Spiegelung der von ClamAV verwendeten Malware-Datenbank bereitstellt.

Weitere Informationen zur Architektur finden Sie unter Malware-Scans für Dateien automatisieren, die in Cloud Storage hochgeladen werden.

Lernziele

  • Spiegelung der ClamAV-Malware-Definitionsdatenbank in einem Cloud Storage-Bucket erstellen.

  • Cloud Run-Dienst mit den folgenden Funktionen erstellen:

    • Dateien in einem Cloud Storage-Bucket auf Malware mithilfe von ClamAV scannen und gescannte Dateien in saubere Buckets oder Quarantäne-Buckets auf Basis des Scanergebnisses verschieben.
    • Gespiegelte 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 die Spiegelung der Malware-Definitionsdatenbank in Cloud Storage zu aktualisieren.

Kosten

In dieser Architektur werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Hinweis

  1. 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.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build APIs aktivieren.

    Aktivieren Sie die APIs

  5. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  7. Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build APIs aktivieren.

    Aktivieren Sie die APIs

  8. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    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.

  9. In dieser Bereitstellung 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 Bereitstellung verwendet werden, z. B. Regionen und Zonen. In dieser Bereitstellung 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.

  1. 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"
    

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

  2. Initialisieren Sie die gcloud-Umgebung mit Ihrer Projekt-ID:

    gcloud config set project "${PROJECT_ID}"
    
  3. 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 Pipeline zum Scannen von Dateien:

    • 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.

  4. Erstellen Sie einen vierten Cloud Storage-Bucket:

    gsutil mb -l "${LOCATION}" "gs://cvd-mirror-${PROJECT_ID}"
    

    ${PROJECT_ID} wird verwendet, damit der Bucket-Name eindeutig ist.

    Dieser Bucket cvd-mirror-PROJECT_ID wird verwendet, um eine lokale Spiegelung der Malware-Definitionsdatenbank zu verwalten. Dadurch wird verhindert, dass die Ratenbegrenzung vom ClamAV-CDN ausgelöst wird.

Dienstkonto für den Malwarescanner-Dienst einrichten

In diesem Abschnitt erstellen Sie ein Dienstkonto, das für den Malwarescanner-Dienst verwendet werden soll. Anschließend weisen Sie dem Dienstkonto die entsprechenden Rollen zu, damit es Berechtigungen zum Lesen und Schreiben in den Cloud Storage-Buckets hat. Die Rollen sorgen dafür, dass das Konto nur minimale Berechtigungen und nur Zugriff auf die benötigten Ressourcen hat.

  1. Erstellen Sie das Dienstkonto malware-scanner:

    gcloud iam service-accounts create ${SERVICE_NAME}
    
  2. Weisen Sie den Buckets die Rolle „Objektadministrator“ zu. Die Rolle erlaubt dem Dienst Dateien aus dem ungescannten Bucket zu lesen und zu löschen sowie Dateien in die unter Quarantäne gestellten und sauberen Buckets zu schreiben.

    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}"
    
  3. Weisen Sie die Rolle „Messwert-Autor“ 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, der Folgendes enthält:

  • Eine Dockerfile zum Erstellen eines Container-Images mit dem Dienst, der Node.js-Laufzeit, dem Google Cloud SDK und ClamAV-Binärdateien.
  • Die Node.js-Dateien für den Cloud Run-Dienst für Malwarescanner.
  • Eine config.json-Konfigurationsdatei zur Angabe Ihrer Cloud Storage-Bucket-Namen.
  • Ein updateCvdMirror.sh-Shell-Skript zum Aktualisieren der ClamAV-Malware-Definitionsdatenbank in Cloud Storage.
  • Ein cloud-run-proxy-Dienst als Proxy für freshclam-HTTP-Anfragen, die authentifizierten Zugriff auf Cloud Storage APIs bieten.
  • Ein bootstrap.sh-Shell-Skript zum Ausführen der erforderlichen Dienste beim Starten der Instanz.

So stellen Sie den Dienst bereit:

  1. Klonen Sie in Cloud Shell das GitHub-Repository, das die Codedateien enthält:

    git clone https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner.git
    
  2. Wechseln Sie in das Verzeichnis cloudrun-malware-scanner:

    cd docker-clamav-malware-scanner/cloudrun-malware-scanner
    
  3. Bearbeiten Sie die Konfigurationsdatei config.json, um die von Ihnen erstellten Cloud Storage-Buckets anzugeben. Da die Bucket-Namen auf der Projekt-ID basieren, können Sie einen Such- und Ersetzungsvorgang verwenden:

    sed "s/-bucket-name/-${PROJECT_ID}/" config.json.tmpl > config.json
    

    Sie können die aktualisierte Konfigurationsdatei aufrufen:

    cat config.json
    
  4. Führen Sie eine erste Population der gespiegelten ClamAV-Malware-Datenbank in Cloud Storage durch:

    python3 -m venv pyenv
    . pyenv/bin/activate
    pip3 install crcmod cvdupdate
    ./updateCvdMirror.sh "cvd-mirror-${PROJECT_ID}"
    deactivate
    

    Der Befehl führt eine lokale Installation des CVDUpdate-Tools aus und verwendet es zum Herunterladen der Malware-Datenbank. Der Befehl lädt dann die Datenbank in den zuvor erstellten Bucket cvd-mirror-PROJECT_ID hoch.

    Sie können den Inhalt des gespiegelten Buckets 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 differenziellen Aktualisierungen des Tages und zwei .json-Dateien mit Konfigurations- und Statusinformationen enthalten.

  5. Erstellen und stellen Sie den Cloud Run-Dienst mit dem Dienstkonto bereit, das Sie zuvor erstellt haben:

    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}"
    

    Der Befehl erstellt eine Cloud Run-Instanz mit 1 vCPU und 4 GiB RAM. Diese Größe ist für diese Bereitstellung akzeptabel. 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. Welche Ressourcen Sie möglicherweise benötigen, hängt davon ab, wie viel Traffic der Dienst verarbeiten muss.

    Der Befehl enthält die folgenden Spezifikationen:

    • Der Parameter --concurrency gibt die Anzahl der gleichzeitigen Anfragen an, die jede Instanz verarbeiten kann.
    • Mit dem Parameter --no-cpu-throttling kann die Instanz Vorgänge im Hintergrund ausführen, z. B. Malware-Definitionen aktualisieren.
    • Der Parameter --cpu-boost verdoppelt die Anzahl der vCPUs beim Start der Instanz, um die Startlatenz zu reduzieren.
    • Der Parameter --min-instances 1 behält mindestens eine aktive Instanz bei, da die Startzeit für jede Instanz relativ hoch ist.
    • Der Parameter --max-instances 5 verhindert, dass der Dienst zu hoch skaliert wird.
  6. Geben Sie bei Aufforderung Y ein, um den Dienst zu erstellen und bereitzustellen. Build und Bereitstellung dauern etwa zehn Minuten. Nach Abschluss wird die folgende Meldung angezeigt:

    Service [malware-scanner] revision [malware-scanner-UNIQUE_ID] has been deployed and is serving 100 percent of traffic.
    Service URL: https://malware-scanner-UNIQUE_ID.a.run.app
    
  7. Speichern Sie den Wert Service URL aus der Ausgabe des Bereitstellungsbefehls in einer Shell-Variablen. Sie verwenden den Wert später, wenn Sie einen Cloud Scheduler-Job erstellen.

    SERVICE_URL="SERVICE_URL"
    

Führen Sie den folgenden Befehl aus, um den ausgeführten Dienst und die ClamAV-Version zu prüfen:

curl -D - -H "Authorization: Bearer $(gcloud auth print-identity-token)"  \
     ${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. Die Berechtigung fügen Sie im nächsten Abschnitt hinzu.

Cloud Storage-Trigger für Eventarc erstellen

In diesem Abschnitt fügen Sie Berechtigungen hinzu, damit Eventarc Cloud Storage-Ereignisse erfassen kann und erstellen einen Trigger, um diese Ereignisse an den Cloud Run-Dienst malware-scanner zu senden.

  1. Wenn Sie ein vorhandenes Projekt verwenden, das vor dem 8. April 2021 erstellt wurde, fügen Sie dem Pub/Sub-Dienstkonto die Rolle iam.serviceAccountTokenCreator hinzu:

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
    PUBSUB_SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${PUBSUB_SERVICE_ACCOUNT}"\
        --role='roles/iam.serviceAccountTokenCreator'
    

    Diese Rolle ist nur für ältere Projekte erforderlich und erlaubt Pub/Sub, den Cloud Run-Dienst aufzurufen.

  2. Weisen Sie in Cloud Shell dem Cloud Storage-Dienstkonto die Rolle „Pub/Sub-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"
    
  3. Erlauben Sie dem Dienstkonto malware-scanner den Cloud Run-Dienst aufzurufen und als Eventarc-Ereignisempfänger zu fungieren:

    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"
    
  4. 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 Sie einen der folgenden Fehler erhalten, 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.
    
  5. Ändern Sie die Frist für die Nachrichtenbestätigung in dem zugrunde liegenden Pub/Sub-Abo, das vom Eventarc-Trigger verwendet wird, auf zwei Minuten. Der Standardwert von zehn Sekunden ist zu kurz für große Dateien oder hohe Lasten.

    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 Trigger wird zwar sofort erstellt, es kann jedoch bis zu zehn Minuten dauern, bis er wirksam wird und Ereignisse filtert.

Cloud Scheduler-Job erstellen, um Updates der gespiegelten ClamAV-Datenbank auszulösen

  • Erstellen Sie einen Cloud Scheduler-Job, der eine HTTP-POST-Anfrage im Cloud Run-Dienst mit einem Befehl ausführt, um die gespiegelte Malware-Definitionsdatenbank zu aktualisieren. Damit nicht zu viele Clients denselben Zeitraum verwenden, muss ClamAV den Job in einer zufälligen Minute zwischen 3 und 57 planen, wobei Vielfache von 10 vermieden werden sollten.

    while : ; do
      # set MINUTE to a random number between 3 and 57
      MINUTE="$((RANDOM%55 + 3))"
      # exit loop if MINUTE isn't 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 --schedule-Befehlszeilenargument definiert, wann der Job im Unix-Cron-Stringformat ausgeführt wird. Der angegebene Wert gibt an, dass der Job alle zwei Stunden zur genau zufällig generierten Minute ausgeführt werden soll.

Dieser Job aktualisiert nur das gespiegelte ClamAV in Cloud Storage. 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

Zum Testen der Pipeline laden Sie eine saubere Datei (ohne Malware) und eine Testdatei hoch, die eine infizierte Datei nachahmt:

  1. Erstellen Sie eine Beispieltextdatei oder verwenden Sie eine vorhandene saubere Datei, um die Pipeline-Prozesse zu testen.

  2. Kopieren Sie in Cloud Shell die Beispieldatendatei 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.

  3. Warten Sie ein paar Sekunden, bis die Pipeline die Datei verarbeitet hat. Prüfen Sie dann, ob sich die verarbeitete Datei im sauberen Bucket befindet:

    gsutil ls -r "gs://clean-${PROJECT_ID}"
    

    Sie können prüfen, ob die Datei aus dem ungescannten Bucket entfernt wurde:

    gsutil ls -r "gs://unscanned-${PROJECT_ID}"
    
  4. Laden Sie eine Datei mit dem Namen eicar-infected.txt, die die EICAR-Standard-Anti-Malware-Testsignatur enthält, in den nicht gescannten Bucket:

    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"
    

    Dieser Textstring hat eine Signatur, die Malwarescanner für Testzwecke auslöst. Diese Testdatei ist ein weit verbreiteter Test, bei dem es sich nicht um Malware handelt und die für Ihre Workstation harmlos ist. Wenn Sie versuchen, eine Datei mit diesem String auf einem Computer mit einem installierten Malwarescanner zu erstellen, können Sie eine Warnung auslösen.

  5. Warten Sie einige Sekunden und prüfen Sie dann im Quarantäne-Bucket, ob die Datei die Pipeline erfolgreich durchlaufen hat.

    gsutil ls -r "gs://quarantined-${PROJECT_ID}"
    

    Der Dienst protokolliert auch einen Logging-Logeintrag, wenn eine mit Malware infizierte Datei erkannt wird.

    Sie können prüfen, ob die Datei aus dem ungescannten Bucket entfernt wurde:

    gsutil ls -r "gs://unscanned-${PROJECT_ID}"
    

Aktualisierungsmechanismus für Datenbankdefinitionen für Malware-Definitionen testen

  • Lösen Sie in Cloud Shell die Prüfung auf Aktualisierungen aus. Erzwingen Sie dazu die Ausführung des Cloud Scheduler-Jobs:

    gcloud scheduler jobs run "${SERVICE_NAME}-mirror-update" --location="${REGION}"
    

    Die Ergebnisse dieses Befehls werden nur in den detaillierten Logs angezeigt.

Dienst überwachen

Sie können den Dienst mit Cloud Logging und Cloud Monitoring überwachen.

Detaillierte Logs ansehen

  1. Rufen Sie in der Google Cloud Console die Seite "Log-Explorer" von Cloud Logging auf.

    Zum Log-Explorer

  2. Wenn der Filter Logfelder nicht angezeigt wird, klicken Sie auf Logfelder.

  3. Klicken Sie im Filter Logfelder auf Cloud Run Revision.

  4. 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:

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)

Die Ausgabe zeigt die ClamAV-Version und die Überarbeitung der Malware-Datenbanksignatur sowie den Malware-Namen für die infizierte Testdatei. Sie können diese Logmeldungen verwenden, um Warnungen für den Fall von Malware oder für Fehler beim Scannen einzurichten.

Die Ausgabe zeigt auch die Aktualisierungslogs für Malware-Definitionen:

Starting CVD Mirror update
CVD Mirror update check complete. output: ...

Wenn der Spiegel aktualisiert wurde, enthält die Ausgabe zusätzliche Zeilen:

CVD Mirror updated: DATE_TIME - INFO: Downloaded daily.cvd. Version: VERSION_INFO

Freshclam-Update-Logs werden alle 30 Minuten 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, sehen die Logzeilen für Aktualität in etwa so aus:

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 Überprüfungen der CVD-Mirror-Aktualisierung:
    custom.googleapis.com/opencensus/malware-scanning/cvd-mirror-updates

Sie können diese Messwerte im Metrics Explorer von Cloud Monitoring ansehen:

  1. Rufen Sie in der Google Cloud Console die Cloud Monitoring-Seite "Metrics Explorer" auf.

    Zum Metrics Explorer

  2. Klicken Sie auf das Feld Messwert auswählen und geben Sie den Filterstring malware ein.

  3. Wählen Sie den Messwert OpenCensus/Malware-Scanning/clean_files aus. Das Diagramm zeigt einen Datenpunkt, der angibt, wann die saubere Datei gescannt wurde.

Sie können Messwerte verwenden, um die Pipeline zu überwachen und Warnungen zu erstellen, wenn Malware erkannt wird oder Dateien nicht verarbeitet werden können.

Die generierten Messwerte haben die folgenden Labels, die Sie für die Filterung und Aggregation verwenden können, um detaillierte Informationen mit Metrics Explorer anzuzeigen:

  • source_bucket
  • destination_bucket
  • clam_version
  • cloud_run_revision

Mehrere Buckets verarbeiten

Der Malwarescanner-Dienst kann Dateien aus mehreren Quell-Buckets scannen und die Dateien an separate, unter Quarantäne gestellte Buckets senden. Obwohl diese erweiterte Konfiguration nicht im Rahmen dieser Bereitstellung ist, finden Sie hier eine Zusammenfassung der erforderlichen Schritte:

  1. Erstellen Sie nicht gescannte, bereinigte und unter Quarantäne gestellte Cloud Storage-Buckets mit eindeutigen Namen.

  2. Weisen Sie dem Dienstkonto malware-scanner in jedem Bucket die entsprechenden Rollen zu.

  3. 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"
    }
    
  4. Für jeden nicht gescannten Bucket erstellen Sie einen Eventarc-Trigger. Erstellen Sie für jeden Bucket einen eindeutigen Triggernamen.

    Der Cloud Storage-Bucket muss sich im selben Projekt und in derselben Region wie der Eventarc-Trigger befinden.

Bereinigen

Im folgenden Abschnitt wird erläutert, wie Sie zukünftige Gebühren für das Google Cloud-Projekt vermeiden können, das Sie in dieser Bereitstellung verwendet haben.

Google Cloud-Projekt löschen

Damit Ihrem Google Cloud-Konto die in dieser Bereitstellung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie das Google Cloud-Projekt löschen.

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte