🙄

【初心者向け】Aamazon GuardDuty Malware Protection for S3 入門!完全ガイド

2024/08/23に公開

GuardDuty Malware Protection for S3

☘️ はじめに

本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。

最新の情報については、AWS 公式ドキュメントをご参照ください。

👀 Contents

はじめに

クラウドセキュリティは今日のデジタル世界において最重要課題の一つです。特に、Amazon S3 のようなクラウドストレージサービスでは、マルウェア対策が不可欠です。本記事では、AWS GuardDuty の機能である Malware Protection for S3 について詳しく解説します。

Malware Protection for S3 とは

選択した Amazon Simple Storage Service (Amazon S3) バケットに新しくアップロードされたオブジェクトをスキャンして、マルウェアの潜在的な存在を検出する機能です。この機能により、クラウドストレージ内のデータセキュリティを効果的に強化することができます。

【AWS Black Belt Online Seminar】Amazon GuardDuty Malware Protection(YouTube)(0:43:53)

blackbelt-guardduty-malware

GuardDuty Malware Protection for S3 - Overview and Demo | Amazon Web Services(YouTube)(0:09:30)

malware-protection

Malware Protection for S3 サービス概要

Malware Protection for S3 ドキュメント(GuardDuty)

Amazon GuardDuty よくある質問

Malware Protection for S3 料金(GuardDuty)

仕組み

仕組みに記載がありますが、Amazon GuardDuty Best Practices にあるS3 Malware Protection automation workflowの図が分かりやすいため引用します。

GD-S3-Automation-Workflow.png

  1. ファイルアップロード:ユーザーが S3 バケットにファイルをアップロードします。
  2. イベント通知:アップロードイベントが Amazon EventBridge に通知されます。
  3. ファイルコピーとスキャン実行:GuardDuty が動作する別の AWS アカウント内の隔離環境に、AWS PrivateLink 経由でファイルがコピーされ、オブジェクトを復号、スキャンします。コピー先は DuardDuty が動作する 別の AWS アカウント内の同一リージョン上です。
  4. 結果通知:スキャン結果が Amazon EventBridge に通知されます。
  5. メトリクス送信:CloudWatch にスキャン結果のメトリクスが送信されます。
  6. タグ付け:オプションが有効な場合、元の S3 オブジェクトにスキャン結果のタグが付けられます。
  7. 検出結果送信:GuardDuty が有効な場合、詳細な検出結果が送信されます。

使用方法

Malware Protection for S3 の設定は非常にシンプルです。以下の手順で簡単に開始できます。

  1. GuardDuty または Malware Protection for S3 を有効化します。

    • スキャン結果のみが必要な場合は「Malware Protection for S3」のみを有効化します。
    • 詳細な検出結果が必要な場合は、「GuardDuty」を有効化します。
      setup
  2. スキャン対象の S3 バケットを指定します。
    setup2

  3. ステータスが「Active」になれば設定完了です。
    setup3

これらの手順により、選択した S3 バケット内の新規アップロードファイルに対して自動的にマルウェアスキャンが実行されるようになります。

S3 オブジェクトスキャン結果の値

GuardDuty によってスキャンされた結果は以下の5つの値となります。

  1. NO_THREATS_FOUND: GuardDuty で潜在的な脅威が検出されなかったファイル ≒ 正常なファイル
  2. THREATS_FOUND: GuardDuty で潜在的な脅威が検出されたファイル
  3. UNSUPPORTED: GuardDuty でサポートされていないためスキャンが出来なかったファイル。詳細は、Malware Protection for S3 のクォータを参照。
  4. ACCESS_DENIED: GuardDuty がスキャンするためのアクセス権限がなくスキャンが出来なかったファイル。「前提条件 - IAM PassRole ポリシーを作成または更新する」を参照。
  5. FAILED: GuardDuty 内部エラーのため、スキャンが出来なかったファイル

これらの結果は、Amazon EventBridge のイベントとして記録されます。(詳細は、Amazon EventBridge の使用> S3 オブジェクトスキャン結果を参照)

"scanResultDetails": {
    "scanResultStatus": "THREATS_FOUND",
    "threats": [
        {
            "name": "EICAR-Test-File (not a virus)"
        }
    ]
}

タグ付けとアクセスコントロール

タグ付け機能を活用することで、スキャン結果に基づいたアクセスコントロールが可能になります。

タグ付け

タグ付けを有効にすると、「GuardDutyMalwareScanStatus」というタグが S3 オブジェクトに付与されます。このタグにはスキャン結果の値が保持されます。

ただし、タグ付けについては Malware Protection for S3 の無料枠に含まれないことに注意が必要です。
タグ付けにかかるコストについては、S3 料金の「管理とインサイト」タブに記載があります。

※ アジアパシフィック(東京)
S3 オブジェクトのタグ付け: 月あたり 10,000 タグにつき 0.01USD

タグベースのアクセスコントロール (TBAC)

TBAC を利用すると、スキャン結果に基づいて S3 オブジェクトへのアクセスを制御できます。例えば、以下のような S3 バケットリソースポリシーを設定することで、安全でないファイルへのアクセスを拒否できます。(詳細は、S3 バケットリソースポリシーの例を参照)

"Effect": "Deny",
"Action": [
    "s3:GetObject",
    "s3:GetObjectVersion"
],
"Resource": [
    "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
    "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
],
"Condition": {
    "StringNotEquals": {
        "s3:ExistingObjectTag/GuardDutyMalwareScanStatus": "NO_THREATS_FOUND"
    }
}

ただし、このポリシーの設定には注意が必要です。不適切な設定により、GuardDuty 自体のスキャンが「ACCESS_DENIED」となる可能性があります。

詳細な結果の確認方法

より詳細なスキャン結果を確認するには、GuardDuty を有効化する必要があります。
有効化すると、右上に「S3 マルウェアのすべての検出結果を表示」ボタンが表示されるようになり、詳細が確認できます。

details

このような検出結果が表示されます。

result1

選択することでさらに詳細が確認できます。

result2
result3

マルウェアテストの方法

実際のマルウェアを使用したテストは危険です。代わりに、EICAR (European Institute for Computer Antivirus Research)が公開している EICAR テストファイルを使用することをお勧めします。このファイルは無害ですが、多くのアンチウイルスソフトウェアによってマルウェアとして検出されます。

EICAR テストファイルは EICAR 公式サイトからダウンロードできます。このファイルを S3 バケットにアップロードすることで、Malware Protection for S3 の動作を安全にテストできます。

eicar

AWS CDK での実装例

AWS CDK での実装例です。以下のリポジトリを参照してください。

GitHub>ishiharatma/aws-cdk-cdp/usecases
/s3-malware-protection

github-overview

:
const malwareProtection = new guardduty.CfnMalwareProtectionPlan(this, 'malwareProtectionPlan', {
    protectedResource: {
    s3Bucket: {
        bucketName: targetBucket.bucketName,
    },
    },
    actions: {
    tagging: {
        status: 'ENABLED'
    }
    },
    role: guardDutyRole.roleArn,
});
:
const malwareProtectionEvents = new cwe.Rule(this, 'RuleMalwareProtectionGuardDuty', {
    description: 'CloudWatch Event Rule to send notification from GuardDuty Malware Protection.',
    enabled: true,
    eventPattern: {
        source: ['aws.guardduty'],
        detailType: ['GuardDuty Malware Protection Object Scan Result'],
        detail: {
            scanResultDetails: {
            scanResultStatus: ['THREATS_FOUND', 'UNSUPPORTED', 'ACCESS_DENIED','FAILED'],
            },
        },
    },
    //targets: [new cwet.SnsTopic(snsTopic)],
});

現在は 安全と判定されたもの以外を SNS に通知しているのみですが、以下のカスタマイズも可能です。

  • イベントパターンをスキャン結果ごとに作成し、処理を分ける
  • Lambda と連携し、「脅威が検出されたファイルを別の S3 バケットに隔離または削除」する

📖 まとめ

GuardDuty Malware Protection for S3 は、クラウドストレージのセキュリティを強化する強力なツールです。本記事で解説した機能や設定方法、ベストプラクティスを活用することで、組織のデータを効果的に保護し、セキュリティリスクを最小限に抑えることができます。

GitHubで編集を提案

Discussion