DenoでSlack Botが書けるnext-gen Slack Platformのセキュリティについて
TL;DR
-
.env
は公開しないように(当たり前) -
console.log(env)
も危険なのでやめよう - Botが使うトークンのスコープは細かく割り当てできるけど、あくまでBot単位での制御しか無理っぽいです
はじめに
2022-09-20 にオープンベータで発表されたDenoでSlack botが書けるというnext-generation Slack platformですが、
私の知らないうちに 2023-04-24 にGA版出てました。
Our next-generation platform for automating and integrating everything with Slack is out of beta for developers and gradually rolling out to all teams over the next two weeks.
// Google 翻訳に突っ込んだ結果
すべてを自動化し、Slack と統合するための次世代プラットフォームは、開発者向けのベータ版が終了し、今後 2 週間かけて段階的にすべてのチームに展開されます。
オープンベータかーー、と思って触っていませんでしたが、一般公開されているならということで、軽く遊んでみました。
Trigger, Workflow あたりの説明は他記事に譲るとして、セキュリティまわりについての記述がある記事が少ないなーという印象だったので、そのあたりについてまとめます。
確認環境
❯ slack --version
Using slack v2.10.0
❯ deno --version
deno 1.37.1 (release, x86_64-apple-darwin)
v8 11.8.172.6
typescript 5.2.2
Security best practices
ご丁寧に専用ページがあります。ありがたい。
まとめると
- アプリの編集者を指定できるから、適切な権限管理をしてね
- 入力値は検証してね。関数は再配布できるし、データストアを使うときはサニタイズしてね
- 機密データは環境変数を使ってね
- Slack CLIのcredentialは
~/.slack/credentials.json
に保存するからこの中身は秘密にしてね - 安全なライブラリを使ってね
-
manifest.ts
のなかのoutgoingDomains
で外部ネットワーク制限かけられるよ。信頼しているドメインだけアクセスしようね - トークンには適切なスコープだけ許可しようね
みたいなことを言ってるぽいです。
詳細は趣味で触る程度なら気にしないといけないかな〜ってところだけ紹介します。
環境変数の利用
env["<環境変数名>"]
みたいに書くと環境変数を参照できます。
localで動かしているときは.env
の内容を参照して、deployしたらslack env <ENV_NAME> <VALUE>
で登録してある環境変数を参照します。
ただ、ローカル実行時に
console.log(env);
みたいに書いたら、もちろんenvの設定値はslack activity
で閲覧できるログで丸見えでした。
なので、.env
ファイルの取り扱いとconsole.log()
の内容は注意が必要です。
トークンのスコープ
manifests.ts
でBotに許可するスコープを指定できます。
設定できるスコープの一覧はこちら。
スコープは細かく切られているようですが、スコープの割り当て先はBot単位しか無理そうです。
一つのBotでいろんなことをさせようとするより、こまやかな権限管理をしたいときはBot単位で分ける必要がありそうです。
おわり
ドキュメントの日本語翻訳がかなり追いついてないので、もっとドキュメントが日本語化されたらSlack Platform流行る気がします。
あたりを眺めてみましたが、残念ながらドキュメントのコントリビュートはできなさそうなのでSlack公式が日本語翻訳してくれるのを待つしかなさそうです。がんばって〜〜〜!(他力本願)
Discussion