(更新 2020/4) : Appのリンク先がAdd-onではなく、 Appと間違って記載しておりましたので修正しました。失礼しました。
はじめに
Slack + Splunk 連携については、過去こちらにまとめてきたので、今回は第3弾としてSlack Web APIを利用して Slackのデータを Splunkに取り込んでやってみたいと思います。
過去記事
・Splunk Alert を Slack に飛ばしてみる
・Slack で Splunk SPLを使えるようにする (Lunaのご紹介)
今回使う Splunkアプリは、「 Slack App for Splunk Add-on 」を利用します。
Slack 側の API利用の制限が厳しくなっており色々とはまったので、その点を中心に書いておきたいと思います。
どんなユースケースがあるか?
個人的に考えたところでは、こんなケースで利用できるのではと思います。
・どんなメッセージがやりとりされているかを分析することができる。(おそらく機械分析なども可)
・だれが活発に利用しているかなどの利用分析
・不審なアクセスがないかなどのセキュリティー対策
・「いいね」数の多いメッセージやユーザーをランキング
・ナレッジを slackに溜めている場合、過去の検索などが簡単になる。(slackの場合検索がいまいちだったりする)
利用できるまでの、おおまかな流れ
- Slack アプリを作成して、token を取得する
- Splunkに "Slack App for Splunk Add-on" を追加する
- Slack Token を Splunkに設定する。
以上
1. Slack アプリを作成し、Tokenを取得する
Slack API Token について
"Slack App for Splunk" のアプリの中には Readmeファイルがあり、Tokenの取得URLとかあるのですが、こちらの tokenはすでにレガシーとなっており、今はまだ使えるのですがいずれなくなるよ。という非推奨のメッセージがでてきます。
今は、Slack apps を作成し、scope設定して利用するのを推奨としているようなので、今回はその推奨構成をチャレンジしてみたいと思います。
Slack Apps の作成
https://api.slack.com/slack-apps
こちらから、 "create a slack apps" で作成し始めます。
App Name には適当に自分がわかるアプリ名と
Development Slack Workspace にはアプリを適用する slack workspaceを選択してください。
Functionality には、Botsを選択。(すると Permissionsもチェックが自動的につきます)
Scope 決め
作成したSlack apps に権限を与える必要があります。主に access logを取得するための admin 権限と、メッセージ内容を取得するための read権限です。READMEも古いレガシー Tokenを参照しているため、どの権限がいいか明記されておらず苦労しましたが、ログから下記の権限が必要と判明しました。合っているかわからないので、エラーメッセージと共に、設定した scopeを記載します。
logs: {u'needed': u'admin', u'ok': False, u'error': u'missing_scope', u'provided': u'identify,bot,channels:read,team:read,users:read,usergroups:read,chat:write:user'}
admin
channels:read
channels:write
chat:write:user
bot
usergroups:read
users:read
team:read
Tokenの取得
OAuth & Permissions の項目あるいは、アプリの下の方に行くと、OAuth Access Token が取得できます。
2. Splunkに "Slack App for Splunk Add-on" を追加する
https://splunkbase.splunk.com/app/4173/
こちらのアプリを Splunkにインストールする。
TA-slack というアプリがインストールされます。
このアプリで取得できることは、以下の2つです。
- アクセス情報
- メッセージ情報
3. Splunkのデータ入力の設定
それぞれ 取得したTokenを設定していきます。
設定できる項目はこちらです。
分析開始
しばらくすると、データが取得し始めます。取得するタイミングは loginデータは 3600秒。 messagesデータは 600秒の interval になります。(変更可能)
アプリで、Fieldsなども定義されているので、取り込んだらすぐに分析できます。
問題発生
messageデータは取得できたのですが、login データがちっとも取得できませんでした。
アプリが実行している、splunk_logins.py のログを、Splunkの _internal indexからみていると、以下のようなメッセージが。
paid_only??
調べてみると、無償版の slackでは利用できない APIのようです。
ということで、セキュリティ強化のためアクセス分析やアラートをあげたい場合には、Slackの有償版をご利用ください。。
最後に
最近、APIの利用に色々と制限がかかってきているので、既存のドキュメントでは書いてないことなど多くありました。少しでも構築時のヘルプになれれば幸いです。