【Amazon EventBridge】Input Transformer でメール通知をわかりやすく整形する方法
はじめに
こんにちは、フニです。
本記事では、Amazon EventBridge の Input Transfomer 機能を活用して、メール通知をわかりやすく整形する方法について紹介します。
どう変わるの?
適用前
メール整形を実施していない場合、わかりづらい内容の通知が届きます。

適用後
Input Transformer 機能を導入することで、メール本文を整形でき、わかりやすい通知を受け取れるようになります。

やってみた
前提条件
上記ブログを基準として、Amazon EventBridge で通知設定が完了していることを前提とします。
1. 作成した EventBridge を編集する
AWS コンソール画面にログイン後、Amazon EventBridge コンソール画面に移動します。

左のルールタブから作成しておいた EventBridge ルールに移動し、編集を押下します。


2. ターゲットの入力変換を有効化する
画像を参考に、ターゲットの入力変換を有効化します。

3. 入力トランスフォーマー(Input Transformer)を設定する
画像と以下内容を参考に設定を適用します。

①サンプルトリガーイベント
以下のように、イベントが発生した時のサンプル json を提供しています。
今回はルートユーザーログイン検知のため AWS Console Sign In via CloudTrail を利用します。
{
"version": "0",
"id": "6f87d04b-9f74-4f04-a780-7acf4b0a9b38",
"detail-type": "AWS Console Sign In via CloudTrail",
"source": "aws.signin",
"account": "123456789012",
"time": "2016-01-05T18:21:27Z",
"region": "us-east-1",
"resources": [],
"detail": {
"eventVersion": "1.02",
"userIdentity": {
"type": "Root",
"principalId": "123456789012",
"arn": "arn:aws:iam::123456789012:root",
"accountId": "123456789012"
},
"eventTime": "2016-01-05T18:21:27Z",
"eventSource": "signin.amazonaws.com",
"eventName": "ConsoleLogin",
"awsRegion": "us-east-1",
"sourceIPAddress": "0.0.0.0",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36",
"requestParameters": null,
"responseElements": {
"ConsoleLogin": "Success"
},
"additionalEventData": {
"LoginTo": "https://console.aws.amazon.com/console/home?state=hashArgs%23&isauthcode=true",
"MobileVersion": "No",
"MFAUsed": "No"
},
"eventID": "324731c0-64b3-4421-b552-dfc3c27df4f6",
"eventType": "AwsConsoleSignIn"
}
}
②入力パス
イベント発生時の json から活用が必要なデータを変数として保存します。
今回は以下4つの変数を保存しました。
{
"accountId": "$.detail.userIdentity.accountId",
"eventTime": "$.detail.eventTime",
"ipAddress": "$.detail.sourceIPAddress",
"result": "$.detail.responseElements.ConsoleLogin"
}
③テンプレート
メール通知の本文の整形を定義します。②入力パスで定義した変数を活用できます。
注意点として、各行を "" で囲む必要があります。
"AWS ルートユーザーログインを検知しました。(結果:<result>)"
"[発生日時]:<eventTime> (UTC)"
"[AccountID]:<accountId>"
"[対象IP]:<ipAddress>"
"心当たりがない場合は、即時確認を行ってください。"
④出力
①サンプルトリガーイベントのイベントが発生した際に、③テンプレートで定義した内容による予想結果です。
今回の設定では、以下のような形でメール通知が飛んでくることが事前に確認できます。
"AWS ルートユーザーログインを検知しました。(結果:Success)"
"[発生日時]:2016-01-05T18:21:27Z (UTC)"
"[AccountID]:123456789012"
"[対象IP]:0.0.0.0"
"心当たりがない場合は、即時確認を行ってください。"
実際、ルートユーザログインを試した際に以下のような通知が届いていたら完了です。

メール整形の制約
Input Transformer でのメール整形には、以下のような制約があります。
- ① SNS トピックでメール通知を実施している場合、メールタイトルの変更はできません。つまり、
AWS Notification Messageというタイトルが固定されます。 - ② 一方で、SNS トピック名からメールが届くようになっていて、AWSAccountID のようなユニークな値で登録すると把握はできるかと思います。
- ③ 本文の内容には、各行に
""がそのまま出力されます。

このような制約が許容できない場合は、AWS Lambda のようなソリューションを検討してください。
さいごに
今回は、Amazon EventBridge の Input Transfomer 機能を活用して、メール通知をわかりやすく整形する方法について紹介しました。
メール整形をしないと json 原文でメールが届くため、内容がわかりづらいですが、Input Transformer を活用すると、簡単にメール通知本文を整形できます。
一部制約はありますが、許容範囲であれば追加でリソースやコード管理も不要となる方法ですので検討できるかと思います。
この記事が、誰かの助けになれば幸いです。
参考









