メール受信をトリガーに電話通知をする対応をSSM Incident Managerを使って対応してみた

2021.07.06

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

システムのアラートやメッセージをメールで通知してくれるシステムは多くあるのですが、気がつかないときがあります。
即席で電話通知をする方法はないか?ということでSSM Incident Managerの電話通知を使って対応してみました。

AWS Systems Manager Incident Managerとは?

CloudWatch Alarm や EventBridge Events から検出されたな異常状態やイベントをインシデントとして管理することができます。 インシデントの管理はAWSマネージメントコンソール上で確認する事ができ、対応状態を管理できます。
インシデント発生時の連絡方法は、メール・SMS・電話通知が可能です。

前提条件

  • SESにてメール受信ができるドメイン、設定が必要になります。
  • SES受信機能とIncident Managerはリージョンが制限されるため米国東部 (バージニア北部)を利用します。
  • 電話通知の内容は特に指定しない、気がつけばOKで今回は考えます。

やりたいこと

  • メールを受信したら、気がつくように電話を鳴らす。
  • 短時間で実現する。

処理イメージ

今回、SESの受信機能で受け取ったメールをS3に1度保存をおこない、
Incident Managerに登録するようにします。

処理イメージ

試してみる

SESの受信ルールセット作成

AWSコンソールにログインをおこない、リージョンを[米国東部 (バージニア北部)]に切り替えます。
[Amazon Simple Email Service] > [Rule Sets]をクリックします。
[Create a New Roule Set]をクリックして新規ルールセット作成をおこないます。
ルールセット名は管理しやすい名称を指定します。
登録をするとルールセットのリストが表示されます。

SESの受信ルール作成

[Create Rule]をクリックして新規ルール作成をおこないます。

SESの受信ルール作成1

受信するメールアドレスの指定があり設定をします。
登録後は[Next Step]をクリックします。
※受信に利用するドメインはSESの検証が必要になります。

SESの受信ルール作成2

アクションの設定はS3バケットに受信したメールを保存する設定を追加します。
下記、項目を入力して[Next Step]をクリックします。

  • Add Action : S3
  • S3 bucket : 対象バケット名選択 or 新規バケット指定
  • Object key prefix : 未指定
  • Encrypt Message : 未指定
  • SNS topic : 未指定

SESの受信ルール作成3

ルール名の指定と複数ルールがある場合、適用の順番を指定します。
項目を入力して[Next Step]をクリックします。

SESの受信ルール作成4

確認をおこない、ルールの登録作業が完了となります。
SESのメール受信設定が正常にできている場合、保存先に指定したS3バケットにメール受信毎にファイル生成がおこなわれます。
以降、対象のS3バケットを「メール保管用S3バケット」とします。

CloudTrailによるS3証跡確認

EventBrigeを利用してS3のPutObjectを判定する場合、CloudTrailによる対象S3バケットのイベントログの記録が必要になります。
未設定の場合は、設定をおこないます。

[CloudTrail] > [証跡の作成]をクリックします。
証跡名とログの保存をするS3バケット指定、AWS KMS エイリアスを指定します。
私は今回ログを保存するS3なかったため新規S3バケットを作成しています。
その他項目は変更せず[次へ]をクリックします。

CloudTrailの設定1

ログイベントの選択、設定は下記内容を指定して対象S3の操作ログを記録するように指定します。
デフォルトでは全S3バケットを対象としているため、個別の選択に変更します。
項目を入力後、[次へ]をクリックします。

  • イベントタイプ : データイベント
  • データイベントソース : S3
  • 現在および将来のすべての S3 バケット : 解除
  • 個々のバケットの選択 : メール保管用S3バケット

CloudTrailの設定2

CloudTrailの設定3

確認をおこない、証跡の設定作業が完了となります。

Incident Managerの設定

[AWS Systems Manager] > [Incident Manager]をクリックします。
インシデントマネージャは初期セットアップ操作が必要になります。
レプリケーションセット、連絡先の設定は下記ページの「やってみた」を参照いただき登録操作をおこなってください。
今回は連絡先として「電話通知」を利用しますので設定をおこないます。

※電話通知は設定時に電話番号が正しいかの確認があります。
英語音声にて6桁の数字を入力する操作が必要になります。

対応プランの設定

レプリケーションセットと連絡先の設定が完了したら対応プランの設定をおこないます。
対応プランはEventBridgeでイベント発生時に、インシデント指定で利用します。

[AWS Systems Manager] > [Incident Manager] > [対応プラン] をクリックします。
[対応プランを作成]から新規追加をおこないます。

Incident Managerの設定

対応プランの設定ではプラン名と影響度、エンゲージメントを指定します。
エンゲージメントの設定は前の操作で設定した連絡先設定を選択します。
入力後は[対応プランの作成]をクリックします。

  • 名前 : 任意(plan-mail-phone-call)
  • タイトル : 任意(plan-mail-phone-call)
  • 影響 : 中
  • エンゲージメント : 先ほど設定した連絡先設定

対応プランの設定作業が完了となります。

EventBridgeの設定

SESで受信したメールをS3に保存する対応と、SSM Incident Managerによる通知まで設定を完了しました。
あとはEventBridgeによるS3のPutObjectイベントをトリガーとしてインシデントを上げる処理になります。

[Amazon EventBridge] > [ルールの作成]をクリックします。

EventBridgeの設定1

ルールを作成にて名前と説明を入力します。 パターンの定義は、今回決まったS3バケットのPutObjectイベントを判定しておこなうため下記指定をします。

  • パターン : イベントパターン
  • イベント一致パターン : サービスごとの事前定義パターン
  • サービスプロバイダー : AWS
  • サービス名 : S3
  • イベントタイプ : オブジェクトレベルのオペレーション
  • 特定のオペレーション : PutObject
  • 特定のバケット (名前別) : メール保管用S3バケット

EventBridgeの設定2

ターゲットの指定は、SSM Incident Managerにインシデントとして登録をするため下記設定をします。

  • ターゲット : Operahouse インシデント
  • レスポンスプラン : 作成した対応プラン

EventBridgeの設定3

項目を入力後、[作成]をクリックして登録操作を完了します。

試してみる

SESに設定をした受信メールアドレス宛に、メールを送信してみます。
メール送信をおこなうと、1分前後でSSM Incident Managerによる電話通知が来れば設定が正常にできています。

さいごに

今回はメールを受信をトリガーにSSM Incident Managerによる電話通知を試してみました。 メールによるアラート発生時に何からの方法で電話を鳴らしたいというケースで利用できそうです。
少しでもお客様の参考になればと考えております。