この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
Amazon GuardDuty はAmazon CloudWatch Eventsに基づいて通知を送信します。
ClodWatch EventsでLambdaを起動し、SNSにpublishしてみました。
SNSトピックの作成
東京リージョンに"sns-test"トピックを作成します。
サブスクリプションには、メールアドレスを登録しました。
Lambda関数の作成
ランタイムはPython 3.6を利用します。
eventデータをそのままsns-testトピックにpublishします。
関数名はGuardDutytoSNSとしました。
import json
import boto3
def lambda_handler(event, context):
client = boto3.client('sns')
response = client.publish(
TopicArn='arn:aws:sns:ap-northeast-1:Account-ID:sns-test',
Message=json.dumps({'default': json.dumps(event)}),
MessageStructure='json',
Subject='guardduty'
)
LambdaのIAMロールには、AWSLambdaExecuteポリシー、AmazonSNSFullAccessポリシーを設定しました。
CloudWatch Eventsルールの作成
CloudWatchイベントルールを作成します。
ソースにguarddutyを指定します。
$ aws events put-rule --name GuardDuty-Publisher --event-pattern '{"source":["aws.guardduty"]}'
イベントルールとラムダ関数を関連づけます。
$ aws events put-targets --rule GuardDuty-Publisher --targets Id=1,Arn=arn:aws:lambda:ap-northeast-1:Account-ID:function:GuardDutytoSNS
ターゲットを呼び出す上で必要なアクセス許可を追加します。
$ aws lambda add-permission --function-name GuardDutytoSNS --statement-id 1 --action 'lambda:InvokeFunction' --principal events.amazonaws.com
通知の確認
GuardDutyコンソール>全般>結果サンプルの生成 を選択します。
以下のようにJSON形式で、SNSに設定したメールアドレスに通知されました。
おわりに
Amazon GuardDuty はAmazon CloudWatch Eventsに基づいて通知を送信します。
ClodWatch EventsでLambdaを起動し、Amazon SNSにpublishしてみました。
今回はメール通知を行いましたが、SNSに対応するサードパーティと連携すればより便利かもしれません。