AWSマネジメントコンソールのサインインをメールで通知する方法
はじめに
セキュリティのために、AWS のマネジメントコンソールにサインインしたユーザの通知を受け取りたい状況があると思います。以前のブログでも、CloudWatch Events を利用してメールで通知を受ける方法が紹介されておりますが、今回は CloudWatch Events から派生して独立したサービスである EventBridge を利用してサインイン通知を実現する方法を紹介します。
このようなサインイン通知メールを受信することができるようになります。
通知設定
マネジメントコンソールへのサインイン通知に必要なサービスは次の 2 つです。EventBridge は CloudWatch Events から派生して独立したサービスとなります。
- Amazon SNS
- Amazon EventBridge
はじめに、リージョンを「バージニア北部」に変更します。IAM はグローバルサービスであるため、バージニア北部でイベントが発生するためです。
サインインイベントは全てのリージョンで発生する可能性があります。 そのため、以降の内容をすべてのリージョンに対して設定する必要があります。
また、2023 年 10 月時点では、AWS User Notifications サービスを用いることで比較的簡単にサインイン通知ができるようになっています。
サインインイベントが発生するリージョンについて社内から指摘を受け、修正させていただきました
SNS の設定
SNS のトピックを作成します。「トピックの作成」から実施します。
最低限の設定として、タイプは「スタンダード」を選択、任意の「名前」「表示名」を入力し、「トピックの作成」を行います。
次に、作成したトピックに紐付けるサブスクリプションを作成します。「サブスクリプションの作成」から実施します。
トピック ARN は先ほど作成したトピックを選択し、プロトコルは「E メール」を選択、エンドポイントとして通知先となるメールアドレスを入力します。その後、「サブスクリプションの作成」を行います。
なお、プロトコルは他に SMS 等にも対応しているため、お好みに合わせて選択していただければと思います。
サブスクリプションの設定が完了したあとに、通知先メールアドレスに対して、確認のメールが届きます。
「Confirm subscription」をクリックして、下記の画面がブラウザ上に表示されれば確認完了です。
以上で、SNS の設定は完了です。
EventBridge の設定
いよいよ EventBridge の設定となります。
サインインを通知するルールを「ルールを作成」から作成します。
イベントパターンとして、マネジメントコンソールへのサインインイベントを登録します。「カスタムパターン」を選択して「編集」から下記のイベントパターンを入力します。
{ "detail-type": [ "AWS Console Sign In via CloudTrail" ] }
イベントバスはデフォルトで問題ありません。ターゲットとして先ほど作成した SNS トピックを選択して「作成」します。
以上で、設定は完了です。
再度サインインし直してみると下記のメール本文が届きます。
とても見づらいので、少し工夫します。
ルールの編集から「ターゲットを選択」画面に戻って「入力の設定」を変更します。
「入力トランスフォーマー」を選択して、下記の値を入力することで、通知する情報を加工することができます。入力パスに入力テンプレートで代入する要素を指定し、入力テンプレートで通知する文字列を組み立てます。
{ "date":"$.detail.eventTime", "account":"$.detail.userIdentity.accountId", "type":"$.detail.userIdentity.type", "user":"$.detail.userIdentity.userName", "ip":"$.detail.sourceIPAddress" }
"<date> に アカウントID:<account> に対して <type> <user> が <ip> からログインしました"
改めてサインインを行い、通知メールを確認すると、分かりやすくなりました!
- root ユーザの場合
- IAM ユーザの場合
なお、通知文はお好みに合わせてセンスのある文章に変更してください。その際には、root ユーザのサインイン時には userIdentity.userName 情報がないことにご注意ください。上記の通知内容における「Root」は userIdentity.type の情報です。
補足情報
通知内容は、サインインのイベントから必要な情報だけを抽出できるため、参考としてAWS コンソールのサインインイベントに例示されているサインインイベント情報(IAM ユーザー、MFA によるサインイン)を転記しておきます。CloudTrail でイベント名「ConsoleLogin」を検索すれば、自身のサインイン情報を確認することもできます。
{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:user/anaya", "accountId": "111122223333", "userName": "anaya" }, "eventTime": "2018-07-24T18:34:07Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 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": "Yes" }, "eventID": "fed06f42-cb12-4764-8c69-121063dc79b9", "eventType": "AwsConsoleSignIn", "recipientAccountId": "111122223333" }
まとめ
AWS マネジメントコンソールにサインインした IAM ユーザをメールで通知する方法を紹介しました。本ブログでは、CloudWatch Events から派生して独立したサービスである EventBridge サービスを利用し、通知する文字列を入力トランスフォーマーにより加工しました。
参考
AWS コンソールのサインインイベント - AWS CloudTrail