pythonでslackのmessage buttons
TL;DL
こんなのがあったから, 試すがてらPythonで再実装してみた.
SSLとかはLet’s Encryptとかでよしなにやってほしい。
1点注意としては、現在Firefoxからslack appの作成をしようとするとどのチームでslackアプリを作るか?という選択肢が選べない。Chromeとかだと上手くいく。
背景とかモチベーション
- 現在の会社で所属しているチームには定型的なオペレーションがある
- 手順は確立されているがもっと効率化, 自動化したい
- が、最終的な対応の実施可否は人間が判断したい
- 実行しますか?の問いにyes, noで回答させて欲しい
- が、最終的な対応の実施可否は人間が判断したい
という背景があった上で、
- 通知を受け取った人間がCLIで1コマンド叩く形の自動化は嫌
- Jenkinsとかも違うなぁと思った
- 通知と対処をシームレスに実行できれば嬉しい
そんなこんなでインタラクティブにシステムとやりとりできるslack message buttonsがいい感じに自動化のUIになってくれるのではないか?と思って試した。
個人的には以下の流れができたら最高だなと思っていた。
(一連の流れは全てslackのメッセージとしてlog化) なにかしらの出来事 -> slackへの通知 (yes, noのbuttonの送信) -> yesを押したらスクリプト等の実行 -> noなら何もしないで終了
成果物
所感
- slack の message buttonはSSL必須
- 試すだけなら, 単純に手間もしくは制約が多くなるだけ
- Herokuで制約をとるか
- Let’s Encryptで手間をかけるか
- 試すだけなら, 単純に手間もしくは制約が多くなるだけ
- とはいえ、たんなるコミュニケーションツールとして、message button を用意するのは面倒だなぁと思った.
- slackのUIでオペレーションをするのは厳しい
message button
をレスポンスするアプリケーションのセキュリティ的な問題
問題点
どこまでslackを信用するかの問題。
message button appの作りとしては、以下の2つの点でアプリケーションのセキュリティを担保しようと考えている
- httpsでの通信
- slackしか知らない, slack app用の
Verification Token
を使う- アプリケーション側で
Verification Token
をチェックする
- アプリケーション側で
コレだけだと、slackから送信されてくるリクエストによく似たリクエストが送られてきたら対処のしようが無い.(特に、Verification Tokenが漏れたとかのケースを考えると…)
個人的には上記に加え, 以下の対策が取れれば良いのだけどなぁと思った。
- slackのリクエストもとIPもしくはIP帯が公開されていること
- slack appを動かすサーバーに対して、送信元IPでFWをかけられるようにする
送信元IPで制限がかけられればVerificationTokenが漏れましたとかなっても大丈夫なはず。
しかし、結局これでも、 万が一slackのサーバーが乗っ取られて「slackのサーバーからいろいろrequestを投げてみました(´・◡・`) 」 みたいな自体になると対処のしようが無い。
message button でアンケートが取りたいとかの、「ちょっとしたコミュニケーションの延長線上の事をやりたい」程度なら万が一message button用のアプリに不正なリクエストがあっても問題ないはずだが、「インタラクティブに実行したいオペレーション」を実行するアプリケーションに不正なリクエストがあった時のことを考えると結構厳しいはず.
なので問題点としては、以下となると思っている.
どこまでslackを信用するか
ただし、slackの問題というより、コミュニケーションツールをコミュニケーションから大幅に外れた用途で使おうと検討した自分が原因なので、slackには全く落ち度が無いと思っている.
まとめ
- slackでサービスのオペレーションはリスクがあるのを認識できた
- 実際に手を動かしてみたから, そこら辺に気づけたと思っている
- 個人的考えてた用途としては厳しい