CloudOne File Storage Securityで正常/異常ファイルを区別して別のS3バケットに振り分ける処理をプラグインを利用して工数をかけず実装してみた

2023.03.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コンサル部@大阪オフィスのTodaです。

CloudOne File Storage Security(C1FSS)では対象のS3バケットにファイルがアップされたタイミングでスキャンをおこない、結果をタグに記録します。
今回は、スキャン結果に合わせて正常用/異常用のS3バケットに振り分けする仕組みをC1FSSのプラグインを利用して実装とメール通知を追加してみます。 C1FSSの導入や処理については過去記事をご確認ください。

処理について

処理について

今回はトレンドマイクロ社の方で公開されているC1FSS用のプラグイン(Lambda)を利用してみます。

■ aws-python-promote-or-quarantine - trendmicro github
https://github.com/trendmicro/cloudone-filestorage-plugins/tree/master/post-scan-actions/aws-python-promote-or-quarantine

前提条件

  • AWS環境にはC1FSSがセットアップされた状態からプラグインの導入をおこないます。
  • バケットは下記3点を準備します
    • xxxx-c1fss-upload (アップロード用)
    • xxxx-c1fss-promote (正常ファイル保管用)
    • xxxx-c1fss-quarantine (異常ファイル保管用)
    • ※名称は仮になります

C1FSSのセットアップが未対応の場合は、下記記事をご確認いただきの導入をお試しください。

導入をしてみる

AWSマネージメントコンソールへのログイン

スキャン対象のS3が管理されているアカウントにログインをおこないます。

CloudFormationにて必要情報取得

CloudFormationの画面にて必要な情報を取得します。
C1FSS導入時に作成されている「Storage-TM-FileStorageSecurity」または「All-in-one-TM-FileStorageSecurity-StorageStack-XXXX」を選択して出力タブを表示します。
出力内にて「ScanningBucket」に表示されるS3バケットがスキャン対象である事を確認後、「ScanResultTopicARN」の値を取得します。

プラグインの導入

トレンドマイクロ社の方で公開されているプラグインをAWS環境に導入します。
下記リンクをクリックして「cloudone-filestorage-plugin-action-promote-or-quarantine」のデプロイ画面に移動します。

■ デプロイ用のリンク (AWSマネージメントコンソールに移動します)
cloudone-filestorage-plugin-action-promote-or-quarantine

デプロイ画面では提供者、ソースコードURLの情報が表示されますので導入前にご確認ください。
ご確認後は、アプリケーションの設定にて必要なパラメータ情報を入力します。
下記項目を入力していきます。

  • ScanningBucketName: アップロード用S3バケット名
  • PromoteBucketName: 正常ファイル保管用S3バケット名 ※Optional
  • QuarantineBucketName: 異常ファイル保管用S3バケット名 ※Optional
  • ScanResultTopicARN: CloudFormationで取得したARNの値

その他「Optional」と表記されている設定には、任意設定になります。
正常ファイル保管用S3バケット名を入力しない場合は、正常ファイルはアップロード用S3バケットに残すなど対応ができます。

設定後は画面下のIAMロール作成の承諾をおこない、「デプロイ」をクリックします。
デプロイの進捗はLambda画面の[アプリケーション]にて確認が可能です。

プラグインの導入1

ステータスが「Create complete」になることでS3バケットにファイルアップをする事で 正常用/異常用のS3バケットに振り分けする仕組みの実装が完了になります。

SNSを利用したメール通知

ファイルのスキャン結果をSNSを利用してメール通知いたします。
今回はメール通知としていますが、SNSからサブスクライブを設定する事でLambda処理を追加で呼び出したりすることも可能です。
ファイル一覧をデータベースで管理されている場合は、状態を記録する用途にも利用出来そうです。

上記、「CloudFormationにて必要情報取得」で記録した「ScanResultTopicARN」の値から対象のSNSを判断します。
SNSで対象トピックを選択してサブスクリプション一覧から[サブスクリプションの作成]をクリックします。

プラグインの導入2

プロトコルをメールに設定して、エンドポイントに送信先のメールアドレスを指定します。
設定後は画面下の[サブスクリプションの作成]をクリックします。

プラグインの導入3

設定後は受信を承認するためのメールが通知されます。
メール内のリンクをクリックして承認を完了してください。

プラグインの導入4

上記で設定作業は完了になります。

試してみる

アップロード用S3バケットにファイルをアップします。
C1FSSはシステムやSFTP、AWSマネージメントコンソールでアップされたファイル全てがスキャンの対象になります。
今回はAWS CloudShellを利用して対応をしてみます。

正常なファイル

正常なファイルをS3バケットにアップをおこないます。

$ vi sample.txt
-- 記載内容 --
sample
-------------

$ aws s3 cp sample.txt s3://xxxx-c1fss-upload/
upload: ./sample.txt to s3://xxxx-c1fss-upload/sample.txt

S3バケットを確認すると正常ファイル保管用S3バケットに移動がおこなわれている事とSNSでスキャン結果が通知されていることを確認できました。

正常なファイル

メール通知内容
{
	"timestamp": xxxxx, 
	"sqs_message_id": "xxxx", 
	"xamz_request_id": "xxxx", 
	"bucket": "xxxx-c1fss-upload", 
	"file_name": "sample.txt", 
	"file_attributes": {
		"etag": "xxxxxxx"
	}, 
	"file_url": "https://xxxxx-c1fss-upload.s3.xxxx.amazonaws.com/sample.txt", 
	"scan_start_timestamp": xxxxx, 
	"scanner_status": 0, 
	"scanner_status_message": "successful scan", 
	"scanning_result": {
		"TotalBytesOfFile": 6, 
		"Findings": [], ※異常がない場合は当項目は空白になります。
		"Error": "", 
		"Codes": []
	}
}

異常なファイル

異常なファイル(Eicar)をS3バケットにアップをおこないます。

$ vi eicar.txt
-- 記載内容 --
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
-------------

$ aws s3 cp eicar.txt s3://xxxx-c1fss-upload/
upload: ./eicar.txt to s3://xxxx-c1fss-upload/sample.txt

S3バケットを確認すると正常ファイル保管用S3バケットに移動がおこなわれている事とSNSでスキャン結果が通知されていることを確認できました。

異常なファイル

メール通知内容
{
	"timestamp": xxxxx, 
	"sqs_message_id": "xxxx", 
	"xamz_request_id": "xxxx", 
	"bucket": "xxxx-c1fss-upload", 
	"file_name": "eicar.txt", 
	"file_attributes": {
		"etag": "xxxxxxx"
	}, 
	"file_url": "https://xxxxx-c1fss-upload.s3.xxxx.amazonaws.com/eicar.txt", 
	"scan_start_timestamp": xxxxx, 
	"scanner_status": 0, 
	"scanner_status_message": "successful scan", 
	"scanning_result": {
		"TotalBytesOfFile": 69, 
		"Findings": [{ ※異常がある場合は当項目に内容が出力されます。
			"malware": "Eicar_test_file", 
			"type": "Virus"
		}],
		"Error": "", 
		"Codes": []
	}
}

さいごに

今回はC1FSSでスキャン結果に合わせて正常用/異常用のS3バケットに振り分けする仕組みをプラグインを利用して実装とメール通知を追加してみました。
少しでもお客様の作りたい物の参考になればと考えております。