AWS Chatbot

Slack や Microsoft Teams に AWS の通知とコマンド実行を統合し、ChatOps を実現するサービス

概要

AWS Chatbot は、Slack チャネルや Microsoft Teams チャネルに AWS の運用通知を配信し、チャットインターフェースから AWS CLI コマンドを実行できるようにするサービスです。CloudWatch アラーム、AWS Health イベント、Security Hub の検出結果、Budgets のアラートなどを SNS トピック経由でチャットに通知し、通知を受けたエンジニアがその場でコマンドを実行して対応できる ChatOps ワークフローを構築します。IAM ロールによる権限制御で、チャネルごとに実行可能なコマンドの範囲を制限できます。

チャネル設定と IAM ロールによる権限管理

Chatbot の設定は、チャットクライアント (Slack ワークスペースまたは Teams テナント) の認可と、チャネル設定の 2 段階で行います。Slack の場合、まず AWS アカウントと Slack ワークスペースを OAuth で連携し、次に個別のチャネルに対して設定を作成します。各チャネル設定には IAM ロールを紐づけ、そのチャネルから実行できる AWS 操作の範囲を制御します。たとえば本番環境の通知チャネルには読み取り専用の IAM ロールを割り当て、Lambda の呼び出しや EC2 の停止といった変更操作を禁止できます。一方、インシデント対応チャネルには限定的な書き込み権限を持つロールを割り当て、緊急時のリソース操作を許可する設計が実務的です。ガードレールポリシーを設定すると、IAM ロールの権限範囲をさらに絞り込めます。チャネル設定は CloudFormation でコード管理でき、複数アカウント・複数チャネルの構成を一貫して展開できます。

SNS 通知の配信とフォーマットカスタマイズ

Chatbot は SNS トピックをサブスクライブして通知を受信します。CloudWatch アラーム、AWS Health、Security HubBudgetsCodePipeline など主要サービスの通知は、Chatbot が自動的にリッチフォーマットに変換してチャットに表示します。CloudWatch アラームの場合、アラーム名、状態遷移、メトリクスのグラフリンクが整形されたカード形式で表示され、エンジニアは通知を見ただけで状況を把握できます。EventBridge ルールと SNS を組み合わせれば、カスタムイベント (デプロイ完了、バッチ処理結果など) もチャットに通知できます。通知のフィルタリングは SNS のサブスクリプションフィルターポリシーで制御し、重要度の低いアラームがチャネルを埋め尽くさないよう設計します。実務では、重大アラート専用チャネルと情報通知チャネルを分離し、オンコールエンジニアが本当に対応すべき通知を見逃さない構成にすることが重要です。

チャットからの AWS CLI コマンド実行

Chatbot の最大の特徴は、チャットインターフェースから直接 AWS CLI コマンドを実行できる点です。Slack のメッセージ欄に @aws に続けてコマンドを入力すると、チャネルに紐づいた IAM ロールの権限でコマンドが実行されます。たとえば @aws lambda list-functions でアカウント内の Lambda 関数一覧を取得したり、@aws ecs describe-services --cluster production で ECS サービスの状態を確認したりできます。コマンドの実行結果はチャネルに投稿されるため、チームメンバー全員が操作内容と結果を共有でき、インシデント対応時の透明性が向上します。読み取り系コマンド (describe、list、get) はデフォルトで許可されますが、変更系コマンド (create、delete、update) はチャネル設定で明示的に許可する必要があります。コマンド実行のログは CloudTrail に記録されるため、誰がいつどのコマンドを実行したかを事後に追跡できます。大規模な組織では、コマンド実行を承認制にするワークフローを Step Functions で構築するケースもあります。

共有するXB!