【アップデート】GuardDuty Malware Protection for S3 がオンデマンドスキャンに対応しました
GuardDuty Malware Protection for S3 は、S3バケットのオブジェクトスキャン機能です。 マルウェア検出に役立ちます。 従来は、S3バケットに新規アップロードされるオブジェクトをスキャンできていました。
今回のアップデートで、 既存オブジェクトに対してオンデマンドでマルウェアスキャンを実行 できるようになりました。 新規CLIコマンド(API)として send-object-malware-scan が追加されています。
NEW_FEATURES : Amazon GuardDuty announces Scan on Demand for Malware Protection for S3. Using this feature you can use the new SendObjectMalwareScan API to trigger scans on any already existing objects stored in your S3 buckets.
https://docs.aws.amazon.com/guardduty/latest/ug/malware-protection-s3-on-demand.html
マルウェアスキャンを有効化する前から存在しているオブジェクトをスキャンしたいときに役に立ちますね。
本ブログにて早速試してみます。
前提条件
オンデマンドスキャンを実行する前に、以下の前提条件を満たす必要があります。
- 対象バケットで Malware Protection for S3 が有効化されていること
- API を実行する IAM ユーザーまたはロールに AmazonGuardDutyFullAccess_v2 ポリシー(推奨)がアタッチされていること
わたしのAWS検証環境ではそもそも Malware Protection for S3 を使っていなかったので、 有効化から始めます。
S3 の Malware Protection を有効化する
※ 読者環境にて、すでに有効化されている場合は読み飛ばしてください。
GuardDuty コンソールから Malware Protection for S3 を有効化します。 [S3 の Malware Protection を有効化] を選択します。

有効化のパラメータを入力していきます。

S3バケットの詳細を入力(※プレフィックスはオンデマンドスキャンのみ試す場合は、 "使用予定のないプレフィクス" を書いておくと良さそう)

スキャンされたオブジェクトにタグを付ける/サービスアクセス → 有効化
無事、有効化できました。

なお、有効化が完了すると、マルウェアスキャン用の IAM ロール(今回は GuardDutyS3MalwareScanRole )が作成されます。 このロールには、S3 オブジェクトのスキャンやタグ付けに必要な権限が付与されています。
やってみる
オンデマンドスキャンを実行する
send-object-malware-scan コマンドを使用して、既存オブジェクトに対してマルウェアスキャンを実行します。
aws guardduty send-object-malware-scan \
--s3-object '{
"Bucket": "amzn-s3-demo-bucket",
"Key": "test.txt"
}'
# 特に出力は無し
なお、特定バージョニングのオブジェクトに対して実行したい場合は、 以下のようにします。
aws guardduty send-object-malware-scan \
--s3-object '{
"Bucket": "amzn-s3-demo-bucket",
"Key": "APKAEIBAERJR2EXAMPLE",
"VersionId": "d41d8cd98f00b204e9800998eEXAMPLE"
}'
– 引用: On-demand S3 malware scan in GuardDuty - Amazon GuardDuty
スキャン結果を確認する
スキャン結果は、オブジェクトに付与されたタグで確認できます。
aws s3api get-object-tagging \
--bucket amzn-s3-demo-bucket \
--key test.txt
# {
# "TagSet": [
# {
# "Key": "GuardDutyMalwareScanStatus",
# "Value": "NO_THREATS_FOUND"
# }
# ]
# }
GuardDutyMalwareScanStatus タグの値が NO_THREATS_FOUND となっており、 マルウェアが検出されなかったことが確認できました。
スキャン結果の値は以下のいずれかになります (参考)
NO_THREATS_FOUND: 脅威なしTHREATS_FOUND: マルウェア検出UNSUPPORTED: スキャン非対応ACCESS_DENIED: アクセス権限エラーFAILED: 内部エラー
また、CloudWatch メトリクスでも実行されたことが確認できます。 たとえば 「名前空間: AWS/GuardDuty/MalwareProtection, メトリクス名: CompletedScanBytes 」などです。 GuardDuty コンソールにて確認できます。

GuardDuty > S3 の Malware Protection > S3 バケットの詳細
おわりに
GuardDuty Malware Protection for S3 がオンデマンドスキャンを試してみました。 従来は新規アップロード時のリアルタイムスキャンのみだったので、 既存オブジェクトのスキャンに少し難ありでした。 かゆいところに手が届く、いい更新だと思います。
なお、料金まわりは以下を参照ください。 スキャンされた GB および評価されたオブジェクト数に応じて課金されます。
- Pricing and usage cost for Malware Protection for S3 - Amazon GuardDuty
- Intelligent Threat Detection – Amazon GuardDuty Pricing – AWS
以上、参考になれば幸いです。
参考
- On-demand S3 malware scan in GuardDuty - Amazon GuardDuty
- send-object-malware-scan — AWS CLI Command Reference
- GuardDuty Malware Protection for S3 - Amazon GuardDuty
- Monitoring S3 object scans in Malware Protection for S3 - Amazon GuardDuty
- AWS managed policy: AmazonGuardDutyFullAccess_v2
- Pricing and usage cost for Malware Protection for S3 - Amazon GuardDuty
- Amazon GuardDuty Pricing







