ボクココ

少数サービス開発運用に関するテックブログ

Slack App 移行メモ

ども、@kimihom です。

f:id:cevid_cpp:20220402140412j:plain

旧式 Slack App を公開している場合、2022年5月27日までに対応しなければ、App ディレクトリから除外するよ というお知らせが届いた。本記事ではその対応についてまとめよう。

注意 : 移行期限が 2022 年 5 月 27 日まで延長されました。

App ディレクトリにご登録いただいている Slack アプリについてのお知らせです。アプリで詳細な権限を使用するための変更が行われていない場合、そのアプリは 2022 年 5 月 27 日以降 App ディレクトリから除外されます。詳細な権限によって、アプリが機能するのに必要な最低限の情報のみを要求できるため、セキュリティを心配するユーザーにも広くアプリを使用してもらえるようになります。

2020 年 1 月 1 日にお知らせしたとおり、まもなく従来のトークンモデルが新しい権限モデルに置き換わります。アプリで詳細な権限を使用するための変更が行われていない場合、そのアプリは 2021 年 11 月 18 日以降 App ディレクトリから除外されます。除外されると、ユーザーは App ディレクトリを介してアプリにアクセスできなくなり、Slack による審査が完了していないことが示されます。

いよいよこの期限が迫ってきたこともあり、新しいSlack App申請をすることにした。

今回の申請したSlack Appは、単に サーバー側から Slack にメッセージを投稿するだけのシンプルなものになっている。

それなのに、なぜ Incoming Webhook という最もシンプルな Slack 投稿の方法を使っていないのか? それは、Webhook だけだと @ メンションをつけてユーザーに Slack メッセージを投稿できない というクリティカルな欠点があったためである。このこだわりだけのために、Slack App を作って Slack で @ メンション付きメッセージを投稿できるようにした。

f:id:cevid_cpp:20220402131713p:plain

api.slack.com

v2 で何が変わる?

私がさっとみた限りでは、Block KitApp Home の2つが大きいように思えた。

Block Kit では、投稿するメッセージをよりカスタマイズして、もはや Web サイトのような情報をSlackで表示できるようになる。Incoming Webhooks や Web API の chat.postMessagechat.postEphemeral 権限を使って、実現が可能だ。

App Home は Bot と会話できるような専用のアプリ部屋が作られるようになったようである。

そして、Slack をより安全に使えるようにということで、より細かいスコープが指定できるように変わっている。今回のSlack App移行では、かつての古い影響範囲の大きなスコープを、より細かく定義することが求められている。

また、Slack チャンネルごとに、対象の Slack App を入れるかどうかを選択できるようになった。これで思った以上のチャンネル範囲で Slack App が動作してしまっていた点を解消している。

f:id:cevid_cpp:20220402125012p:plain

URL: https://app.slack.com/apps-manage/****/integrations/installed

v2 への移行ステップ

基本的に以下の英語を頑張って理解しながら実装するしかない。私が調べた限りでは、日本語で細かく解説されたサイトがなかった。

api.slack.com

対応に必要なことは大きく分けて2つ。スコープの更新OAuth v2 への移行 だ。

スコープの更新

普段 たくさんの方に使われている Slack Appの場合、その利用履歴を元に、Slack が移設すべき新しい Slack スコープを提案してくれる形になっている。

アプリ管理ページより、移設が必要な場合は Tools っていうのがサイドバーに表示されている。そこから細かなスコープ定義のアップデートをしていくことになる。

OAuth v2 への移行

これは簡単で、OAuth のアクセス URL を、変更したスコープを込みでリクエストするようにするだけだ。

OAuth

https://slack.com/oauth/v2/authorize?client_id=&redirect_uri=&scope=chat:write chat:write.public users:read&state=___

アクセストークン

https://slack.com/api/oauth.v2.access

最難関、Slack App申請

これで Slack App申請をし直せば完了である。ところが、ここで最大の難解が待っている。

Slack の Security & Compliance の申請である。

まず、Slack Appを連携実行する際、自社のプライバシーポリシーをそのSlack連携ページ内に必ず含める必要がある。

そして、 Data retention policy, Data archival/removal policy, Data storage policy の3つのポリシーに関して、申請時に "英語で" しっかりと記述する必要がある。

これはエンジニアが~ とかの話では全くなく、英語と法律に関してしっかりと理解して対応する必要がある。これに一番時間がかかった。

このハードルを乗り越えた後に、Slack Appを無事申請することができるようになる。

終わりに

今回は Slack Appを v2 へ移行した内容に関して記した。

いろいろな Web サービスと連携することを経験しているが、Slack のセキュリティ関連での申請はあらゆる Web サービスの中でも一番厳しいものだった。

それでも、Slack API を使うことで日常の利用が特段に便利になる。そのためなら、どんな高い壁でも乗り越えていこう。