【Slack】Slack ~ Access Token ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/10/06/141323

で、Airflow で Slack へ通知する際に、
Access Token(アクセストークン)が必要だったのでメモる。
簡単かなーっと思ったら意外と調べたりするのに時間が掛かった、、、

目次

【1】トークンの種類
 1)ボットトークン - Bot tokens -
 2)ユーザトークン - User tokens -
 3)アプリレベルトークン - App-level tokens -
【2】トークン生成および接続テスト
 1)Slackアプリの作成
 2)トークン生成
 3)接続テスト
【3】セキュリティ設定
 1)トークンを特定の IP 範囲に制限する
 2)トークンのローテーションと期限切れ設定

【1】トークンの種類

Slack アプリで使用できるトークンは以下の通り。

1)ボットトークン - Bot tokens -
2)ユーザトークン - User tokens -
3)アプリレベルトークン - App-level tokens -

https://slack.dev/bolt-js/ja-jp/tutorial/getting-started

1)ボットトークン - Bot tokens -

* ボットユーザーに関連づけられ、1 つのワークスペースでは
 最初にそのアプリをインストールした際に一度だけ発行される
* xoxb  で始まるトークン

2)ユーザトークン - User tokens -

* アプリをインストールまたは認証したユーザーに成り代わって
 API メソッドを呼び出すことができる
* xoxp で始まるトークン

3)アプリレベルトークン - App-level tokens -

* 全ての組織を横断できる
* xapp で始まるトークン

【2】トークン生成および接続テスト

1)Slackアプリの作成

[1] 以下のサイトを開き、「Create an App」ボタン押下

https://api.slack.com/apps

[2] 「From scratch」を選択
[3] 以下を入力し、「Create App」ボタン押下
 + App Name : 任意(今回は「HelloWorld」を入力)
 + Pick a workspace to develop your app in:対象のワークスペースを選択

2)トークン生成

[1] [OAuth & Permissions]-[Permission] を選択
[2] Scopes で「chart:write (メッセージの送信)」を追加する
 => 「You’ve changed the permission scopes your app uses. ...」って表示 
[3] 「Install App」を選択し、「Install to Workspace」を選択
[4] 「許可する」ボタン押下
 => トークン(xoxp-XXXXXX)をメモしておく

3)接続テスト

[1] 以下にアクセス

https://api.slack.com/methods/chat.postMessage/test

[2] 以下を入力し、「Test Method」ボタン押下
 + Or, provide your own token:メモったトークン(xoxp-XXXXXX)
 + channel(Required):送りたいチャンネル
 + text:送りたいメッセージ(今回は「こんにちは世界」)
[3] Slackで対象チャンネルに送ったメッセージが
 表示されていることを確認

https://slack.com/intl/ja-jp/

【3】セキュリティ設定

1)トークンを特定の IP 範囲に制限する

* 以下の公式サイトを参照のこと。

https://api.slack.com/lang/ja-jp/securing-your-slack-app

2)トークンのローテーションと期限切れ設定

https://api.slack.com/authentication/best-practices#rotation

より抜粋
~~~~~~~~~~~~~~~~~~~~~
Rotating and expiring tokens
=> トークンのローテーションと期限切れ

Unfortunately, programmatic rotation and automatic expiration of tokens
 is not yet available for Slack apps.
=> 残念ながら、Slackアプリのための
 トークンのプログラムでのローテーションと自動的な期限期限切れは、
 まだ利用できません

Revoke tokens manually with auth.revoke.
auth.revokeのよる手動的なトークンの無効
~~~~~~~~~~~~~~~~~~~~~

https://api.slack.com/authentication/rotation#turn

より抜粋
~~~~~~~~~~~~~~~~~~~~~
Turn on token rotation 
=> トークンのローテーションONにする

Token rotation is enabled for your app
 via the OAuth & Permissions section in the sidebar of your app config.
=> あなたのアプリについて、あなたのapp configのサイドバーにある
 「OAuth & Permissions」ページ経由で、トークンのローテーションを有効にする

Warning:
=> 警告

 token rotation may not be turned off once it's turned on.
=> トークンのローテーションは、ONにしてすぐに、
  OFFにならないかもしれない

 You'll want to be sure you're prepared to refresh your token
 within 12 hours before you turn on the toggle.
~~~~~~~~~~~~~~~~~~~~~

* app configに「token_rotation_enabled」って設定があるので
 将来的には使えるだろうが、現状は、「true」に変えても
 以下のエラーになる(redirect URLを設定すればできる?)
~~~~~~
Fix errors to save changes (line 13)

Token rotation requires valid oauth redirect urls
~~~~~~

app config:Manifest例

_metadata:
  major_version: 1
  minor_version: 1
display_information:
  name: HelloWorld
oauth_config:
  scopes:
    user:
      - chat:write
settings:
  org_deploy_enabled: false
  socket_mode_enabled: false
  token_rotation_enabled: false

参考文献

https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21
https://zenn.dev/mokomoka/articles/6d281d27aa344e
https://note.com/npaka/n/n4bcb38a1ea74
https://api.slack.com/lang/ja-jp/hello-world-bolt

関連記事

Slack ~ Incoming Webhooks ~
https://dk521123.hatenablog.com/entry/2021/10/15/091842
Apache Airflow ~ 通知あれこれ編 ~
https://dk521123.hatenablog.com/entry/2021/10/06/141323
Github Actions ~ Slack連携 ~
https://dk521123.hatenablog.com/entry/2024/04/03/003053