Cloud One File Storage Securityの正常もしくは異常の検出結果を、EventBridge経由でメール通知する
はじめに
本記事では、Cloud One File Storage Security(以降C1FSS)での検出結果を、Amazon EventBridge経由でメール通知する方法を紹介します。
C1FSSの導入と、正常ファイルと異常ファイルを別のS3バケットに隔離する仕組みは、AWS CloudFormationテンプレートとAWS Serverless Application Repository(SAM)が用意されているため、容易に構築できます。
ファイルがスキャンされると、スキャン用S3バケット内のオブジェクトのタグに検出結果(正常または異常)が記録されます。その後、AWS Lambda関数が検出結果に基づいて、ファイルを適切なS3バケットに移動させます。
詳細な処理の流れは、以下のドキュメントにまとめられています。
本記事では、上記の構成に加えて、検出結果(正常または異常)をEventBridgeルール経由でメール通知する仕組みを手動で導入する方法を説明します。
構成は以下の通りです。スキャン用S3バケットでのスキャン後、検出結果に応じて正常用または異常用S3バケットにファイルが移動されると、EventBridgeルールがトリガーとなってメールで通知を行います。
S3バケットがスキャン用のみの場合
なお、検出結果に関わらずファイルをスキャン用S3バケットに保管したままの場合、正常なファイルのみを通知するといった選択的な通知はできません。
これは、検出結果がオブジェクトのタグに出力されるものの、S3イベント通知のイベントにはタグの内容が含まれないためです。この制限は、Amazon EventBridgeだけでなく、Amazon SNS、Amazon SQS、AWS Lambdaに送信されるS3イベント通知にも適用されます。
ただし、タグによる判別を行わず、検出結果(正常または異常)に関わらず通知を行うことは可能です。
前提条件
- 以下のS3バケットを作成済みであること
- スキャン用S3バケット
- 正常ファイル用S3バケット
- 異常ファイル用S3バケット
- 正常ファイル用および異常ファイル用のS3バケットは、Amazon EventBridgeに通知を送信する設定がされていること
- 以下の記事に従って、C1FSSを導入し、異常ファイルを別のS3バケットに隔離する仕組みをデプロイ済みであること
- https://dev.classmethod.jp/articles/trend-micro-cloud-one-sppo/
- https://dev.classmethod.jp/articles/c1fss-setup/
- https://dev.classmethod.jp/articles/c1fss-isolation-action/
- 3の記事で使用するSAMのパラメータは以下の通りです
- 以下の記事に従って、通知用のAmazon SNSトピックを作成済みであること
EventBridgeルールを作成
正常ファイルと異常ファイルの通知用に、それぞれAmazon EventBridgeルールを作成します。
正常通知用ルール
正常通知用ルールのイベントパターンは以下の通りです。正常ファイル用S3バケット名を指定してください。
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["cm-hirai-c1fss-normal"]
}
}
}
ターゲットはAmazon SNSトピックを設定します。
デフォルトの通知内容は分かりにくいため、以下の入力パスとテンプレートを使用して通知内容を整形します。
{
"awsRegion": "$.region",
"bucketName": "$.detail.bucket.name",
"eventName": "$.detail-type",
"eventTime": "$.time",
"objectKey": "$.detail.object.key"
}
"ファイルが正常ファイルと判定されました。"
"イベント名 : <eventName>"
"発生時間 : <eventTime>"
"リージョン名 : <awsRegion>"
"バケット名 : <bucketName>"
"オブジェクトキー名 : <objectKey>"
本設定でトリガーとして使用するイベント名「Object Created」のサンプルイベントは以下の通りです。
{
"version": "0",
"id": "17793124-05d4-b198-2fde-7ededc63b103",
"detail-type": "Object Created",
"source": "aws.s3",
"account": "123456789012",
"time": "2021-11-12T00:00:00Z",
"region": "ca-central-1",
"resources": ["arn:aws:s3:::example-bucket"],
"detail": {
"version": "0",
"bucket": {
"name": "example-bucket"
},
"object": {
"key": "example-key",
"size": 5,
"etag": "b1946ac92492d2347c6235b4d2611184",
"version-id": "IYV3p45BT0ac8hjHg1houSdS1a.Mro8e",
"sequencer": "00617F08299329D189"
},
"request-id": "N4N7GDK58NMKJ12R",
"requester": "123456789012",
"source-ip-address": "1.2.3.4",
"reason": "PutObject"
}
}
なお、これらの設定はAWS CloudFormationテンプレートとしてエクスポートすることも可能です。
異常通知用ルール
異常通知用ルールは、正常通知用ルールと比較して以下の点のみが異なります。他は同じ設定でルールを作成します。
- ルール名
- イベントパターン
- 異常ファイル用S3バケット名を指定
- 入力テンプレート
- 異常ファイル検出用のメッセージに変更
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["cm-hirai-c1fss-quarantine"]
}
}
}
"ファイルが異常ファイルと判定されました。"
"イベント名 : <eventName>"
"発生時間 : <eventTime>"
"リージョン名 : <awsRegion>"
"バケット名 : <bucketName>"
"オブジェクトキー名 : <objectKey>"
ファイルアップロードしてみる
正常なファイル
スキャン用S3バケットに任意の正常ファイルをアップロードします。
ファイルアップロード後、数秒以内にメール通知が届きました。
異常なファイル
EICARテストファイル(ウイルススキャンのテスト用ファイル)をAWS CloudShellを使用してスキャン用S3バケットにアップロードします。
$ curl -O https://secure.eicar.org/eicar.com
$ aws s3 cp eicar.com s3://cm-hirai-c1fss
アップロード後、以下の内容でメール通知が届きました。
代替通知方法や拡張可能性
以下の構成の通り、Amazon EventBridgeルールを使用せず、S3から直接Amazon SNSで通知することも可能です。
しかし、以下の画像のように、通知内容がJSON形式となり分かりにくいため、本記事ではAmazon EventBridgeルールを利用して通知内容を整形しています。
本記事ではメール通知を例に説明しましたが、スキャン後に以下のような処理を行いたい場合は、Amazon EventBridgeを使用せずにイベント通知で直接設定することが可能です。
- Amazon SQS経由でAmazon EC2インスタンスによる処理
- AWS Lambda関数による直接処理
- Amazon SNS経由でAWS Step Functionsによる処理
参考