- 公開日
- 最終更新日
【Amazon EventBridge】AWSイベントのSNS通知フローを作ってみた(AWS Config/SSM Automation連携)
この記事を共有する
目次
はじめに
こんにちは、パーソル&サーバーワークスの相澤です。
前回の記事で、AWS Configの違反検知+AWS Systems Manager Automationで自動修復という仕組みを構築しました(詳細は以下の記事をご覧ください)。
【AWS Config】SSH全開放を自動で直す!Systems Manager Automationではじめる自動修復ワークフロー入門
今回はその続きとして、違反を検知したタイミングと自動修復が終わったタイミングでメール通知を受け取れるように、Amazon EventBridgeとAmazon SNSを使った通知フローを作ってみました。
本記事で作成する構成
今回の記事では、以下の2つのイベントをトリガーにして、SNS へメール通知を送る仕組みを構築します。
・AWS Configの「非準拠検知イベント」
・SSM Automationの「自動修復完了イベント」
これらをAmazon EventBridgeのルールで受け取り、Amazon SNS から管理者宛にメール通知を送信します。
STEP 1:SNS通知の設定
まずは通知先となるSNSトピックの作成と、メールアドレスのサブスクライブ設定を行います。
メールアドレスの認証を行うと、EventBridgeからの通知を受け取れるようになります。
手順
①AWSマネジメントコンソールにログインして、右上のリージョン選択箇所にて[東京]リージョンを選択する
②[Amazon SNS]>[トピック]>[トピックの作成]画面を開く
③以下の通り設定し、[トピックの作成]をクリックする(記載していない項目はデフォルト値で設定する)
・タイプ:スタンダード
・名前:任意の名前
続いて、トピックから通知を送る宛先の設定を行います。
①トピック作成後の画面から、[サブスクリプションの作成]をクリックする
②以下の通り設定し[サブスクリプションの作成]をクリックする
・トピックARN:先程作成したトピックのARN ※自動で入力される
・プロトコル:Eメール
・エンドポイント:通知を送るメールアドレス
③サブスクリプションの作成が完了すると、認証メールが届くので[Confirm subscription]をクリックする
以下のような画面が表示されたら認証完了です。
STEP 2:EventBridgeのルール作成
次に、AWS Configの違反検知とSSM Automationの修復完了を受け取るEventBridgeルールを作成します。
EventBridgeがイベントを拾い、SNSへ通知を渡すための重要な設定です。
手順
①[Amazon EventBridge]>[ルール]>[ルールを作成]画面を開く
②[ルールの詳細を定義]画面で以下の通り設定し、[次へ]をクリックする
・名前:任意の名前
・イベントバス:default
③[イベントパターンを構築]画面で以下の通り設定し、[次へ]をクリックする
・イベントソース:その他
・作成のメソッド:カスタムパターン(JSONエディタ)
・イベントパターン(JSON):
{
"source": ["aws.config"],
"detail-type": ["Config Rules Compliance Change"],
"detail": {
"configRuleName": ["restricted-ssh"],
"newEvaluationResult": {
"complianceType": ["NON_COMPLIANT"]
}
}
}
このイベントパターンは、AWS Configのrestricted-sshルールが「非準拠(NON_COMPLIANT)」になった時だけEventBridgeが反応するように条件を絞り込んだものです。
④[ターゲットを選択]画面で以下の通り設定し、ルールを保存する
・ターゲットタイプ:AWSのサービス
・ターゲットを選択:SNSトピック
・ターゲットの場所:このアカウントのターゲット
・トピック:STEP1で作成したSNSトピック
・許可:実行ロールを使用
・実行ロール:この特定のリソースについて新しいロールを作成

⑤同様に、SSM Automationの修復完了を受け取るEventBridgeルールも作成します。
以下の項目以外は、手順①~④の内容と同じです。
イベントパターン(JSON):
{
"source": ["aws.ssm"],
"detail-type": ["EC2 Automation Execution Status-change Notification"],
"detail": {
"DocumentName": ["AWS-DisablePublicAccessForSecurityGroup"],
"Status": ["Success", "Failed", "Cancelled"]
}
}
このイベントパターンは、SSM Automationの自動修復が完了したタイミング(成功・失敗・キャンセル)でEventBridgeが反応するように絞り込んだ条件です。
STEP 3:動作確認
通知の設定が完了したので、実際にイベントを発生させて動作確認を行います。
今回のトリガーは「SSHを0.0.0.0/0で開放した状態」なので、テスト用にセキュリティグループを作成し、インバウンドルールへ「SSH 0.0.0.0/0」を追加してみます。
数分ほど待機すると、合計2通のメールが届くので中身を確認します。
まず1通目のメールは、SSH制限ルール(restricted-ssh)に違反する設定が見つかったため、対象のセキュリティグループの評価がルール準拠から非準拠に変わったという内容です。
"configRuleName":"restricted-ssh"
→SSH(22番ポート)が全開放されていないかチェックするルール
"complianceType":"NON_COMPLIANT"
→ 対象のセキュリティグループに変更が加えられ、「非準拠(ルール違反)」の状態になった
続いて2通目のメールは、AWS ConfigがセキュリティグループのインバウンドルールでSSH全開放のルールを削除する自動処理(SSM Automation)を実行し、成功したという内容です。
"Definition":"AWS-DisablePublicAccessForSecurityGroup"
→セキュリティグループの全開放(0.0.0.0/0)を自動で削除する処理
"Status":"Success"
→自動修復が正常に完了した
以上で、想定通り通知が届くことを確認できました!
おわりに
今回は、AWSイベントの発生をトリガーとするEventBridgeルールを作成し、SNSに通知する構成を作成しました。
この仕組みを使えば他のAWSイベントをきっかけに通知を送ることもできるので、シンプルな通知システムとして幅広い場面で活用できると思います。
ただし、SNSのデフォルト通知は少し読みにくいため、
次の記事では通知内容を整形して読みやすくする方法を紹介する予定です。
この記事がどなたかの参考になれば嬉しいです。
この記事は私が書きました
相澤 紗由希
記事一覧将来の目標は、わかりやすく説明できるエンジニアになることです。 「説明うまい!」と言ってもらえる日を夢見て奮闘中です。 編み物が好きです。