AWS ルートユーザーのログインをSlackに通知してみた
はじめに
AWS ルートユーザーのログインはセキュリティ上、最も警戒すべきイベントの一つです。
というわけで、マルチアカウント環境においてルートユーザーのログインを検知し、Slack に通知する仕組みを構築してみました。
構築手順
構成は以下の通りです。
通知機構をアカウント毎に作りたくなかったので、
通知を1つのアカウントに集約する形をとっています。

1. 集約先アカウントで通知機構を作る
先に、集約先アカウントで外部からのイベントを受け取りSlackに通知する機構を作ります。
SNS -> Amazon Q Developer in chat applications -> Slack通知の構築手順を書いた記事は世にいっぱい書いてあるので、今回は省略します。
1. EventBridge カスタムイベントバスを作成する
任意の名前のカスタムイベントバスを作成します。
名前以外の設定はデフォルトでOKです。
2. EventBridge ルールを作成する
外部からのイベントを受け取ってSNSにデータを流すルールを作成します。
1で作ったカスタムイベントバスに紐づく形にするために、イベントバスは1で作ったカスタムイベントバスを選択します。

トリガーイベントは「AWS Console Sign in via CloudTrail」を選択します。
ターゲットは「SNS トピック」を選択します。
- ターゲットの場所:このアカウントのターゲット
- トピック:Slackに通知するSNSトピック名
- 許可 実行ロールを使用:True
- 実行ロール:この特定のリソースのために新しいロールを作成
上記設定が終わったら任意の名前をつけて作成ボタンを押します。
おまけ
Slackに通知する内容をカスタマイズしたい場合は、ターゲットの「入力変換」を使います。
例として、入力トランスフォーマーを選択し、下記を入力すると、こんな感じの通知が届きます。

{
"MFAUsed": "$.detail.additionalEventData.MFAUsed",
"account": "$.account",
"login_result": "$.detail.responseElements.ConsoleLogin",
"sourceIPAddress": "$.detail.sourceIPAddress",
"time": "$.time"
}
{
"version": "1.0",
"source": "custom",
"content": {
"title": "Rootログインを検知しました",
"description": "@security \nAccount: <account>\nIP: <sourceIPAddress>\nMFA: <MFAUsed>\nResult: <login_result>\nTime: <time>"
},
"time": "<time>"
}
2. ルートユーザーのログインを検知してイベントを投げる
次に、ルートユーザーのログインをEvent Bridgeを使って検知し、集約先アカウントにイベントを投げるところを作ります。
1. リージョンを us-east-1 に切り替える
2. EventBridge ルールを作成する
トリガーイベントは「AWS Console Sign in via CloudTrail」を選択します。
今回は、ログインの中でもルートユーザーのログインを検知したいので、イベントパターン (フィルター) を下記に書き換えます。
{
"source": ["aws.signin"],
"detail-type": ["AWS Console Sign In via CloudTrail"],
"detail": {
"userIdentity": {
"type": ["Root"]
}
}
}
ターゲットは「EventBridge イベントバス」を選択します。
- ターゲットの場所:別の AWS アカウントのターゲット
- イベントバスの ARN:手順1-1で作成した集約先アカウントにあるカスタムイベントバスの ARN を指定
- 実行ロール:この特定のリソースのために新しいロールを作成
上記設定が終わったら任意の名前をつけて作成ボタンを押します。
3. テストしてみる
手順2の設定を行ったAWSアカウントのルートユーザーでログインを試してみます。
しばらくすると、Slackに通知が送信されてきます。
さいごに
今回、一見シンプルに見える「ログイン通知」でも、リージョン制約やイベントソースの仕様、Amazon Q 特有のスキーマなど「ハマりどころ」が多くありました。
マルチアカウント運用において「集約」は運用の負荷を下げる重要な鍵です。
本記事の内容が誰かの助けになれば幸いです。
Discussion