Cloud Storage にアップロードされたファイルのマルウェア スキャンを自動化する

Last reviewed 2023-05-17 UTC

このリファレンス アーキテクチャでは、マルウェア(トロイの木馬、ウイルス、その他の悪意のあるコードなど)のファイルの評価を自動化するためのイベント ドリブン パイプラインを構築する方法について説明します。ほとんどのアプリでは、Cloud Storage にアップロードされた多数のファイルを手動で評価することは時間がかかりすぎます。このプロセスを自動化することで、時間を節約し、効率を改善できます。

このアーキテクチャのパイプラインでは、Google Cloud プロダクトとオープンソースのウイルス対策エンジン ClamAV を使用します。Linux コンテナでオンデマンド スキャンを実行する他のマルウェア対策エンジンも使用できます。このアーキテクチャでは、ClamAV は Cloud Run でホストされている Docker コンテナで実行されます。パイプラインは、Cloud Logging にログエントリを書き込み、Cloud Monitoring に指標を記録します。

アーキテクチャ

次の図は、このアーキテクチャの概要を示しています。

マルウェア スキャン パイプラインのアーキテクチャ。

このアーキテクチャに示されているパイプラインは次のとおりです。

  • ユーザーがアップロードしたファイルのスキャン パイプライン。アップロードされたファイルにマルウェアが含まれているかどうかを確認します。
  • ClamAV マルウェア データベースのミラー更新パイプライン。ClamAV が使用するマルウェア データベースの最新のミラーを維持します。

これらのパイプラインについては、以降のセクションで詳しく説明します。

ユーザーがアップロードしたファイルのスキャン パイプライン

ファイルのスキャン パイプラインは次のように動作します。

  1. エンドユーザーが、スキャンされていない Cloud Storage バケットにファイルをアップロードします。
  2. Eventarc サービスがこのアップロード イベントを捕捉し、この新しいファイルについて Cloud Run サービスに通知します。
  3. Cloud Run サービスが、スキャンされていない Cloud Storage バケットから新しいファイルをダウンロードして、ClamAV マルウェア スキャナに渡します。
  4. マルウェア スキャンの結果に応じて、サービスが次のいずれかのアクションを実行します。
    • ファイルがクリーンであることを ClamAV が宣言すると、スキャンされていない Cloud Storage バケットからクリーンな Cloud Storage バケットにファイルが移動します。
    • ClamAV でファイルにマルウェアが含まれていると宣言されると、ファイルはスキャンされていない Cloud Storage バケットから隔離された Cloud Storage バケットに移動します。
  5. これらのアクションの結果が Logging と Monitoring に報告され、管理者が対処できるようになります。

ClamAV マルウェア データベースのミラー更新パイプライン

ClamAV マルウェア データベースのミラー更新パイプラインでは、データベースの最新のプライベート ローカルミラーが Cloud Storage に保持されます。これにより、ClamAV の公開データベースは更新ごとに 1 回のみアクセスされ、完全なデータベースではなく、小さな差分更新ファイルがダウンロードされます。これによりレート制限を回避できます。

このパイプラインは次のように動作します。

  1. Cloud Scheduler ジョブは、2 時間ごとにトリガーされるように構成されています。これは、ClamAV freshclam サービスで使用されるデフォルトの更新チェック間隔と同じです。このジョブは、Cloud Run サービスに HTTP POST リクエストを行い、マルウェア データベース ミラーを更新するように指示します。
  2. Cloud Run インスタンスが、マルウェア データベース ミラーを Cloud Storage バケットからローカル ファイル システムにコピーします。
  3. 次に、このインスタンスが ClamAV CVDUpdate ツールを実行します。このツールは利用可能な差分更新をダウンロードして、データベース ミラーに適用します。
  4. その後、更新されたマルウェア データベースのミラーを Cloud Storage バケットにコピーします。

起動時に、Cloud Run インスタンスで実行されている ClamAV freshclam サービスが Cloud Storage からマルウェア データベースをダウンロードします。このサービスはまた、実行時に Cloud Storage バケットで利用可能なデータベースの更新を定期的にチェックしてダウンロードします。

設計上の考慮事項

次のガイドラインは、信頼性、費用、運用効率に関する組織の要件を満たすアーキテクチャを開発するために役立ちます。

信頼性

効果的なスキャンのために、ClamAV マルウェア スキャナはマルウェア署名のデータベースを最新状態で維持する必要があります。ClamAV サービスは、ステートレス サービスである Cloud Run を使用して実行されます。このサービスのインスタンスの起動時には常に、ClamAV が最新の完全なマルウェア データベース(サイズは数百 MB)をダウンロードする必要があります。

ClamAV の公開マルウェア データベースはコンテンツ配信ネットワーク(CDN)でホストされており、ダウンロードにはレート制限があります。複数のインスタンスが起動し、データベース全体をダウンロードしようとすると、レート制限がトリガーされることがあります。これにより、Cloud Run で使用される外部 IP アドレスが 24 時間ブロックされます。その結果、ClamAV サービスが起動されず、マルウェア データベースの更新をダウンロードできなくなります。

また、Cloud Run は外部 IP アドレスの共有プールを使用します。その結果 CDN では、異なるプロジェクトのマルウェア スキャン インスタンスからのダウンロードが、単一のアドレスからのダウンロードと見なされ、ブロックがトリガーされます。

費用の最適化

このアーキテクチャでは、課金対象である次の Google Cloud コンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

運用効率

感染したファイルに関するログベースのアラートをトリガーするには、Logging のログエントリを使用できます。ただし、このようなアラートの設定は、このアーキテクチャの対象外です。

デプロイ

このアーキテクチャをデプロイするには、Cloud Storage にアップロードされたファイルの自動マルウェア スキャンをデプロイするをご覧ください。

次のステップ