AWS Chatbot + Microsoft Teams で 1 チャネルで複数 AWS アカウントを管理出来るか試してみた

2023.03.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

先日 AWS Chatbot が Microsoft Teams をサポートしました。

これによって従来独自の仕組みを構築して AWS と Microsoft Teams 間を連携して方も、ユースケース次第で AWS Chatbot に連携部分をお任せ出来るようになりました。
一方で Microsoft Teams 上で AWS リソースをどのように管理するかは様々なパターンが考えられると思います。

今回は 1 つの Microsoft Teams チャネルへ複数の AWS アカウントの管理を集約しているケースを Chatbot で代用出来るか試してみました。

マルチアカウントの Chatbot 設定を Microsoft Teams へ設定

本日時点で AWS Chatbot は AWS Organization に統合された機能は存在しませんので、一つのアカウントで Chatbot を設定すれば組織内のアカウントが一括で管理対象になるような機能は現時点ではありません。
よって複数のアカウントで利用する場合は、それぞれのアカウントで AWS Chatbot を構成して対象チャネルとの統合設定を行う必要があります。

設定自体はシンプルでそれぞれのアカウントで Microsoft Teams のチャネル URL を設定するだけです。

設定が出来たら、AWS リソース上の変化がどのようにチャネルに通知されるか、操作の際には何が必要なのかを見ていきましょう。

通知の集約

アラートやイベントなどの通知を 1 つの Microsoft Teams チャネルに集約している場合を試してみましょう。
前回の記事と同様に CloudFormation の通知機能を使って、スタックステータスを通知する仕組みを使います。

チャネルへ通知を統合済みの状態で、それぞれの AWS アカウントで CloudFormation スタックの作成を行うだけです。

次のように通知されます。アカウント ID も表示されているのでこれはわかりやすいですね。
通知に関しては Chatbot がメッセージ出力だけなので非常にシンプルです。

サービス・リソース管理の集約

続いて、通知されたイベントやアラートに反応してチャネル上で何か対処(操作)を行うケースを考えてみましょう。
ここでは作成されたスタックを削除してみます。

まず、本日時点で AWS Chatbot のマルチアカウントに関する機能としてはデフォルトアカウントの設定機能があります。
クライアントから Chatbot に対して命令を送信する際にはアカウント ID は指定しません。コンテキストとしてどのアカウント ID なのかが設定済みだからです。

そこで Chatbot ではマルチアカウントのユースケースをサポートするために、クライアントの Chatbot アプリケーションに対して、コンテキストのアカウント ID を切り替える機能(set default-account)が備わっています。

デフォルトアカウントが指定されている場合は次のように自動で対象アカウントに対して操作が実行されます。

アカウント A でスタックが削除されました。

アカウント切り替え

このままアカウント B のスタック名を指定してもアカウント A に対して実行されてしまいます。
そこで先程のset default-accountを使ってまずアカウント切り替えを行います。

アカウント B に切り替わったので、スタック削除を試してみます。

無事アカウント B のスタックを削除することが出来ました。
IAM ロールもアカウント B のチャネル設定時に設定したロールが指定されています。アカウント B の AWS Chatbot チャネル設定が反映されているという形ですね。

ちなみに、この AWS Chatbot のデフォルトアカウント設定は Microsoft Teams 毎に分離されています。

[TIPS] AWS Chatbot にメンションしても反応がないとき

今回 Teams のチャネルに複数アカウントを設定したタイミングで Teams 上の AWS Chatbot アプリケーションが、メンションしても反応しなくなってしまいました。

どうやら、複数のアカウントが関連付けられた直後は明示的にset default-accountを指定する必要があるようです。
アカウント指定後はまたやり取りを行うことが出来ました。

公式ドキュメントのトラブルシューティングなどにも記載がなかったのでこちらに情報を残しておきますが、本日時点の情報ということにご注意ください。

さいごに

本日は AWS Chatbot + Microsoft Teams で 1 チャネルで複数 AWS アカウントを管理出来るか試してみました。

まず、出来るか出来ないかで言うと、出来るということが確認出来ました。
アカウント切り替えの機能を使うことで実現可能です。

ただし、使っている中で気をつけなければいけないなと少し思った点があります。
検証の中で CloudFormation のスタック削除を行いましたが、デフォルトアカウントがアカウント A の状態でアカウント B のスタックを削除しようとしても、アカウント A に対象スタックがないので削除出来ないという形になりました。
もしここでアカウント A に同名のスタックが存在していれば、意図せずアカウント A のスタックを削除してしまう可能性があります。

AWS Chatbot ではチャネル設定ごとに共通ロールと SNS トピックのマッピングを行うことが出来ます。
通知は集約しても良いと思いますが、更新を伴う操作に関しては分離しておくと管理しやすそうです。