S3にアップロードされたファイルをGuardDutyでマルウェアスキャンする方法
はじめに
AWS S3にファイルをアップロードする際、セキュリティ対策は万全でしょうか?
近年、クラウドストレージの利用が増加するにつれて、S3バケットを標的としたマルウェア攻撃も増加傾向にあります。悪意のあるファイルがアップロードされると、機密データの漏洩やシステムの破壊など、深刻な被害をもたらす可能性があります。
そこで今回は、Amazon GuardDuty のマルウェア対策機能を使って、S3にアップロードされたファイルを自動的にスキャンし、セキュリティを強化する方法を紹介します。
Amazon GuardDutyとは?
Amazon GuardDutyは、AWS環境を継続的に監視し、悪意のあるアクティビティや不正なアクティビティを検出する脅威検出サービスです。 複雑な設定は不要で、AWS上で有効化するだけで利用できます。 GuardDutyは、機械学習で分析されたログから攻撃と思われる状況を検知します。
GuardDutyは、以下のような脅威を検知できます。
- 偵察: 異常なAPIアクティビティやポートスキャンなど、攻撃者による偵察を示唆するアクティビティ
- インスタンスの侵害: 暗号通貨マイニングやマルウェアなど、インスタンスの侵害を示すアクティビティ
-
アカウントの侵害: 異常な場所からのAPI呼び出しや
CloudTrailログの無効化の試みなど、アカウントの侵害を示す一般的なパターン -
バケットの侵害: 資格情報の悪用を示す疑わしいデータアクセスパターンや、不正なIPアドレスからの
Amazon S3アクセスなど、バケットの侵害を示すアクティビティ -
マルウェア: トロイの木馬、ワーム、暗号マイナー、ルートキット、ボットなど、
Amazon EC2インスタンスやコンテナワークロードを侵害するために使用される可能性のある、またはAmazon S3バケットにアップロードされるマルウェアの存在 -
コンテナの侵害:
Amazon EKS監査ログとAmazon EKSまたはAmazon ECSのコンテナランタイムアクティビティを分析することにより、コンテナワークロードで発生する可能性のある悪意があるまたは疑わしい動作を特定するアクティビティ
GuardDuty Malware Protection for S3とは?
GuardDuty Malware Protection for S3は、S3バケットにアップロードされたオブジェクトを対象に、マルウェアのスキャンを実行する機能です。 この機能は、GuardDutyサービスの一部として提供されており、S3にアップロードされたファイルをリアルタイムでスキャンし、マルウェアの脅威から保護します。
S3のマルウェア対策を有効にする手順
それでは、具体的な手順を見ていきましょう。
1. GuardDutyの有効化
まずは、GuardDutyを有効化する必要があります。
AWSマネジメントコンソールにサインインし、GuardDutyのページに移動します。 GuardDutyが有効になっていない場合は、有効化してください。

すべての機能にチェックを入れて有効にした場合、後述するコンソール上での検出結果を確認できますが、GuadDutyの無料枠である30日分のカウントが始まってしまうので注意が必要です。
GuardDuty Malware Protection for S3のみで開始した場合は、無料枠の消費はありませんが、コンソール上で検出結果を確認するにはCloudWatchメトリクスでしか確認できません。
2. S3のマルウェア対策の有効化
次に、S3のマルウェア対策を有効化します。
- GuardDutyコンソールで、左ペインから「S3 の Malware Protection」に移動します
- 「S3 の Malware Protection を有効化」、または右上の「有効にする」を選択します
- スキャン対象の
S3バケットを選択し、必要に応じてプレフィックスなどの条件を追加します - タグ付けについては、タグでのスキャンオブジェクトの検索ができるように付ける設定にしておくのがおすすめです
-
GuardDutyがS3オブジェクトをスキャンするために必要なアクションを実行できるように、ロールを新規作成、または選択します - 「有効にする」を選択すると、
GuardDutyがS3バケットに新しくアップロードされたオブジェクトのマルウェアスキャンを開始します
マルウェアを検出したらメールが飛ぶように設定する
これでS3にアップロードされたオブジェクトのマルウェア検出はできるようになりましたが、このままでは検出だけ行ってどこにも通知されない状態のため、メールで通知されるように設定していきます。
1. マルウェア検出時の通知設定
マルウェアが検出されたときに通知を受け取りたい場合は、Amazon EventBridge と Amazon SNS を使って通知を設定できます。
3-1. Amazon SNS トピックの作成
Amazon SNS で通知を送信するためのトピックを作成します。
-
Amazon SNSコンソールにサインインし、「トピック」>「トピックの作成」に移動します - 「トピックの種類」で「スタンダード」を選択します
- トピック名と表示名を入力します
- オプションの項目については任意で設定します
- 「トピックの作成」をクリックします
3-2. SNSトピックにEメールサブスクリプションを追加
SNSトピックにEメールサブスクリプションを追加することで、マルウェア検出時にメールで通知を受け取ることができます。
-
SNSコンソールで、通知を送信するためのSNSトピックを選択します - 「サブスクリプション」>「サブスクリプションの作成」に移動します
- 「プロトコル」で「Eメール」を選択します
- 「エンドポイント」で、通知を受け取るメールアドレスを入力します
- 「サブスクリプションの作成」をクリックします
- サブスクリプション確認メールが届くので、メール内のリンクをクリックしてサブスクリプションを確定します
3-3. GuardDutyの調査結果をSNSに送信するEventBridgeルールの作成
GuardDutyがマルウェアを検出したときに、EventBridgeでイベントをトリガーするルールを作成します。
-
EventBridgeコンソールで、「ルール」>「ルールの作成」に移動します -
ルール名と説明を入力します
-
「イベントバス」で「デフォルト」を選択します
-
「次へ」をクリックします
-
イベントパネルの「イベントソース」で「AWSイベント」を選択します -
「イベントパターン」で「パターンフォームを使用する」を選択します
-
イベントパターンパネルの「イベントソース」で「AWSサービス」を選択します -
「AWSのサービス」で「GuardDuty」を選択します
-
「次へ」をクリックします
-
「ターゲットタイプ」で「AWSサービス」を選択します
-
「追加設定」で「入力トランスフォーマー」を選択し、「入力トランスフォーマーを設定」をクリックします
-
「ターゲット入力トランスフォーマー」で、「入力パス」に以下のコードを貼り付けます
{ "severity": "$.detail.severity", "finding_id": "$.detail.id", "finding_type": "$.detail.type", "region": "$.region", "description": "$.detail.description" } -
「テンプレート」に以下のコードを貼り付けます
{ "severity": <severity>, "finding_id": <finding_id>, "finding_type": <finding_type>, "region": <region>, "description": <description> } -
「確認」をクリックします
-
「次へ」をクリックします
-
(オプション) ルールにタグを追加します
-
「次へ」をクリックします
-
ルールの詳細を確認し、「ルールの作成」をクリックします
S3バケットがKMSで暗号化されている場合
S3バケットがAWS KMSで暗号化されている場合は、GuardDutyでマルウェアスキャンを実行するために、以下の追加手順が必要になります。
1. IAMロールにKMSキーへのアクセス権限を付与
GuardDutyがKMSで暗号化されたS3オブジェクトをスキャンするには、IAMロールにKMSキーを使用するためのアクセス許可を付与する必要があります。
「S3 の Malware Protection を有効化」で選択したS3バケットが元々KMSで暗号化されており、サービスロールを新規作成した場合は、自動生成されるロールに適切にKMSのポリシーが付与されるため、この手順は不要
具体的には、以下の様なポリシーをIAMロールにアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGuardDutyToDecryptObjects",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "arn:aws:kms:your-region:your-account-id:key/your-kms-key-id" // KMSキーのARNに置き換えてください
}
]
}
このポリシーにより、GuardDutyは指定されたKMSキーを使用してS3オブジェクトを復号化し、マルウェアスキャンを実行することができます。
2. S3バケットポリシーの更新
S3バケットポリシーにGuardDutyがオブジェクトを読み取れるように許可を追加する必要があります。
具体的には、以下の様なポリシーをS3バケットポリシーに追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGuardDutyMalwareScan",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*" // スキャン対象のバケット名に置き換えてください
}
]
}
このポリシーにより、GuardDutyは指定されたS3バケット内のオブジェクトにアクセスし、マルウェアスキャンを実行することができます。
実際に検出をテストしてみる
GuardDuty Malware Protection for S3のテストを使用と思ったら、マルウェアを用意する必要がありますが、本物のマルウェアを使用してしまうのは危険ですので、ここでは疑似マルウェアファイルという物を利用します。
テスト手順
1. テスト用S3バケットの作成
S3コンソール開き「バケットを作成」を移動します。
今回はテスト用なので、特に設定を変更することなく、バケット名だけ入力して、「バケットを作成」を押して作成します。
2. GuardDuty Malware Protection for S3 の有効化
上記の2. S3のマルウェア対策の有効化で説明した手順に従って、テスト用S3バケットのマルウェア保護を有効にします。
3. 疑似マルウェアファイルの入手
今回はEICARテストファイルというマルウェア対策で一般的に利用されている疑似マルウェアファイルを使用します。
この手順はOSやセキュリティソフトによって手順が変わると思いますが、この説明ではOSがWindows、セキュリティはWindows標準のWindowsセキュリティを前提で進めていきます。
- まずは
テストファイルをダウンロードする準備として、ローカルマシンにフォルダを1つ任意の名前で作成します - 設定を開き、「プライバシーとセキュリティ」>「Windowsセキュリティ」>「ウィルスと脅威の防止」と選択します
- 「ウィルスと脅威の防止の設定」から「設定の管理」を開き、「リアルタイム保護」が無効になっている場合は、手順5までスキップしてください
- 一番下までスクロールし、「除外」の「除外の追加または削除」を選択します
- 「除外の追加」>「フォルダ」から手順1で作成したフォルダを選択し、スキャンの対象外に設定します
-
このリンクにアクセスすると、画像のような文字列が表示されるので、コピーしておきます
- 手順1で作成したフォルダの中に、txtファイルを作成し、手順6でコピーしたテキストを張り付けて保存します
- これが
疑似マルウェアファイルになり、Windows セキュリティのリアルタイム保護が有効になっている状態で検出除外対象のフォルダ以外にこのファイルを配置しても数十秒で削除されてしまいます
4. 疑似マルウェアファイルのアップロード
先ほど作成したテスト用のS3バケットに作成した疑似マルウェアファイルをアップロードします。
5. GuardDutyの調査結果を確認
適切に設定が完了していた場合、メールで以下のような内容が送信されるはずです。
{
"severity": 8,
"finding_id": "a9dcb2f1e6f4e078cf1b34ebf0e71c5d",
"finding_type": "Object:S3/MaliciousFile",
"region": "ap-northeast-1",
"description": "A malware scan on your S3 object arn:aws:s3:::{バケット名}/{疑似マルウェアファイル名} has detected a security risk EICAR-Test-File (not a virus)."
}
これで、S3にアップロードされたファイルがマルウェアスキャンされている事、マルウェアファイルがちゃんと検出されることが確認できました。
ex. GuardDutyのコンソールで調査結果を確認する
もし、GuardDutyですべての機能を有効化している場合、GuardDutyコンソールでも検査結果を確認する事ができます。
-
GuardDutyコンソールを開き、左ペインから「検出結果」を選択する - 「検出結果をフィルター」のバーで、「検出結果タイプ」を選択し「次と等しい」を選択し、「Object:S3/MaliciousFile」と入力する
- これでS3のマルウェア検出のみのGuardDutyの検索結果に絞り込めるので、必要に応じてさらにS3bakett
2. S3バケットポリシーの更新
S3バケットポリシーにGuardDutyがオブジェクトを読み取れるように許可を追加する必要があります。
具体的には、以下の様なポリシーをS3バケットポリシーに追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGuardDutyMalwareScan",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*" // スキャン対象のバケット名に置き換えてください
}
]
}
このポリシーにより、GuardDutyは指定されたS3バケット内のオブジェクトにアクセスし、マルウェアスキャンを実行することができます。
実際に検出をテストしてみる
GuardDuty Malware Protection for S3のテストを使用と思ったら、マルウェアを用意する必要がありますが、本物のマルウェアを使用してしまうのは危険ですので、ここでは疑似マルウェアファイルという物を利用します。
テスト手順
1. テスト用S3バケットの作成
S3コンソール開き「バケットを作成」を移動します。
今回はテスト用なので、特に設定を変更することなく、バケット名だけ入力して、「バケットを作成」を押して作成します。
2. GuardDuty Malware Protection for S3 の有効化
上記の2. S3のマルウェア対策の有効化で説明した手順に従って、テスト用S3バケットのマルウェア保護を有効にします。
3. 疑似マルウェアファイルの入手
今回はEICARテストファイルというマルウェア対策で一般的に利用されている疑似マルウェアファイルを使用します。
この手順はOSやセキュリティソフトによって手順が変わると思いますが、この説明ではOSがWindows、セキュリティはWindows標準のWindowsセキュリティを前提で進めていきます。
- まずは
テストファイルをダウンロードする準備として、ローカルマシンにフォルダを1つ任意の名前で作成します - 設定を開き、「プライバシーとセキュリティ」>「Windowsセキュリティ」>「ウィルスと脅威の防止」と選択します
- 「ウィルスと脅威の防止の設定」から「設定の管理」を開き、「リアルタイム保護」が無効になっている場合は、手順5までスキップしてください
- 一番下までスクロールし、「除外」の「除外の追加または削除」を選択します
- 「除外の追加」>「フォルダ」から手順1で作成したフォルダを選択し、スキャンの対象外に設定します
-
このリンクにアクセスすると、画像のような文字列が表示されるので、コピーしておきます
- 手順1で作成したフォルダの中に、txtファイルを作成し、手順6でコピーしたテキストを張り付けて保存します
- これが
疑似マルウェアファイルになり、Windows セキュリティのリアルタイム保護が有効になっている状態で検出除外対象のフォルダ以外にこのファイルを配置しても数十秒で削除されてしまいます
4. 疑似マルウェアファイルのアップロード
先ほど作成したテスト用のS3バケットに作成した疑似マルウェアファイルをアップロードします。
アップロードされたファイルはGuardDutyが自動的にスキャンしてタグ付けをしてくれています。

5. GuardDutyの調査結果を確認
適切に設定が完了していた場合、メールで以下のような内容が送信されるはずです。
{
"severity": 8,
"finding_id": "a9dcb2f1e6f4e078cf1b34ebf0e71c5d",
"finding_type": "Object:S3/MaliciousFile",
"region": "ap-northeast-1",
"description": "A malware scan on your S3 object arn:aws:s3:::{バケット名}/{疑似マルウェアファイル名} has detected a security risk EICAR-Test-File (not a virus)."
}
これで、S3にアップロードされたファイルがマルウェアスキャンされている事、マルウェアファイルがちゃんと検出されることが確認できました。
ex. GuardDutyのコンソールで調査結果を確認する
もし、GuardDutyですべての機能を有効化している場合、GuardDutyコンソールでも検査結果を確認する事ができます。
-
GuardDutyコンソールを開き、左ペインから「検出結果」を選択する - 「検出結果をフィルター」のバーで、「検出結果タイプ」を選択し「次と等しい」を選択し、「Object:S3/MaliciousFile」と入力する
- これでS3のマルウェア検出のみのGuardDutyの検索結果に絞り込めます。必要に応じてさらに「バケット名」などで絞り込むこともできます
- 検出結果が以下のように表示されれば問題なく検出ができているという事になります
- 任意で検出結果を選択すれば、さらに細かい情報を確認可能です
まとめ
この記事では、Amazon GuardDutyのマルウェア対策機能を使ってS3にアップロードされたファイルをスキャンする方法を紹介しました。
この記事では取り上げていませんが、GuardDutyのタグ付けを利用して、S3のアクセスコントロールでタグベースのブロック等を行うことでS3に存在するマルウェアが含まれるファイルへのアクセスを防ぐこともできますし、EventBrigeルールからLambdaをキックしたり、S3へのタグ付けをトリガーにLambdaを発火して該当するファイルを削除したり、別バケットに隔離したりもできます。
ただ、ここに書くとかなり長くなってしまうと思うので、機会があれば別の記事で取り上げたいと思います。
Gemini1.5 Pro With Deep Researchと記事を書いてみて
今回生成AIで作成した文章をベースにして初めて記事を書いたのですが、情報の精査、校正は必須ですが、かなり実用的ではあるのかな、と思いました。
はじめAIで記事を書くという事に対してアウトプットとしての意味があるのか、と疑問でしたが、いざやってみると、精査、校正には下手したら自分で書くよりもしっかりと確認する必要があったりするので、ここまで書き終える頃には今回書いた内容についてかなり詳しくなれました。
最後に実際に生成されたテキストを折りたたんで貼っておきます。(索引に表示されてしまうのでコードブロックにしてあります)
Gemini1.5 Pro With Deep Researchの出力
# S3にアップロードされたファイルをGuardDutyでマルウェアスキャンする方法
## はじめに
AWS S3にファイルをアップロードする際、セキュリティ対策は万全でしょうか?
近年、クラウドストレージの利用が増加するにつれて、S3バケットを標的としたマルウェア攻撃も増加傾向にあります。悪意のあるファイルがアップロードされると、機密データの漏洩やシステムの破壊など、深刻な被害をもたらす可能性があります。
そこで今回は、`Amazon GuardDuty` のマルウェア対策機能を使って、S3にアップロードされたファイルを自動的にスキャンし、セキュリティを強化する方法を紹介します。
## Amazon GuardDutyとは?
`Amazon GuardDuty`は、AWS環境を継続的に監視し、悪意のあるアクティビティや不正なアクティビティを検出する脅威検出サービスです。[1] 複雑な設定は不要で、AWS上で有効化するだけで利用できます。 `GuardDuty`は、**機械学習**で分析されたログから攻撃と思われる状況を検知します。
GuardDutyは、以下のような脅威を検知できます。[2]
- **偵察**: 異常なAPIアクティビティやポートスキャンなど、攻撃者による偵察を示唆するアクティビティ。
- **インスタンスの侵害**: 暗号通貨マイニングやマルウェアなど、インスタンスの侵害を示すアクティビティ。
- **アカウントの侵害**: 異常な場所からのAPI呼び出しや`CloudTrail`ログの無効化の試みなど、アカウントの侵害を示す一般的なパターン。
- **バケットの侵害**: 資格情報の悪用を示す疑わしいデータアクセスパターンや、不正なIPアドレスからの`Amazon S3`アクセスなど、バケットの侵害を示すアクティビティ。
- **マルウェア**: トロイの木馬、ワーム、暗号マイナー、ルートキット、ボットなど、`Amazon EC2`インスタンスやコンテナワークロードを侵害するために使用される可能性のある、または`Amazon S3`バケットにアップロードされるマルウェアの存在。
- **コンテナの侵害**: `Amazon EKS`監査ログと`Amazon EKS`または`Amazon ECS`のコンテナランタイムアクティビティを分析することにより、コンテナワークロードで発生する可能性のある悪意のあるまたは疑わしい動作を特定するアクティビティ。
## GuardDuty Malware Protection for S3とは?
GuardDuty Malware Protection for S3は、S3バケットにアップロードされたオブジェクトを対象に、マルウェアのスキャンを実行する機能です。[3] この機能は、`GuardDuty`サービスの一部として提供されており、S3にアップロードされたファイルを**リアルタイム**でスキャンし、マルウェアの脅威から保護します。
## S3のマルウェア対策を有効にする手順
それでは、具体的な手順を見ていきましょう。
### 1. GuardDutyの有効化
まずは、`GuardDuty`を有効化する必要があります。
`AWSマネジメントコンソール`にサインインし、GuardDutyのページに移動します。[4] GuardDutyが有効になっていない場合は、有効化してください。
### 2. S3のマルウェア対策の有効化
次に、S3のマルウェア対策を有効化します。
1. GuardDutyコンソールで、「設定」>「S3のマルウェア対策」に移動します。
2. 「S3のマルウェア対策を有効にする」を選択します。
3. スキャン対象のS3バケットを選択し、必要に応じてプレフィックスなどの条件を追加します。
4. `GuardDuty`がS3オブジェクトをスキャンするために必要なアクションを実行できるように、IAMロールと信頼ポリシーを追加します。適切な構成を作成または選択します。
- IAMロールを作成する場合は、以下の手順を実行します。
1. `IAM`コンソールで、「ロール」>「ロールの作成」に移動します。
2. 「信頼されたエンティティの種類」で「AWSサービス」を選択し、「ユースケースを選択」で「GuardDuty」を選択します。
3. 「アクセス許可」で、「ポリシーをアタッチ」をクリックし、「`AmazonS3FullAccess`」ポリシーをアタッチします。
4. ロールの名前と説明を入力し、「ロールの作成」をクリックします。
- 信頼ポリシーを作成する場合は、以下の手順を実行します。
1. `IAM`コンソールで、「ポリシー」>「ポリシーの作成」に移動します。
2. 「JSON」タブを選択し、以下のポリシードキュメントを貼り付けます。
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGuardDutyToScanS3",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*" // スキャン対象のバケット名に置き換えてください
}
]
}
```
3. ポリシーの名前と説明を入力し、「ポリシーの作成」をクリックします。
4. 作成したポリシーを、手順2-3で作成したIAMロールにアタッチします。
5. 「有効にする」を選択すると、`GuardDuty`がS3バケットに新しくアップロードされたオブジェクトのマルウェアスキャンを開始します。
### 3. マルウェア検出時の通知設定 (オプション)
マルウェアが検出されたときに通知を受け取りたい場合は、`Amazon EventBridge` と `Amazon SNS` を使って通知を設定できます。
#### 3-1. Amazon SNS トピックの作成
`Amazon SNS` で通知を送信するためのトピックを作成します。
1. `Amazon SNS` コンソールにサインインし、「トピック」>「トピックの作成」に移動します。
2. 「トピックの種類」で「標準」を選択します。
3. トピック名と表示名を入力します。
4. 「トピックの作成」をクリックします。
#### 3-2. EventBridgeルールの作成
S3バケットに新しいオブジェクトがアップロードされたときに、`EventBridge`でイベントをトリガーするルールを作成します。
1. `EventBridge`コンソールで、「ルール」>「ルールの作成」に移動します。
2. ルール名と説明を入力します。
3. 「イベントバス」で「デフォルト」を選択します。
4. 「ルールタイプ」で「イベントパターンを持つルール」を選択します。
5. 「次へ」をクリックします。
6. 「イベントソース」で「AWSイベント」を選択します。
7. 「イベントパターン」で「イベントパターンフォーム」を選択します。
8. 「イベントソース」で「AWSサービス」を選択します。
9. 「AWSサービス」で「S3」を選択します。
10. 「イベントタイプ」で「オブジェクト作成イベント」を選択します。
11. 「特定の操作」で「すべてのオブジェクト作成イベント」を選択します。
12. 「バケット名」で、スキャン対象のバケット名を入力します。
13. 「次へ」をクリックします。
14. 「ターゲットタイプ」で「AWSサービス」を選択します。
15. 「ターゲットの選択」で「`SNS`トピック」を選択し、「トピック」で**3-1で作成した**通知を送信するための`SNS`トピックを選択します。
16. 「追加設定」で「入力トランスフォーマー」を選択し、「入力トランスフォーマーの設定」をクリックします。
17. 「ターゲット入力トランスフォーマー」で、「入力パス」に以下のコードを貼り付けます。
```json
{
"bucket_name": "$.detail.bucket.name",
"object_key": "$.detail.object.key",
"event_time": "$.time"
}
```
18. 「確認」をクリックします。
19. 「次へ」をクリックします。
20. (オプション) ルールにタグを追加します。
21. 「次へ」をクリックします。
22. ルールの詳細を確認し、「ルールの作成」をクリックします。
#### 3-3. GuardDutyの調査結果をSNSに送信するEventBridgeルールの作成
`GuardDuty`がマルウェアを検出したときに、`EventBridge`でイベントをトリガーするルールを作成します。
1. `EventBridge`コンソールで、「ルール」>「ルールの作成」に移動します。
2. ルール名と説明を入力します。
3. 「イベントバス」で「デフォルト」を選択します。
4. 「ルールタイプ」で「イベントパターンを持つルール」を選択します。
5. 「次へ」をクリックします。
6. 「イベントソース」で「AWSイベント」を選択します。
7. 「イベントパターン」で「イベントパターンフォーム」を選択します。
8. 「イベントソース」で「AWSサービス」を選択します。
9. 「AWSサービス」で「`GuardDuty`」を選択します。
10. 「イベントタイプ」で「`GuardDuty Finding`」を選択します。
11. 「次へ」をクリックします。
12. 「ターゲットタイプ」で「AWSサービス」を選択します。
13. 「ターゲットの選択」で「`SNS`トピック」を選択し、「トピック」で**3-1で作成した**通知を送信するための`SNS`トピックを選択します。
14. 「追加設定」で「入力トランスフォーマー」を選択し、「入力トランスフォーマーの設定」をクリックします。
15. 「ターゲット入力トランスフォーマー」で、「入力パス」に以下のコードを貼り付けます。
```json
{
"severity": "$.detail.severity",
"finding_id": "$.detail.id",
"finding_type": "$.detail.type",
"region": "$.region",
"description": "$.detail.description"
}
```
16. 「確認」をクリックします。
17. 「次へ」をクリックします。
18. (オプション) ルールにタグを追加します。
19. 「次へ」をクリックします。
20. ルールの詳細を確認し、「ルールの作成」をクリックします。
#### 3-4. SNSトピックにEメールサブスクリプションを追加 (オプション)
`SNS`トピックにEメールサブスクリプションを追加することで、マルウェア検出時にメールで通知を受け取ることができます。
1. `SNS`コンソールで、**3-1で作成した**通知を送信するための`SNS`トピックを選択します。
2. 「サブスクリプション」>「サブスクリプションの作成」に移動します。
3. 「プロトコル」で「Eメール」を選択します。
4. 「エンドポイント」で、通知を受け取るメールアドレスを入力します。
5. 「サブスクリプションの作成」をクリックします。
6. サブスクリプション確認メールが届くので、メール内のリンクをクリックしてサブスクリプションを確定します。
## S3バケットがKMSで暗号化されている場合
S3バケットが`AWS KMS`で暗号化されている場合は、`GuardDuty`でマルウェアスキャンを実行するために、以下の追加手順が必要になります。
1. **IAMロールにKMSキーへのアクセス権限を付与**
`GuardDuty`が`KMS`で暗号化されたS3オブジェクトをスキャンするには、`IAM`ロールに`KMS`キーを使用するためのアクセス許可を付与する必要があります。
具体的には、以下の様なポリシーを`IAM`ロールにアタッチします。
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGuardDutyToDecryptObjects",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "arn:aws:kms:your-region:your-account-id:key/your-kms-key-id" // KMSキーのARNに置き換えてください
}
]
}
```
このポリシーにより、`GuardDuty`は指定された`KMS`キーを使用してS3オブジェクトを復号化し、マルウェアスキャンを実行することができます。
2. **S3バケットポリシーの更新**
S3バケットポリシーに`GuardDuty`がオブジェクトを読み取れるように許可を追加する必要があります。
具体的には、以下の様なポリシーをS3バケットポリシーに追加します。
```json
{
"Sid": "AllowGuardDutyToAccessObjects",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*" // スキャン対象のバケット名に置き換えてください
}
```
このポリシーにより、`GuardDuty`は指定されたS3バケット内のオブジェクトにアクセスし、マルウェアスキャンを実行することができます。
## まとめ
この記事では、`Amazon GuardDuty`のマルウェア対策機能を使ってS3にアップロードされたファイルをスキャンする方法を紹介しました。
GuardDuty Malware Protection for S3を有効にすることで、S3バケットにアップロードされるファイルのセキュリティを強化し、悪意のあるファイルの侵入を未然に防ぐことができます。
## 参考文献
- [3] Amazon GuardDuty Malware Protection for S3
- [5] Amazon GuardDuty Malware Protection for S3
- [6, 7] GuardDuty Malware Protection for S3 の料金
- [8] GuardDuty Malware Protection for S3
- [1] Amazon GuardDuty(マネージド型脅威検出サービス) - AWS
- [4] Amazon GuardDutyのセットアップ
- Amazon GuardDuty Malware Protection for S3を有効にする
- KMS encryption for S3 buckets: Data security best practices
- Amazon GuardDuty for beginners | WAFCharm
- [2] Amazon GuardDuty FAQ
- AWS Malware Protection for S3
- AWS Malware Protection for S3



