Dokumen ini menjelaskan cara Anda men-deploy arsitektur dalam Mengotomatiskan pemindaian malware untuk file yang diupload ke Cloud Storage.
Panduan deployment ini mengasumsikan bahwa Anda sudah memahami fungsi dasar teknologi berikut:
Arsitektur
Diagram berikut menunjukkan arsitektur deployment yang Anda buat di dokumen ini:
Diagram ini menunjukkan dua pipeline berikut yang dikelola oleh arsitektur ini:
- Pipeline pemindaian file, yang memeriksa apakah file yang diupload berisi malware.
- Pipeline update duplikat database malware ClamAV, yang mempertahankan duplikat terbaru database malware yang digunakan ClamAV.
Untuk informasi selengkapnya tentang arsitektur, lihat Mengotomatiskan pemindaian malware untuk file yang diupload ke Cloud Storage.
Tujuan
Membangun duplikat database definisi malware ClamAV di bucket Cloud Storage.
Bangun layanan Cloud Run dengan fungsi berikut:
- Memindai file di bucket Cloud Storage untuk mendeteksi malware menggunakan ClamAV dan memindahkan file yang dipindai ke bucket yang bersih atau dikarantina berdasarkan hasil pemindaian.
- Mempertahankan duplikat database definisi malware ClamAV di Cloud Storage.
Membuat pemicu Eventarc untuk memicu layanan pemindaian malware saat file diupload ke Cloud Storage.
Membuat tugas Cloud Scheduler untuk memicu layanan pemindaian malware guna memperbarui duplikat database definisi malware di Cloud Storage.
Biaya
Arsitektur ini menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan, gunakan kalkulator harga.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Resource Manager, Cloud Scheduler, Eventarc, Logging, Monitoring, Pub/Sub, Cloud Run, and Service Usage APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Resource Manager, Cloud Scheduler, Eventarc, Logging, Monitoring, Pub/Sub, Cloud Run, and Service Usage APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Dalam deployment ini, Anda menjalankan semua perintah dari Cloud Shell.
Men-deploy arsitektur
Anda dapat men-deploy arsitektur yang dijelaskan dalam dokumen ini menggunakan salah satu metode berikut:
Gunakan Cloud Shell: Gunakan metode ini jika Anda ingin melihat cara setiap komponen solusi di-deploy dan dikonfigurasi menggunakan alat command line
Google Cloud CLI
.Untuk menggunakan metode deployment ini, ikuti petunjuknya di Men-deploy menggunakan Cloud Shell.
Menggunakan Terraform CLI: Gunakan metode ini jika Anda ingin men-deploy solusi dengan seminimal mungkin langkah manual. Metode ini mengandalkan Terraform untuk men-deploy dan mengonfigurasi setiap komponen.
Untuk menggunakan metode deployment ini, ikuti instruksinya di Men-deploy menggunakan Terraform CLI.
Men-deploy menggunakan Cloud Shell
Untuk men-deploy arsitektur yang dijelaskan dalam dokumen ini secara manual, selesaikan langkah-langkah di subbagian berikut.
Menyiapkan lingkungan Anda
Di bagian ini, Anda akan menetapkan setelan untuk nilai yang digunakan
selama deployment, seperti
region dan zona.
Dalam deployment ini, Anda menggunakan us-central1
sebagai region untuk
layanan Cloud Run dan us
sebagai lokasi untuk
pemicu Eventarc dan bucket Cloud Storage.
Di Cloud Shell, tetapkan variabel shell umum termasuk region dan lokasi:
REGION=us-central1 LOCATION=us PROJECT_ID=PROJECT_ID SERVICE_NAME="malware-scanner" SERVICE_ACCOUNT="${SERVICE_NAME}@${PROJECT_ID}."
Ganti
PROJECT_ID
dengan project ID Anda.Lakukan inisialisasi lingkungan
gcloud
dengan ID project Anda:gcloud config set project "${PROJECT_ID}"
Buat tiga bucket Cloud Storage dengan nama unik:
gcloud storage buckets create "gs://unscanned-${PROJECT_ID}" --location="${LOCATION}" gcloud storage buckets create "gs://quarantined-${PROJECT_ID}" --location="${LOCATION}" gcloud storage buckets create "gs://clean-${PROJECT_ID}" --location="${LOCATION}"
${PROJECT_ID}
digunakan untuk memastikan bahwa nama bucket unik.Ketiga bucket ini menyimpan file yang diupload di berbagai tahap selama pipeline pemindaian file:
unscanned-PROJECT_ID
: Menyimpan file sebelum dipindai. Pengguna Anda mengupload file mereka ke bucket ini.quarantined-PROJECT_ID
: Menyimpan file yang telah dipindai dan dianggap berisi malware oleh layanan pemindai malware.clean-PROJECT_ID
: Menyimpan file yang telah dipindai oleh layanan pemindai malware dan ternyata tidak terinfeksi.
Buat bucket Cloud Storage keempat:
gcloud storage buckets create "gs://cvd-mirror-${PROJECT_ID}" --location="${LOCATION}"
${PROJECT_ID}
digunakan untuk memastikan bahwa nama bucket unik.Bucket ini
cvd-mirror-PROJECT_ID
digunakan untuk mempertahankan duplikat lokal database definisi malware, yang mencegah pembatasan kapasitas dipicu oleh CDN ClamAV.
Menyiapkan akun layanan untuk layanan pemindai malware
Di bagian ini, Anda akan membuat akun layanan yang akan digunakan untuk layanan pemindai malware. Anda kemudian memberikan peran yang sesuai untuk akun layanan sehingga akun tersebut memiliki izin untuk membaca dan menulis ke bucket Cloud Storage. Peran ini memastikan bahwa akun memiliki izin minimal dan hanya memiliki akses ke resource yang diperlukan.
Buat akun layanan
malware-scanner
:gcloud iam service-accounts create ${SERVICE_NAME}
Berikan peran Object Admin ke bucket. Peran ini memungkinkan layanan membaca dan menghapus file dari bucket yang tidak dipindai, serta menulis file ke bucket yang dikarantina dan bersih.
gcloud storage buckets add-iam-policy-binding "gs://unscanned-${PROJECT_ID}" \ --member="serviceAccount:${SERVICE_ACCOUNT}" --role=roles/storage.objectAdmin gcloud storage buckets add-iam-policy-binding "gs://clean-${PROJECT_ID}" \ --member="serviceAccount:${SERVICE_ACCOUNT}" --role=roles/storage.objectAdmin gcloud storage buckets add-iam-policy-binding "gs://quarantined-${PROJECT_ID}" \ --member="serviceAccount:${SERVICE_ACCOUNT}" --role=roles/storage.objectAdmin gcloud storage buckets add-iam-policy-binding "gs://cvd-mirror-${PROJECT_ID}" \ --member="serviceAccount:${SERVICE_ACCOUNT}" --role=roles/storage.objectAdmin
Berikan peran Metric Writer, yang memungkinkan layanan menulis metrik ke Monitoring:
gcloud projects add-iam-policy-binding \ "${PROJECT_ID}" \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role=roles/monitoring.metricWriter
Membuat layanan pemindai malware di Cloud Run
Di bagian ini, Anda akan men-deploy layanan pemindai malware ke Cloud Run. Layanan ini berjalan di container Docker yang berisi hal-hal berikut:
Dockerfile
untuk mem-build image container dengan layanan, runtime Node.js, Google Cloud SDK, dan biner ClamAV.- File TypeScript untuk layanan Cloud Run pemindai malware.
- File konfigurasi
config.json
untuk menentukan nama bucket Cloud Storage Anda. - Skrip shell
updateCvdMirror.sh
untuk memperbarui duplikat database definisi malware ClamAV di Cloud Storage. - Skrip shell
bootstrap.sh
untuk menjalankan layanan yang diperlukan saat instance dimulai.
Untuk men-deploy layanan, lakukan hal berikut:
Di Cloud Shell, buat clone repositori GitHub yang berisi file kode:
git clone https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner.git
Ubah ke direktori
cloudrun-malware-scanner
:cd docker-clamav-malware-scanner/cloudrun-malware-scanner
Buat file konfigurasi
config.json
berdasarkan file templateconfig.json.tmpl
di repositori GitHub:sed "s/-bucket-name/-${PROJECT_ID}/" config.json.tmpl > config.json
Perintah sebelumnya menggunakan operasi telusuri dan ganti untuk memberi bucket Cloud Storage nama unik yang didasarkan pada Project ID.
Opsional: Lihat file konfigurasi yang diperbarui:
cat config.json
Jalankan populasi awal duplikat database malware ClamAV di Cloud Storage:
python3 -m venv pyenv . pyenv/bin/activate pip3 install crcmod cvdupdate ./updateCvdMirror.sh "cvd-mirror-${PROJECT_ID}" deactivate
Perintah ini menjalankan penginstalan lokal alat
CVDUpdate
, lalu menjalankan skripupdateCvdMirror.sh
yang menggunakanCVDUpdate
untuk menyalin database malware ClamAV ke bucketcvd-mirror-PROJECT_ID
yang Anda buat sebelumnya.Anda dapat memeriksa isi bucket mirror:
gcloud storage ls "gs://cvd-mirror-${PROJECT_ID}/cvds"
Bucket harus berisi beberapa file CVD yang berisi database malware lengkap, beberapa file
.cdiff
yang berisi update diferensial harian, dan dua file JSON dengan informasi konfigurasi dan status.Buat dan deploy layanan Cloud Run menggunakan akun layanan yang Anda buat sebelumnya:
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 \ --timeout 300s \ --service-account="${SERVICE_ACCOUNT}"
Perintah ini membuat instance Cloud Run yang memiliki 1 vCPU dan menggunakan RAM sebesar 4 GiB. Ukuran ini dapat diterima untuk deployment ini. Namun, dalam lingkungan produksi, Anda mungkin ingin memilih ukuran CPU dan memori yang lebih besar untuk instance, dan parameter
--max-instances
yang lebih besar. Ukuran resource yang mungkin Anda perlukan bergantung pada jumlah traffic yang perlu ditangani oleh layanan.Perintah tersebut menyertakan spesifikasi berikut:
- Parameter
--concurrency
menentukan jumlah permintaan simultan yang dapat diproses oleh setiap instance. - Parameter
--no-cpu-throttling
memungkinkan instance melakukan operasi di latar belakang, seperti memperbarui definisi malware. - Parameter
--cpu-boost
menggandakan jumlah vCPU pada startup instans untuk mengurangi latensi startup. - Parameter
--min-instances 1
mempertahankan setidaknya satu instance yang aktif, karena waktu startup untuk setiap instance relatif tinggi. - Parameter
--max-instances 5
mencegah peningkatan skala layanan yang terlalu tinggi.
- Parameter
Saat diminta, masukkan
Y
untuk membangun dan men-deploy layanan. Build dan deployment memerlukan waktu sekitar 10 menit. Jika sudah selesai, pesan berikut akan ditampilkan: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
Simpan nilai
Service URL
dari output perintah deployment dalam variabel shell. Anda akan menggunakan nilai ini nanti saat membuat tugas Cloud Scheduler.SERVICE_URL="SERVICE_URL"
Opsional: Untuk memeriksa layanan yang sedang berjalan dan versi ClamAV, jalankan perintah berikut:
curl -D - -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ ${SERVICE_URL}
Outputnya akan terlihat seperti contoh berikut. Halaman ini menampilkan versi layanan pemindai malware, versi ClamAV, dan versi definisi malware dengan tanggal terakhir diperbarui.
gcs-malware-scanner version 3.2.0 Using Clam AV version: ClamAV 1.4.1/27479/Fri Dec 6 09:40:14 2024
Layanan Cloud Run mengharuskan semua pemanggilan
diautentikasi, dan identitas autentikasi harus memiliki
izin run.routes.invoke
di layanan. Anda menambahkan izin di
bagian berikutnya.
Membuat pemicu Cloud Storage Eventarc
Di bagian ini, Anda akan menambahkan izin untuk mengizinkan Eventarc
mengambil peristiwa Cloud Storage dan membuat pemicu untuk mengirim peristiwa ini
ke layanan malware-scanner
Cloud Run.
Jika Anda menggunakan project yang sudah ada dan dibuat sebelum 8 April 2021, tambahkan peran
iam.serviceAccountTokenCreator
ke akun layanan Pub/Sub:PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)") PUBSUB_SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-pubsub." gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PUBSUB_SERVICE_ACCOUNT}"\ --role='roles/iam.serviceAccountTokenCreator'
Penambahan peran ini hanya diperlukan untuk project lama dan memungkinkan Pub/Sub memanggil layanan Cloud Run.
Di Cloud Shell, hibahkan peran Pub/Sub Publisher ke akun layanan Cloud Storage:
STORAGE_SERVICE_ACCOUNT=$(gcloud storage service-agent --project="${PROJECT_ID}") gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:${STORAGE_SERVICE_ACCOUNT}" \ --role "roles/pubsub.publisher"
Izinkan akun layanan
malware-scanner
memanggil layanan Cloud Run, dan bertindak sebagai penerima peristiwa 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"
Buat pemicu Eventarc untuk mengambil peristiwa objek akhir dalam bucket Cloud Storage yang tidak dipindai dan kirimkan ke layanan Cloud Run Anda. Pemicu menggunakan akun layanan
malware-scanner
untuk autentikasi: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}"
Jika Anda menerima salah satu error berikut, tunggu satu menit, lalu jalankan perintah lagi:
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.
Ubah batas waktu konfirmasi pesan menjadi lima menit di langganan Pub/Sub yang mendasarinya yang digunakan oleh pemicu Eventarc. Nilai default 10 detik terlalu pendek untuk file yang besar atau beban yang tinggi.
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=300
Meskipun pemicu Anda langsung dibuat, diperlukan waktu hingga dua menit agar pemicu tersebut berfungsi sepenuhnya.
Membuat tugas Cloud Scheduler untuk memicu update duplikasi database ClamAV
Buat tugas Cloud Scheduler yang menjalankan permintaan
POST
HTTP di layanan Cloud Run dengan perintah untuk memperbarui duplikat database definisi malware. Agar tidak terlalu banyak klien yang menggunakan slot waktu yang sama, ClamAV mengharuskan Anda menjadwalkan tugas pada menit acak antara 3 dan 57, sehingga menghindari kelipatan 10.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"
Argumen command line
--schedule
menentukan kapan tugas dijalankan menggunakan format string unix-cron. Nilai yang diberikan menunjukkan bahwa tugas harus berjalan pada menit tertentu yang dihasilkan secara acak setiap dua jam.
Tugas ini hanya memperbarui duplikat ClamAV di Cloud Storage. Daemon freshclam ClamAV di setiap instance Cloud Run memeriksa duplikat setiap 30 menit untuk mencari definisi baru dan memperbarui daemon ClamAV.
Men-deploy menggunakan Terraform CLI
Bagian ini menjelaskan cara men-deploy arsitektur yang dijelaskan dalam dokumen ini menggunakan Terraform CLI.
Meng-clone Repositori GitHub
Di Cloud Shell, clone repositori GitHub yang berisi kode dan file Terraform:
git clone https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner.git
Menyiapkan lingkungan
Di bagian ini, Anda akan menetapkan setelan untuk nilai yang digunakan
selama deployment, seperti
region dan zona.
Dalam deployment ini, Anda menggunakan us-central1
sebagai region untuk
layanan Cloud Run dan us
sebagai lokasi untuk
pemicu Eventarc dan bucket Cloud Storage.
Di Cloud Shell, tetapkan variabel shell umum termasuk region dan lokasi:
REGION=us-central1 LOCATION=us PROJECT_ID=PROJECT_ID
Ganti
PROJECT_ID
dengan project ID Anda.Lakukan inisialisasi lingkungan
gcloud CLI
dengan ID project Anda:gcloud config set project "${PROJECT_ID}"
Buat file konfigurasi
config.json
berdasarkan file templateconfig.json.tmpl
di repositori GitHub:sed "s/-bucket-name/-${PROJECT_ID}/" \ docker-clamav-malware-scanner/cloudrun-malware-scanner/config.json.tmpl \ > docker-clamav-malware-scanner/cloudrun-malware-scanner/config.json
Perintah sebelumnya menggunakan operasi telusuri dan ganti untuk memberi bucket Cloud Storage nama unik yang didasarkan pada Project ID.
Opsional: Lihat file konfigurasi yang diperbarui:
cat docker-clamav-malware-scanner/cloudrun-malware-scanner/config.json
Konfigurasikan variabel Terraform. Isi file konfigurasi
config.json
diteruskan ke Terraform menggunakan variabelTF_VAR_config_json
, sehingga Terraform mengetahui bucket Cloud Storage mana yang harus dibuat. Nilai variabel ini juga diteruskan ke Cloud Run untuk mengonfigurasi layanan.TF_VAR_project_id=$PROJECT_ID TF_VAR_region=us-central1 TF_VAR_bucket_location=us TF_VAR_config_json="$(cat docker-clamav-malware-scanner/cloudrun-malware-scanner/config.json)" TF_VAR_create_buckets=true export TF_VAR_project_id TF_VAR_region TF_VAR_bucket_location TF_VAR_config_json TF_VAR_create_buckets
Men-deploy infrastruktur dasar
Di Cloud Shell, jalankan perintah berikut untuk men-deploy infrastruktur dasar:
gcloud services enable \ cloudresourcemanager.googleapis.com \ serviceusage.googleapis.com cd docker-clamav-malware-scanner/terraform/infra terraform init terraform apply
Balas
yes
saat diminta.Skrip Terraform ini melakukan tugas-tugas berikut:
- Membuat akun layanan
- Membuat Artifact Registry
- Membuat bucket Cloud Storage
- Menetapkan peran dan izin yang sesuai
- Melakukan populasi awal bucket Cloud Storage yang berisi duplikat database definisi malware ClamAV
Mem-build container untuk layanan
Di Cloud Shell, jalankan perintah berikut untuk meluncurkan tugas Cloud Build guna membuat image container untuk layanan:
cd ../../cloudrun-malware-scanner gcloud builds submit \ --region="$TF_VAR_region" \ --config=cloudbuild.yaml \ --service-account="projects/$PROJECT_ID/serviceAccounts/malware-scanner-build@$PROJECT_ID." \ .
Tunggu beberapa menit hingga build selesai.
Men-deploy layanan dan pemicu
Di Cloud Shell, jalankan perintah berikut untuk men-deploy layanan Cloud Run:
cd ../terraform/service/ terraform init terraform apply
Balas
yes
saat diminta.Perlu waktu beberapa menit hingga layanan di-deploy dan dimulai.
Skrip terraform ini melakukan tugas-tugas berikut:
- Men-deploy layanan Cloud Run menggunakan image container yang baru saja Anda build.
- Menyiapkan pemicu Eventarc di bucket Cloud Storage
unscanned
. Meskipun pemicu Anda langsung dibuat, diperlukan waktu hingga dua menit agar pemicu tersebut berfungsi sepenuhnya. - Membuat tugas Cloud Scheduler untuk mengupdate ke duplikat definisi malware ClamAV.
Jika deployment gagal dengan salah satu error berikut, tunggu satu menit, lalu jalankan kembali perintah
terraform apply
untuk mencoba membuat pemicu Eventarc lagi.Error: Error creating Trigger: googleapi: Error 400: Invalid resource state for "": The request was invalid: Bucket "unscanned-PROJECT_ID" was not found. Please verify that the bucket exists.
Error: Error creating Trigger: googleapi: Error 400: 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..
Opsional: Untuk memeriksa layanan yang sedang berjalan dan versi ClamAV yang digunakan, jalankan perintah berikut:
MALWARE_SCANNER_URL="$(terraform output -raw cloud_run_uri)" curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \ "${MALWARE_SCANNER_URL}"
Outputnya akan terlihat seperti contoh berikut. Halaman ini menampilkan versi layanan pemindai malware, versi ClamAV, dan versi definisi malware dengan tanggal terakhir diperbarui.
gcs-malware-scanner version 3.2.0 Using Clam AV version: ClamAV 1.4.1/27479/Fri Dec 6 09:40:14 2024
Menguji pipeline dengan mengupload file
Untuk menguji pipeline, upload satu file bersih (bebas malware) dan satu file pengujian yang meniru file yang terinfeksi:
Buat file teks contoh atau gunakan file bersih yang ada untuk menguji proses pipeline.
Di Cloud Shell, salin file sampel data ke bucket yang tidak dipindai:
gcloud storage cp FILENAME "gs://unscanned-${PROJECT_ID}"
Ganti
FILENAME
dengan nama file teks yang bersih. Layanan pemindai malware memeriksa setiap file dan memindahkannya ke bucket yang sesuai. File ini dipindahkan ke bucket yang bersih.Beri waktu pipeline beberapa detik untuk memproses file, lalu periksa bucket Anda yang bersih untuk melihat apakah file yang diproses ada di sana:
gcloud storage ls "gs://clean-${PROJECT_ID}" --recursive
Anda dapat memeriksa apakah file telah dihapus dari bucket yang tidak dipindai:
gcloud storage ls "gs://unscanned-${PROJECT_ID}" --recursive
Upload file bernama
eicar-infected.txt
yang berisi tanda tangan pengujian anti-malware standar EICAR ke bucket yang tidak dipindai:echo -e 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' \ | gcloud storage cp - "gs://unscanned-${PROJECT_ID}/eicar-infected.txt"
String teks ini memiliki tanda tangan yang memicu pemindai malware untuk tujuan pengujian. File pengujian ini adalah pengujian yang banyak digunakan. Ini bukan malware yang sebenarnya dan tidak berbahaya bagi workstation Anda. Jika mencoba membuat file yang berisi string ini di komputer yang menginstal pemindai malware, Anda dapat memicu pemberitahuan.
Tunggu beberapa detik, lalu periksa bucket yang dikarantina untuk melihat apakah file Anda berhasil melewati pipeline:
gcloud storage ls "gs://quarantined-${PROJECT_ID}" --recursive
Layanan ini juga mencatat entri log Logging saat file yang terinfeksi malware terdeteksi.
Anda dapat memeriksa apakah file telah dihapus dari bucket yang tidak dipindai:
gcloud storage ls "gs://unscanned-${PROJECT_ID}" --recursive
Menguji mekanisme update database definisi malware
Di Cloud Shell, picu pemeriksaan update dengan memaksa tugas Cloud Scheduler untuk dijalankan:
gcloud scheduler jobs run "${SERVICE_NAME}-mirror-update" --location="${REGION}"
Hasil perintah ini hanya ditampilkan di log mendetail.
Memantau layanan
Anda dapat memantau layanan menggunakan Cloud Logging dan Cloud Monitoring.
Melihat log mendetail
Di konsol Google Cloud, buka halaman Logs Explorer Cloud Logging.
Jika filter Kolom log tidak ditampilkan, klik Log Fields.
Di filter Kolom log, klik Cloud Run Revision.
Di bagian Nama Layanan pada filter Kolom Log, klik malware-scanner.
Hasil kueri log menampilkan log dari layanan, termasuk beberapa baris yang menampilkan permintaan dan status pemindaian untuk kedua file yang Anda upload:
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)
Output-nya menunjukkan versi ClamAV dan revisi tanda tangan database malware, beserta nama malware untuk file pengujian yang terinfeksi. Anda dapat menggunakan pesan log ini untuk menyiapkan pemberitahuan saat malware ditemukan, atau saat kegagalan terjadi saat pemindaian.
Output-nya juga menunjukkan log update duplikat definisi malware:
Starting CVD Mirror update
CVD Mirror update check complete. output: ...
Jika duplikat diperbarui, output akan menampilkan baris tambahan:
CVD Mirror updated: DATE_TIME - INFO: Downloaded daily.cvd. Version: VERSION_INFO
Log update Freshclam muncul setiap 30 menit:
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)
Jika database telah diperbarui, baris log freshclam akan mirip dengan yang berikut:
DATE_TIME -> daily.cld updated (version: VERSION_INFO)
Melihat Metrik
Layanan ini menghasilkan metrik berikut untuk tujuan pemantauan dan pemberitahuan:
- Jumlah file bersih yang diproses:
workload.googleapis.com/googlecloudplatform/gcs-malware-scanning/clean-files
- Jumlah file terinfeksi yang diproses:
workload.googleapis.com/googlecloudplatform/gcs-malware-scanning/infected-files
- Jumlah file yang diabaikan dan tidak dipindai:
workload.googleapis.com/googlecloudplatform/gcs-malware-scanning/ignored-files
- Waktu yang dihabiskan untuk memindai file:
workload.googleapis.com/googlecloudplatform/gcs-malware-scanning/scan-duration
- Total jumlah byte yang dipindai:
workload.googleapis.com/googlecloudplatform/gcs-malware-scanning/bytes-scanned
- Jumlah pemindaian malware yang gagal:
workload.googleapis.com/googlecloudplatform/gcs-malware-scanning/scans-failed
- Jumlah pemeriksaan update Duplikat CVD:
workload.googleapis.com/googlecloudplatform/gcs-malware-scanning/cvd-mirror-updates
Anda dapat melihat metrik ini di Metrics Explorer Cloud Monitoring:
Di konsol Google Cloud, buka halaman Metrics Explorer Cloud Monitoring.
Klik kolom Select a metric dan masukkan string filter
malware
.Luaskan resource Tugas Umum.
Luaskan kategori Googlecloudplatform.
Pilih metrik googlecloudplatform/gcs-malware-scanning/clean-files. Grafik ini menunjukkan titik data yang menunjukkan kapan file bersih dipindai.
Anda dapat menggunakan metrik untuk memantau pipeline dan membuat pemberitahuan saat malware terdeteksi, atau saat file gagal diproses.
Metrik yang dihasilkan memiliki label berikut, yang dapat Anda gunakan untuk pemfilteran dan agregasi guna melihat detail terperinci dengan Metrics Explorer:
source_bucket
destination_bucket
clam_version
cloud_run_revision
Dalam metrik ignored_files
, label reason
berikut menentukan alasan file diabaikan:
ZERO_LENGTH_FILE
: Jika nilai konfigurasiignoreZeroLengthFiles
ditetapkan, dan file kosong.FILE_TOO_LARGE
: Jika file melebihi ukuran pemindaian maksimum 500 MiB.REGEXP_MATCH
: Jika nama file cocok dengan salah satu pola yang ditentukan difileExclusionPatterns
.FILE_SIZE_MISMATCH
: Jika ukuran file berubah saat sedang diperiksa.
Konfigurasi lanjutan
Bagian berikut menjelaskan cara mengonfigurasi pemindai dengan parameter lanjutan lainnya.
Menangani beberapa bucket
Layanan pemindai malware dapat memindai file dari beberapa bucket sumber dan mengirim file untuk memisahkan bucket bersih dan yang dikarantina. Meskipun konfigurasi lanjutan ini berada di luar cakupan deployment ini, berikut adalah ringkasan langkah-langkah yang diperlukan:
Membuat bucket Cloud Storage yang tidak dipindai, bersih, dan dikarantina dengan nama unik.
Berikan peran yang sesuai ke akun layanan
malware-scanner
di setiap bucket.Edit file konfigurasi
config.json
untuk menentukan nama bucket bagi setiap konfigurasi:{ "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" }
Untuk setiap bucket yang tidak dipindai, buat pemicu Eventarc. Pastikan untuk membuat nama pemicu yang unik untuk setiap bucket.
Bucket Cloud Storage harus berada dalam project dan region yang sama dengan pemicu Eventarc.
Jika Anda menggunakan deployment Terraform, langkah-langkah di bagian ini akan otomatis diterapkan saat Anda meneruskan file konfigurasi config.json
yang telah diperbarui di variabel konfigurasi Terraform TF_VAR_config_json
.
Mengabaikan file sementara
Beberapa layanan upload, seperti gateway SFTP ke Cloud Storage, membuat satu atau beberapa file sementara selama proses upload. Layanan ini kemudian mengganti nama file ini menjadi nama file akhir setelah upload selesai.
Perilaku normal pemindai adalah memindai dan memindahkan semua file, termasuk file sementara ini segera setelah ditulis, yang dapat menyebabkan layanan uploader gagal saat tidak dapat menemukan file sementaranya.
Bagian fileExclusionPatterns
dari file konfigurasi config.json
memungkinkan
Anda menggunakan ekspresi reguler untuk menentukan daftar pola nama file yang akan diabaikan.
Setiap file yang cocok dengan ekspresi reguler ini akan dibiarkan di bucket unscanned
.
Saat aturan ini dipicu, penghitung ignored-files
akan bertambah, dan
pesan akan dicatat ke dalam log untuk menunjukkan bahwa file yang cocok dengan pola diabaikan.
Contoh kode berikut menunjukkan file konfigurasi config.json
dengan
daftar fileExclusionPatterns
yang disetel untuk mengabaikan file yang diakhiri dengan .tmp
atau berisi
string .partial_upload.
.
{
"buckets": [
{
"unscanned": "unscanned-bucket-name",
"clean": "clean-bucket-name",
"quarantined": "quarantined-bucket-name"
},
],
"ClamCvdMirrorBucket": "cvd-mirror-bucket-name",
"fileExclusionPatterns": [
"\\.tmp$",
"\\.partial_upload\\."
]
}
Berhati-hatilah saat menggunakan karakter \
dalam ekspresi reguler karena karakter tersebut
harus di-escape dalam file JSON dengan \
lain. Misalnya, untuk
menentukan .
literal dalam ekspresi reguler, simbol harus di-escape dua kali - sekali
untuk ekspresi reguler, dan sekali lagi untuk teks dalam file JSON, sehingga
menjadi \\.
, seperti pada baris terakhir contoh kode sebelumnya.
Mengabaikan file dengan panjang nol
Serupa dengan file sementara, beberapa layanan upload membuat file dengan panjang nol di Cloud Storage, lalu memperbarui file ini nanti dengan lebih banyak konten.
File ini juga dapat diabaikan dengan menetapkan parameter config.json
ignoreZeroLengthFiles
ke true
, misalnya:
{
"buckets": [
{
"unscanned": "unscanned-bucket-name",
"clean": "clean-bucket-name",
"quarantined": "quarantined-bucket-name"
},
],
"ClamCvdMirrorBucket": "cvd-mirror-bucket-name",
"ignoreZeroLengthFiles": true
}
Saat aturan ini dipicu, metrik ignored-files
akan bertambah, dan
pesan akan dicatat ke dalam log untuk menunjukkan bahwa file dengan panjang nol diabaikan.
Ukuran file pemindaian maksimum
Ukuran file pemindaian maksimum default adalah 500 MiB. Hal ini dipilih karena memerlukan waktu sekitar 5 menit untuk memindai file dengan ukuran ini.
File yang lebih besar dari 500 MiB akan diabaikan, dan dibiarkan di bucket unscanned
. Metrik files-ignored
bertambah dan pesan dicatat ke dalam log.
Jika Anda perlu meningkatkan batas ini, perbarui batas berikut agar menampung nilai ukuran file maksimum dan durasi pemindaian baru:
- Waktu tunggu permintaan layanan Cloud Run adalah 5 menit
- Batas waktu konfirmasi pesan langganan Pub/Sub adalah 5 menit
- Kode Pemindai memiliki konstanta
MAX_FILE_SIZE
sebesar 500 MiB. - Konfigurasi layanan ClamAV memiliki setelan
StreamMaxLength
,MaxScanSize
, danMaxFileSize
sebesar 512 MB. Setelan ini ditetapkan oleh skripbootstrap.sh
.
Pembersihan
Bagian berikut menjelaskan cara agar Anda tidak dikenai biaya di masa mendatang untuk project Google Cloud yang Anda gunakan dalam deployment ini.
Menghapus project Google Cloud
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam deployment ini, Anda dapat menghapus project Google Cloud.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah berikutnya
- Jelajahi Dokumentasi Cloud Storage.
- Untuk arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Pusat Arsitektur Cloud.