本文へ移動

2026-07-01 時点の資料です。読みやすさのために、一部の文字の色を濃くしています。

松葉 / Matsuba ・ 開発過程資料

アップロードファイルのウイルススキャン/ Automated Malware Scanning

ClamAV によるイベント駆動の自動検査・隔離・シグネチャ更新

取引先から受領するファイルを、社内に取り込む前にすべてウイルス検査します。安全と確定したものだけを流通させ、疑わしいものは隔離する――その全体像を、まず一枚の構成図でご覧ください。

この資料について: システム担当向けの技術共有です。用いる技術は正式名で記し、初出には短い注釈を、末尾の 用語集にも一覧を用意しています。稼働中のサービス名(例:matsuba-scanner)は名前と役割を併記します。各章へは目次から移動できます。
01

検査の全構成System Map

この仕組みを構成する稼働リソース(サービス・バケット・ジョブ)と、その間を流れる合図を一枚にまとめました。①取り込み → ②検査 → ③振り分け・下流(clean)/④隔離・管理(infected)→ ⑤シグネチャ更新、の 5 区画で読めます。各要素の詳しい役割は、この先の各章で扱います。

図 01 · 検査の全構成 — 稼働リソースとイベントの全体マップ
① 取り込み — アップロードから到着検知利用者ブラウザmatsuba-api署名付きURL発行・管理API未検査バケットCloud Storage(GCS)Eventarc到着検知・OIDC PushURL要求署名付きURLで直接アップロード(PUT)finalizeOIDC Push(到着イベント)② 検査中核 — ClamAV による走査matsuba-scanner検査サービス(Cloud Run)clamd に INSTREAM・SHA-256 同時算定・サイズ上限main/daily/bytecode.cvd検出定義(clamd が参照)scanner の実行 SA実行サービスアカウント参照権限③ 振り分け・保管・下流(clean = 安全)検査済みバケットCloud Storage(GCS)PostgreSQLscan_status=clean・RLSアプリで開放一覧・DL・プレビュー・共有・Drive同期Pub/Subfile.scan_cleanmatsuba-syncDrive 同期matsuba-thumbnailerサムネイル生成通知(アップロード完了)clean:検査済みへ rewriteclean のみ可視publishfan-out(3 つの下流へ)④ 隔離・管理(infected = 感染/運用)隔離バケットCloud Storage(GCS)隔離台帳quarantined_files管理画面(matsuba-web)/admin/scan-queue・/admin/quarantine隔離読取専用 SA署名付きURL(短時間・取り出し)通知(感染検出)file.scan_infected再スキャン → scanner に再投入file.rescan_requested(outbox)infected:隔離へ rewrite記録取り出しpublish再検査⑤ シグネチャ更新 — 検出定義を 6 時間ごとに最新化Cloud Scheduler定期起動(cron)clamav-mirror-updater取得ジョブ(Cloud Run Job)cvdupdate・6 時間ごとミラーバケットCloud Storage(GCS)matsuba-scanner6h pull → clamd RELOADclamav-eicar-test月次・EICAR を未検査へ投入database.clamav.netClamAV 公式ミラー(外部)① 未検査バケットへ(区画①)6h起動配置pull取得月次起動EICAR 投入

色の凡例 ― テール=処理サービス/金茶=バケット/赤=隔離/破線=外部・専用サービスアカウント。稼働リソース名(matsuba-scanner など)はすべて用語集に説明があります。

02

概要Overview

取引先とのファイル共有では、こちらが用意したものだけでなく、相手から受け取るファイルも扱います。中身が事前には分からないため、社内で開く・受信者へ渡す前に、必ず一度検査する必要があります。

そこで、アップロードされたファイルは、まず検査専用の置き場(未検査バケット)に着地します。その到着を合図に検査が自動で走り、結果に応じて検査済みと隔離に振り分けられます。利用者に見え、ダウンロードや共有・Drive 同期の対象になるのは、検査済み(clean)と確定したファイルだけです。検査中・感染・失敗のファイルは、一般の利用者からは見えません。

検査エンジンには、20 年以上の実績があるオープンソースのアンチウイルス ClamAV を採用し、Google Cloud 上の小さな処理サービス(matsuba-scanner)として自前で運用しています。ファイルの到着から検査・振り分けまでは、人手を介さずイベント駆動(ある出来事をきっかけに次の処理が自動で動く方式)で連鎖します。

03

この資料の構成Pages

仕組みを、流れ・技術・運用の順にご説明します。「スキャンの仕組み」と「隔離と管理」は図つきで厚めに扱います。

04

規模と主要指標Key Figures

この仕組みの主な数字です(根拠は各ページに記載)。

上限あり
1 ファイルあたりの検査対象サイズ
6時間
検出定義(シグネチャ)の更新間隔
3分類
検査結果の振り分け(マルウェア/偽装/検証不能)
短時間
隔離ファイル取り出しリンクの有効時間
月次
EICAR による「検出できること」の自動確認
cleanのみ
ダウンロード・プレビュー・共有・Drive 同期を許可する状態