【アップデート】Amazon GuardDutyでAmazon S3のマルウェアスキャンができるようになりました!!

AWS

2024.6.14

Topics

はじめに

こんにちは、Shunです!

AWS re:Inforce 2024にて、Amazon GuardDuty Malware Protection for Amazon S3が発表されました!
本記事では、実際にどのような手順で実装が可能なのかをご紹介します!

GuardDuty Malware Protection for S3とは

S3 のマルウェア保護は、選択した Amazon Simple Storage Service (Amazon S3) バケットに新しくアップロードされたオブジェクトをスキャンすることで、マルウェアの潜在的な存在を検出するのに役立ちます。選択したバケットに S3 オブジェクトまたは既存の S3 オブジェクトの新しいバージョンがアップロードされると、GuardDuty は自動的にマルウェア スキャンを開始します。
出典: GuardDuty Malware Protection for S3

やってみた

前提

  • S3バケットは作成済み

1. IAMの作成

Amazon GuardDuty Malware Protection for Amazon S3を利用するためには、GuardDutyへ付与するIAMを作成する必要があります。

以下の値を適用したい環境へ合わせ、書き換えてください。

{
    "Version": "2012-10-17",
    "Statement": [{
            "Sid": "AllowManagedRuleToSendS3EventsToGuardDuty",
            "Effect": "Allow",
            "Action": [
                "events:PutRule",
                "events:DeleteRule",
                "events:PutTargets",
                "events:RemoveTargets"
            ],
            "Resource": [
                "arn:aws:events:[region]:[account_id]:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
            ],
            "Condition": {
                "StringLike": {
                    "events:ManagedBy": "malware-protection-plan.guardduty.amazonaws.com"
                }
            }
        },
        {
            "Sid": "AllowGuardDutyToMonitorEventBridgeManagedRule",
            "Effect": "Allow",
            "Action": [
                "events:DescribeRule",
                "events:ListTargetsByRule"
            ],
            "Resource": [
                "arn:aws:events:[region]:[account_id]:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
            ]
        },
        {
            "Sid": "AllowPostScanTag",
            "Effect": "Allow",
            "Action": [
                "s3:PutObjectTagging",
                "s3:GetObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:GetObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::[bucket_name]/*"
            ]
        },
        {
            "Sid": "AllowEnableS3EventBridgeEvents",
            "Effect": "Allow",
            "Action": [
                "s3:PutBucketNotification",
                "s3:GetBucketNotification"
            ],
            "Resource": [
                "arn:aws:s3:::[bucket_name]"
            ]
        },
        {
            "Sid": "AllowPutValidationObject",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::[bucket_name]/malware-protection-resource-validation-object"
            ]
        },
        {
            "Sid": "AllowCheckBucketOwnership",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::[bucket_name]"
            ]
        },
        {
           "Sid": "AllowMalwareScan",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::[bucket_name]/*"
            ]
        },
        {
            "Sid": "AllowDecryptForMalwareScan",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:[region]:[account_id]:key/*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": "s3.ap-northeast.amazonaws.com"
                }
            }
        }
    ]
}

*94行目でカスタマー管理のキーを使用している方はカスタマー管理キーIDを[*]へ入力してください。

参考: IAMポリシー権限の追加

続いて、IAMロールを作成します。
以下の信頼関係ポリシーを付与し、先ほど作成したIAMポリシーと紐づけます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "malware-protection-plan.guardduty.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

参考: 信頼関係ポリシーの追加

これでIAMの作成は完了です。

2. Amazon GuardDuty Malware Protection for Amazon S3の有効化

GuardDutyのコンソールから「有効にする」をクリックします。

以下の設定を行います。

S3バケット: [IAMへ記載したS3バケット名]
スキャンされたオブジェクトにタグを付ける: [オブジェクトにタグを付ける*]
*マルウェア検出の有無はタグから判断します。
アクセス許可: [先ほど作成したIAMロール]

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

3. S3へマルウェア検出ファイルをアップロード

EICARファイルをS3へアップロードしてみます。

EICAR ウイルス対策テスト ファイルまたは EICAR テスト ファイルは、コンピュータ ウイルス対策プログラムの応答をテストするために、欧州コンピュータ ウイルス対策研究所 (EICAR) とコンピュータ ウイルス対策研究機構 (CARO) によって開発されたコンピュータ ファイルです。実際の損害を引き起こす可能性のある実際のマルウェアを使用する代わりに、このテスト ファイルを使用すると、実際のコンピュータ ウイルスを使用せずにウイルス対策ソフトウェアをテストできます。
出典: EICAR テスト ファイルとは何ですか?

しばらくすると、該当のオブジェクトへタグが付与され、「THREATS_FOUND」とのValueが付与されます。
これはマルウェアファイルが検出されたことを示しています。

ただ、これだけではマルウェアファイルが検出されただけで、ユーザー側からダウンロードができてしまいます。
そこで、S3のバケットポリシーへ「THREATS_FOUND」のValueが付与されたものはs3:GetObjectをDenyするポリシーを追記します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::[bucket_name]",
                "arn:aws:s3:::[bucket_name]/*"
            ]
        },
        {
            "Sid": "DenyGetObjectForTHREATSFOUND",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[bucket_name]/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/GuardDutyMalwareScanStatus": "THREATS_FOUND"
                }
            }
        }
    ]
}

これでS3バケットでマルウェアが検出されたファイルはダウンロードできなくなります。

さいごに

Amazon GuardDutyでAmazon S3のマルウェアスキャンが可能になったアップデートをご紹介しました!
今までは、C1FSSなどサードパーティー製品と組み合わせて実施していたことがAWSで完結できるようになったことは非常にありがたいです!

最後まで読んでいただきありがとうございます!

参考

関連記事

関連記事
Cloud One File Storage Securityを活用したAmazon S3マルウェアスキャンの手順
関連記事
Cloud One File Storage Security拡張編:Amazon S3のマルウェアファイルを自動で振り分ける
関連記事
Cloud One File Storage Security拡張編:Amazon S3のマルウェアファイル検出時にメール通知を行う

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Shun

週8バスケしたいです。Google Cloud11冠、2024 AWS All Cert

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら