Configで検知した異常をAWS ChatbotでSlack通知できるようになったってよ

以前自分が書いた記事の最後に,AWS Config(以降Config)で検知した異常をAWS Chatbot(以降Chatbot)を使ってSlackへ通知できるようになったことについて触れたので実際に試してみた.

a-mochan.hatenablog.com

前提

今回も以前の記事と同様にAmazon Simple Notification Service(以降SNS)とConfigを使うが,それらについては設定済みとする.また,Configで検知するルールは,インバウンドのsshを設定しているセキュリティグループでIPをフルオープンにしていないかをチェックするrestricted-sshを使う.SNSやConfigの設定については上記の記事に書いてあるので参考までにご覧いただけたらと思う.

今回使用するChatbotについて公式を引用して説明しておく.公式によるとまだBeta版だそう.

AWS Chatbot は、Slack チャンネルや Amazon Chime チャットルームで AWS のリソースを簡単にモニタリングおよび操作できるようにしてくれるインタラクティブエージェントです。 https://aws.amazon.com/jp/chatbot/

構成

今回の登場人物はConfigとSNS,Chatbot,Slack,Amazon CloudWatch(以降CloudWatch)である. 流れとしてはまずChatbotでSNSとSlackを紐づける.そしてCloudWatchで「Configで検知した異常」をトリガーとして「SNSへ通知する」ルールを設定.以上の設定によりConfigで検知した異常をSlackまで届けることができる.また,今回の構成は以下のように1つのアカウント内で完結する.なお構成図のChatbotがAWS提供のアイコンではないのは,ChatbotがBeta版だからかアイコンを公式からダウンロードできなかったからである...ご了承願いたい.

f:id:a-mochan:20191109192025p:plain
Configの検知をSlackへ通知するまでの流れ

ChatbotによるSNSとSlackの紐づけ

さっそくChatbotのページで,Slackを選んでchat clientを作成.Slackへのログインが求められるのでログインする.

f:id:a-mochan:20191109150437p:plain
Chatbot作成画面

ここからchat clientの設定に入る.chat clientでは主にSNSに届いたリクエストをどのSlackチャンネルに転送するかを定義する.まずは,最終的に通知するSlackチャンネルを選択する.

f:id:a-mochan:20191109153452p:plain
通知するSlackを選択

次にchat clientに割り当てるロールを設定する.特にこだわらなければデフォルトで設定されている新規作成でOK.

f:id:a-mochan:20191109153903p:plain
Chatbotに割り当てるロールを選択

最後に,Slackへ転送されるSNSトピックを選択する.

f:id:a-mochan:20191109155244p:plain
Slackと紐づけるSNSを選択

chat clientを作成が成功した時点でSNSサブスクリプションにもchat clientが追加されていると思うので,これでSlackとSNS間の設定は終了.

CloudWatchの設定

次に,Configの異常をSNSへ通知するためにCloudWatchを設定する.Configの異常イベントをトリガーにSNSへ通知するCloudWatchのルールを作成する.画面左側では,Configで設定済みのルールに違反したイベントを監視するよう設定している.画面右側では,通知先SNSトピックを設定している.

f:id:a-mochan:20191109182721p:plain
CloudWatch設定画面

テスト

ここまでで設定は終わったので実際にテストしてみる.試しにセキュリティグループを任意の場所からsshできるよう設定してみると,少し経ってからSlackへ通知が届く.

f:id:a-mochan:20191109200450p:plain
届いたSlackの内容

まとめ

  • ChatbotとSNS,CloudWatchを使ってConfigで検知した異常をSlackへ通知してみた
  • Lambdaを使ってもできるがChatbotならコードを書かなくてすむ
  • Chatbotは無料だしLambdaを使わない分料金が安くなるかと思ったが,ChatbotだとCloudWatchを使わなければならないので料金はあまり変わらないかもしれない
  • Slackへの通知をカスタマイズしたいならLambdaを使った方法,とにかく通知がまずしたいならChatbotを使う方法がいいかもしれない