SlackからAWSリソースを管理する

クラウドソリューション事業部の上野です。
少し前に Slack から AWS Chatbot を利用してAWSリソースの管理を行えるようになったというリリースがありました。

AWS Chatbot が Slack での AWS リソースの管理をサポート (プレビュー)

一言で言うと Slack 上でAWS CLIコマンドを実行して、AWSのリソースの操作を行う機能です。
以前から気になっていた機能ですので、この機会に触ってみたいと思います。

AWS Chatbot を設定する

まずは機能を使えるようにするため AWS Chatbot を設定します。
AWSマネジメントコンソールから AWS Chatbot を開き、
チャットクライアントに『Slack』を選択して『クライアントを設定』ボタンを押します。

AWS Chatbot から Slack ワークスペースにアクセスする権限を許可して Slack と連携します。

許可がされると設定済みクライアントに連携された Slack ワークスペースが表示されます。
表示された Slack ワークスペースを選択して、連携する Slack のチャネルの設定を行います。『新しいチャネルを設定』ボタンを押します。

Slack チャネルを設定の画面で下記のとおりに設定します。

設定名:任意の設定名
ログ記録:今回はOFF
チャネルタイプ:プライベート(連携先チャンネルに応じて指定)
チャネルID:対象のチャネルID(プライベートチャネルの場合)
ロール設定:チェネルIAMロール
チェネルIAMロール:テンプレートを使用してIAMロールを作成する
ロール名:任意のロール名
ポリシーテンプレート
・通知のアクセス許可
・AWSサポートコマンドのアクセス許可
Channelガードレール:許可したいポリシー
SNSトピック:通知先SNSのあるリージョン
トピック:通知先SNSトピック

今回はSlackからEC2を立ち上げて操作できるようにします。
先程作成したチャネルIAMロールに対して AmazonEC2FullAccess を付与します。
※テストのため強めの権限を付与していますが、本番で利用される際は必要最低限の権限を渡すようにしましょう。

Slackを設定する

今回の AWS Chatbot と連携する Slack チャネルはプライベートチャンネルであるため、Slack 上で コマンドを実行してaws アプリをチャンネルに追加します。

/invite @AWS

それでは AWS Chatbot からテストメッセージを送信して Slack と連携できているか確認しましょう。作成したチャネル設定を選択した状態で『テストメッセージを送信』ボタンを押します。

連携がうまくできていると Slack に下記のメッセージが通知されます。

Slack からAWSリソースを操作する

今回は Slack から EC2 を操作できるように権限を設定しています。
それでは Slack からコマンドを実行して、EC2インスタンスを立ち上げてみましょう。
SlackからAWS CLI のコマンドを実行します。

@aws ec2 run-instances --security-group-ids "セキュリティグループID" --key-name "キー名" --subnet-id "サブネットID" --image-id "AMI ID" --instance-type t2.micro --max-count 1 --min-count 1 --region ap-northeast-1

するとこのようにコマンドを実行するか確認が表示されます。
内容を確認して『 [Run] command 』ボタンを押します。

実行に成功するとこのようなメッセージが表示されます。

インスタンスが起動しているか Slack から確認してみましょう。
Slack 上からコマンドを実行します。

@aws ec2 describe-instances --region ap-northeast-1

インスタンスIDが i-0a6a12e3434cd14e5 というEC2インスタンスが起動できていますね。
それでは立ち上げたインスタンスを削除してお片付けしましょう。
こちらも Slack からコマンドを実行します。

aws ec2 terminate-instances --instance-ids "インスタンスID" --region ap-northeast-1

このとおりAWSマネジメントコンソールからも削除されていることを確認できました。

さいごに

発表されたときから気になっていた機能なので今回試してみたのですが、容易に導入することができました。
Slack 上から AWS CLI でコマンドを実行できるようになるため、許可する権限の範囲など考慮して設定する必要がありますが、使いようによっては非常に有用な機能だと思います。
もちろんセキュリティを考慮して全てのAWSリソースがSlack上から制御できるわけではありません。詳細についてはAWSのドキュメントにまとまっていますので、ご確認ください。

Running AWS CLI commands from Slack channels

残念ながら弊社では現時点では Slack 上からAWSリソースを操作する用途は現在のところありませんが、機会があれば利用したいと思います。