Automatizza la scansione antimalware per i file caricati in Cloud Storage

Last reviewed 2023-04-19 UTC

Questo tutorial mostra come creare una pipeline basata su eventi che possa aiutarti ad automatizzare la valutazione dei file per individuare codice dannoso.

La valutazione manuale del grande numero di file caricati in Cloud Storage richiede troppo tempo per la maggior parte delle app.

Questa pipeline è creata utilizzando i prodotti Google Cloud insieme a un motore antivirus open source chiamato ClamAV. Per questo tutorial, ClamAV viene eseguito in un container Docker ospitato in Cloud Run. La pipeline scrive anche le voci di log in Cloud Logging e registra le metriche in Cloud Monitoring.

Puoi attivare gli avvisi basati su log per i file infetti utilizzando queste voci di log di Logging, ma la configurazione di questi avvisi non rientra nell'ambito di questo tutorial.

Il termine malware viene utilizzato in questo tutorial come termine generico per descrivere trojan, virus e altro codice dannoso.

Questo tutorial presuppone che tu conosca le funzionalità di base di Cloud Storage, Cloud Run, Cloud Scheduler, Eventarc, Docker e Node.js.

Architettura

Il seguente diagramma offre una panoramica dell'architettura.

Architettura della pipeline di scansione per malware.

Due pipeline gestite da questa architettura sono:

  • Pipeline di scansione dei file che controlla se un file caricato contiene malware.
  • La pipeline di aggiornamento del mirroring del malware ClamAV, che mantiene uno specchio aggiornato del database di malware utilizzato da ClamAV.

Pipeline di scansione dei file

La pipeline di scansione dei file opera come segue:

  1. Gli utenti finali caricano i propri file nel bucket Cloud Storage non scansionato.
  2. Il servizio Eventarc rileva questo evento di caricamento e comunica al servizio Cloud Run questo nuovo file.
  3. Il servizio Cloud Run scarica il nuovo file dal bucket Cloud Storage non analizzato e lo passa allo scanner di malware ClamAV.
  4. A seconda del risultato della scansione del malware, il servizio esegue una delle seguenti azioni:
    • Se ClamAV dichiara che il file è pulito, viene spostato dal bucket Cloud Storage non analizzato al bucket Cloud Storage pulito.
    • Se ClamAV dichiara che il file contiene malware, il file viene spostato dal bucket Cloud Storage non analizzato al bucket Cloud Storage in quarantena.
  5. Il servizio segnala il risultato di queste azioni a Logging e Monitoring per consentire agli amministratori di intraprendere azioni.

Pipeline di aggiornamento mirror del database ClamAV Malware

Per poter eseguire la scansione in modo efficace, lo scanner di malware ClamAV deve mantenere un database aggiornato delle firme di malware.

Il servizio ClamAV viene eseguito utilizzando Cloud Run, un servizio stateless. All'avvio di un'istanza del servizio, ClamAV deve sempre scaricare il database di malware completo più recente, le cui dimensioni sono diverse centinaia di megabyte.

Il database di malware pubblico per ClamAV è ospitato su una rete di distribuzione dei contenuti (CDN), la cui frequenza limita questi download. Se più istanze si avviano e tentano di scaricare il database completo, può essere attivata una limitazione di frequenza. Questo causa il blocco dell'indirizzo IP esterno utilizzato da Cloud Run per 24 ore. In questo modo si impedisce l'avvio del servizio ClamAV e il download di aggiornamenti del database di malware.

Inoltre, Cloud Run utilizza un pool condiviso di indirizzi IP esterni. Di conseguenza, i download da istanze di scansione di malware di diversi progetti sono considerati dalla CDN come provenienti da un unico indirizzo e attivano anche il blocco.

Questa pipeline mantiene un mirror locale privato aggiornato del database in Cloud Storage. In questo modo, il database pubblico ClamAV sarà accessibile solo una volta per aggiornamento per scaricare i file di aggiornamento differenziali più piccoli, non l'intero database, evitando eventuali limitazioni di frequenza.

Questa pipeline funziona come segue:

  1. Un job Cloud Scheduler è configurato per l'attivazione ogni due ore, che è lo stesso intervallo di controllo degli aggiornamenti predefinito utilizzato dal servizio freshclam ClamAV. Questo job invia una richiesta POST HTTP al servizio Cloud Run che indica di aggiornare il mirror del database di malware.
  2. L'istanza Cloud Run copia il mirroring del database di malware dal bucket Cloud Storage al file system locale.
  3. L'istanza esegue quindi lo strumento ClamAV CVDUpdate, che scarica gli eventuali aggiornamenti differenziali disponibili e li applica al mirror del database.
  4. Quindi copia il mirror del database di malware aggiornato nel bucket Cloud Storage.

Il servizio ClamAV Freshm in esecuzione nell'istanza Cloud Run scaricherà il database di malware da Cloud Storage all'avvio, inoltre verificherà regolarmente e scaricherà gli aggiornamenti dei database disponibili dal bucket Cloud Storage durante il runtime.

Obiettivi

  • Crea un mirror del database delle definizioni di malware ClamAV in un bucket Cloud Storage.

  • Crea un servizio Cloud Run con le seguenti funzioni:

    • Scansione dei file in un bucket Cloud Storage per l'individuazione di malware utilizzando CMAV e spostare i file scansionati in bucket puliti o messi in quarantena in base al risultato della scansione.
    • Manutenzione di un mirror del database delle definizioni di malware ClamAV in Cloud Storage.
  • Crea un trigger Eventarc per attivare il servizio di scansione malware quando un file viene caricato in Cloud Storage.

  • Crea un job Cloud Scheduler per attivare il servizio di scansione malware per aggiornare il mirroring del database delle definizioni di malware in Cloud Storage.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build.

    Abilita le API

  5. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API Artifact Registry, Cloud Run, Eventarc, Logging, Cloud Scheduler, Pub/Sub, and Cloud Build.

    Abilita le API

  8. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  9. In questo tutorial, esegui tutti i comandi di Cloud Shell.

Configura l'ambiente

In questa sezione vengono assegnate impostazioni per i valori utilizzati in tutto il tutorial, ad esempio regione e zona. In questo tutorial utilizzerai us-central1 come regione per il servizio Cloud Run e us come località per il trigger Eventarc e i bucket Cloud Storage.

  1. In Cloud Shell, imposta le variabili shell comuni, tra cui regione e località:

    REGION=us-central1
    LOCATION=us
    PROJECT_ID=PROJECT_ID
    SERVICE_NAME="malware-scanner"
    SERVICE_ACCOUNT="${SERVICE_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
    

    Imposta PROJECT_ID sull'ID progetto.

  2. Inizializza l'ambiente gcloud con l'ID progetto:

    gcloud config set project "${PROJECT_ID}"
    
  3. Crea tre bucket Cloud Storage con nomi univoci:

    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} viene utilizzato per garantire che i nomi dei bucket siano univoci.

    Questi tre bucket contengono i file caricati in varie fasi durante la pipeline di scansione dei file:

    • unscanned-PROJECT_ID: archivia i file prima della scansione. Gli utenti caricano i propri file in questo bucket.

    • quarantined-PROJECT_ID: contiene i file che il servizio di scansione dei malware ha scansionato e considerato malware.

    • clean-PROJECT_ID: contiene i file che il servizio di scansione dei malware ha analizzato e che sono risultati non infetti.

  4. Crea un quarto bucket Cloud Storage:

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

    ${PROJECT_ID} viene utilizzato per garantire che il nome del bucket sia univoco.

    Questo bucket cvd-mirror-PROJECT_ID viene utilizzato per gestire un mirror locale del database delle definizioni di malware, che impedisce l'attivazione della limitazione di frequenza da parte della CDN di ClamAV.

Crea un account di servizio per il servizio di scansione malware e concedendo le autorizzazioni

In questa sezione creerai un account di servizio da utilizzare per il servizio di scansione dei malware e concederai i ruoli appropriati all'account di servizio in modo che abbia l'autorizzazione per leggere e scrivere nei bucket Cloud Storage. Questo serve a garantire che l'account disponga di autorizzazioni minime e che abbia solo accesso alle risorse necessarie.

  1. Crea l'account di servizio malware-scanner:

    gcloud iam service-accounts create ${SERVICE_NAME}
    
  2. Concedi il ruolo Amministratore oggetti ai bucket, consentendo al servizio di leggere ed eliminare i file dal bucket non analizzato e di scrivere file nei bucket messi in quarantena e puliti.

    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. Concedi il ruolo Writer metriche, che consente al servizio di scrivere metriche in Monitoring:

    gcloud projects add-iam-policy-binding \
          "${PROJECT_ID}" \
          --member="serviceAccount:${SERVICE_ACCOUNT}" \
          --role=roles/monitoring.metricWriter
    

Crea il servizio di scansione malware in Cloud Run

In questa sezione eseguirai il deployment del servizio di scansione dei malware in Cloud Run. Il servizio viene eseguito in un container Docker e contiene quanto segue:

  • Un elemento Dockerfile per creare un'immagine container con il servizio, il runtime Node.js, l'SDK GCloud e i programmi binari ClamAV.
  • I file Node.js per il servizio Cloud Run di scansione malware.
  • config.json per specificare i nomi dei bucket Cloud Storage.
  • updateCvdMirror.sh uno script shell per aggiornare il mirror del database di definizioni di malware ClamAV in Cloud Storage.
  • cloud-run-proxy per eseguire il proxy delle richieste HTTP freshclam, che forniscono l'accesso autenticato alle API Cloud Storage.
  • bootstrap.sh script shell per eseguire i servizi necessari all'avvio dell'istanza.
  1. In Cloud Shell, clona il repository GitHub contenente i file di codice:

    git clone https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner.git
    
  2. Passa alla directory cloudrun-malware-scanner:

    cd docker-clamav-malware-scanner/cloudrun-malware-scanner
    
  3. Modifica il file di configurazione config.json per specificare i bucket Cloud Storage appena creati. Poiché sono basati sull'ID progetto, è possibile utilizzare una semplice ricerca e sostituzione:

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

    Puoi visualizzare il file di configurazione aggiornato:

    cat config.json
    
  4. Esegui una compilazione iniziale del mirror del database di malware ClamAV in Cloud Storage:

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

    Questa operazione esegue un'installazione locale dello strumento CVDUpdate, la utilizza per scaricare il database di malware, quindi lo carica nel bucket cvd-mirror di Cloud Storage creato in precedenza.

    Puoi controllare i contenuti dello specchio:

    gsutil ls "gs://cvd-mirror-${PROJECT_ID}/cvds"
    

    Il bucket deve contenere diversi file CVD, contenenti il database completo dei malware, diversi file .cdiff contenenti gli aggiornamenti differenziali giornalieri e due file .json con informazioni sulla configurazione e sullo stato.

  5. Crea ed esegui il deployment del servizio Cloud Run utilizzando l'account di servizio creato in precedenza:

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

    Viene creata un'istanza Cloud Run con 1 vCPU e utilizza 4 GiB di RAM. Anche se questa è una dimensione accettabile per questo tutorial, in un ambiente di produzione potrebbe essere utile scegliere una CPU e una dimensione di memoria più grandi per l'istanza e un parametro --max-instances più grande a seconda della quantità di traffico che il servizio deve gestire.

    Il parametro --concurrency specifica il numero di richieste simultanee che possono essere elaborate da ogni istanza.

    Il parametro --no-cpu-throttling consente all'istanza di eseguire operazioni in background, ad esempio aggiornare le definizioni di malware.

    Il parametro --cpu-boost raddoppia il numero di vCPU all'avvio dell'istanza per ridurre la latenza di avvio.

    Il parametro --min-instances 1 mantiene almeno un'istanza attiva, poiché il tempo di avvio di ogni istanza è relativamente elevato.

    Il parametro --max-instances 5 impedisce lo scale up del servizio troppo alto.

  6. Quando richiesto, inserisci Y.

La creazione e il deployment richiedono circa dieci minuti. Al termine, verrà visualizzato un messaggio:

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

Archivia il valore Service URL dall'output del comando di deployment in una variabile shell. Verrà utilizzato in seguito durante la creazione di un job Cloud Scheduler:

SERVICE_URL="SERVICE_URL"

Il servizio Cloud Run richiede che tutte le chiamate siano autenticate e le identità di autenticazione devono avere l'autorizzazione run.routes.invoke sul servizio.

Per controllare il servizio in esecuzione e la versione di ClamAV, esegui questo comando:

curl -D - -H "Authorization: Bearer $(gcloud auth print-identity-token)"  \
     ${SERVICE_URL}

Crea un trigger Eventarc Cloud Storage

In questa sezione aggiungerai le autorizzazioni per consentire a Eventarc di acquisire gli eventi Cloud Storage e un trigger per inviare questi eventi al servizio malware-scanner Cloud Run.

  1. Se utilizzi un progetto esistente creato prima dell'8 aprile 2021, configura Pub/Sub per le notifiche push.

  2. In Cloud Shell, concedi il ruolo roles/pubsub.publisher all'account di servizio Cloud Storage:

    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. Consenti all'account di servizio malware-scanner di richiamare il servizio Cloud Run e di agire come destinatario di eventi Eventarc:

    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. Creare un trigger Eventarc per acquisire l'evento dell'oggetto finalizzato nel bucket Cloud Storage non analizzato e inviarlo al servizio Cloud Run. Il trigger utilizzerà l'account di servizio malware-scanner per l'autenticazione:

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

    Se ricevi uno dei due errori seguenti, attendi un minuto ed esegui nuovamente il comando:

    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. Modifica la scadenza di conferma dei messaggi a due minuti nella sottoscrizione Pub/Sub sottostante utilizzata dall'attivatore Eventarc:

    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
    

    Il valore predefinito, pari a dieci secondi, è troppo breve per file di grandi dimensioni o carichi elevati.

Crea un job Cloud Scheduler per attivare gli aggiornamenti mirror del database ClamAV

Creare un job Cloud Scheduler che esegue una richiesta POST HTTP sul servizio Cloud Run con un comando per aggiornare il mirroring del database delle definizioni di malware. Per evitare che troppi client utilizzino la stessa fascia oraria, ClamAV richiede di pianificare il job in un minuto casuale tra le 3 e le 57, evitando multipli di 10.

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"

L'argomento della riga di comando --schedule definisce quando il job viene eseguito utilizzando il formato stringa unix-cron. Il valore indicato indica che deve essere eseguito ogni minuto specifico generato in modo casuale ogni 2 ore.

Questo job aggiorna solo il mirror ClamAV in Cloud Storage. In ogni istanza di Cloud Run, il daemon clamAV Freshm controlla lo specchio ogni 30 minuti per verificare se sono presenti nuove definizioni e aggiorna il daemon ClamAV.

Testa la pipeline caricando i file

Carichi un file pulito (senza malware) e un file infetto per testare la pipeline.

  1. Crea un file di testo di esempio o utilizza un file pulito esistente per testare i processi della pipeline.

  2. Copia il file di dati di esempio nel bucket non analizzato:

    gsutil cp filename "gs://unscanned-${PROJECT_ID}"
    

    Sostituisci filename con il nome del file di testo pulito. Il servizio di scansione malware controlla ogni file e lo sposta in un bucket appropriato. Questo file è stato spostato nel bucket pulito.

  3. Attendi qualche secondo per la pipeline per elaborare il file, quindi controlla il tuo bucket pulito per vedere se il file elaborato è presente:

    gsutil ls -r "gs://clean-${PROJECT_ID}"
    
  4. Il file è stato rimosso dal bucket non analizzato:

    gsutil ls -r "gs://unscanned-${PROJECT_ID}"
    
  5. In Cloud Shell, carica un file denominato eicar-infected.txt contenente la firma di test anti-malware standard EICAR sul tuo bucket non analizzato:

    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"
    
  6. Attendi qualche secondo e poi controlla il bucket in quarantena per verificare che il file abbia superato correttamente la pipeline. Il servizio registra anche una voce di log di Logging quando viene rilevato un file infetto da malware.

    gsutil ls -r "gs://quarantined-${PROJECT_ID}"
    
  7. Il file è stato rimosso dal bucket non analizzato:

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

Testa il meccanismo di aggiornamento del database delle definizioni di malware

  • In Cloud Shell puoi attivare il controllo degli aggiornamenti forzando l'esecuzione del job Cloud Scheduler:

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

    I risultati di questo comando verranno visualizzati solo nei log dettagliati.

Monitora il servizio

Il servizio può essere monitorato utilizzando Cloud Logging e Cloud Monitoring.

Visualizza log dettagliati

  1. Nella console Google Cloud, vai alla pagina Esplora log di Cloud Logging.

    Vai a Esplora log

  2. Se il filtro Campi log non è visualizzato, fai clic sul pulsante Campi log.

  3. Nel filtro Campi log, fai clic su Revisione Cloud Run.

  4. Nella sezione Service Name (Nome servizio) del filtro Log Fields (Campi log), fai clic su malware-scanner.

I risultati della query sui log mostreranno i log del servizio, incluse diverse righe che mostrano le richieste di scansione e lo stato dei 2 file che hai caricato, ad esempio:

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)

Come puoi notare, sono riportati la versione di ClamAV e la revisione della firma del database di malware, insieme al nome del malware per il file di test infetto.

Puoi utilizzare questi messaggi di log per configurare avvisi in caso di rilevamento di malware o quando si sono verificati errori durante la scansione.

Vengono visualizzati anche i log di aggiornamento del mirroring delle definizioni di malware, che hanno l'aspetto seguente:

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

Se il mirroring è stato aggiornato, sarà presente una riga aggiuntiva:

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

I log degli aggiornamenti di Freshclam verranno visualizzati ogni 30 minuti e saranno visualizzati come:

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)

Se il database è stato aggiornato, le righe di log aggiornate verranno visualizzate come:

DATE_TIME -> daily.cld updated (version: VERSION_INFO)

Visualizza metriche

Il servizio genera le metriche seguenti per scopi di monitoraggio e avviso:

  • Numero di file puliti elaborati:
    custom.googleapis.com/opencensus/malware-scanning/clean_files
  • Numero di file infetti elaborati:
    custom.googleapis.com/opencensus/malware-scanning/infected_files
  • Tempo di scansione dei file:
    custom.googleapis.com/opencensus/malware-scanning/scan_duration
  • Numero totale di byte analizzati:
    custom.googleapis.com/opencensus/malware-scanning/bytes_scanned
  • Numero di scansioni di malware non riuscite:
    custom.googleapis.com/opencensus/malware-scanning/scans_failed
  • Numero di controlli di aggiornamento di CVD Mirror:
    custom.googleapis.com/opencensus/malware-scanning/cvd-mirror-updates

Queste metriche possono essere visualizzate in Explorer metriche di Cloud Monitoring.

  1. Nella console Google Cloud, vai alla pagina Metrics Explorer di Cloud Monitoring.

    Vai a Metrics Explorer

  2. Fai clic sul campo Seleziona una metrica e inserisci la stringa di filtro malware.

  3. Seleziona la metrica OpenCensus/malware-scanning/clean_files. Il grafico mostra un punto dati che indica quando è stato scansionato il file pulito.

Puoi utilizzare le metriche per monitorare la pipeline e creare avvisi per il rilevamento di malware o per l'elaborazione non riuscita di file.

Per ulteriori dettagli, le metriche possono essere suddivise in base a varie etichette:

  • bucket_origine
  • bucket_destinazione
  • versione_clam
  • revisione_cloud_run

Gestire più bucket

Il servizio di rilevamento di malware è in grado di analizzare i file da più bucket di origine, inviandoli a bucket separati puliti e messi in quarantena.

Sebbene questa configurazione avanzata non rientri nell'ambito di questo tutorial, i passaggi interessati sono riassunti come segue:

  1. Crea i vari bucket Cloud Storage non sottoposti a scansione, puliti e messi in quarantena con nomi univoci.

  2. Concedi i ruoli appropriati all'account di servizio malware-scanner nei vari bucket.

  3. Modifica il file di configurazione config.json per specificare i nomi dei bucket per ogni configurazione:

    {
      "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. Per ciascun bucket non analizzato, crea un trigger Eventarc, assicurandoti un nome trigger univoco per ciascun bucket.

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi