/var/log/study

つまり雑記

pythonでslackのmessage buttons

TL;DL

api.slack.com

こんなのがあったから, 試すがてらPythonで再実装してみた.

github.com

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なら何もしないで終了

成果物

  • TL;DLのgithub
  • pythonにポートをした理由は所属するチーム的な理由
    • 主な利用言語にpythonがあり, nodeは使ってないから

所感

  • slack の message buttonはSSL必須
    • 試すだけなら, 単純に手間もしくは制約が多くなるだけ
      • Herokuで制約をとるか
      • Let’s Encryptで手間をかけるか
  • とはいえ、たんなるコミュニケーションツールとして、message button を用意するのは面倒だなぁと思った.
    • message button以外の(SSLが任意の)apiでなんとか賄える気がする
  • slackのUIでオペレーションをするのは厳しい
    • message button をレスポンスするアプリケーションのセキュリティ的な問題

問題点

どこまでslackを信用するかの問題。

message button appの作りとしては、以下の2つの点でアプリケーションのセキュリティを担保しようと考えている

  1. httpsでの通信
  2. 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でサービスのオペレーションはリスクがあるのを認識できた
    • 実際に手を動かしてみたから, そこら辺に気づけたと思っている
  • 個人的考えてた用途としては厳しい