LoginSignup
2
0

More than 3 years have passed since last update.

slack apiでリクエストの検証をする 〜 integromat

Last updated at Posted at 2020-10-17

はじめに

integromatでセキュリティ周りをすんなり実装する方法が探せず、やってみたことをまとめました。
いろんなパラメータが丸見えになりますので、画像中にマスクを入れてます。

こちらで作成したシナリオを再利用した内容です。
https://qiita.com/nofrmm/items/81dea29db5e4338e7c8d
0から始める場合はWebhookのURLを追加する時点で
https://qiita.com/drafts/c05fa1cc54c1c58c5b51/edit#url%E3%81%AE%E5%A4%89%E6%9B%B4
こちらの内容を組み入れて始めると後々変更の手間がないです。

実装

Webhookの設定の細かいところと
関数の使い方を理解して進められる内容です。

ここのページを見ても実装はできません。
https://api.slack.com/lang/ja-jp/securing-your-slack-app
見るべきはこちらの英語版
https://api.slack.com/authentication/verifying-requests-from-slack#verifying-requests-from-slack-using-signing-secrets__a-recipe-for-security__step-by-step-walk-through-for-validating-a-request

Webhookを修正

設定がデフォルトではヘッダーが取得できないのとbody部がデシリアライズ化されているので
body部を生のJSONのまま取得できるように設定を変更します。

スクリーンショット 2020-10-17 19.54.05.png

Show advanced settingsにチェックをつけると必要な項目が表示されます。
Get request headersJSON pass-throughにチェックを入れてセーブします。
スクリーンショット 2020-10-17 19.52.22.png

シナリオを開いて、Webhook の Re-determine data structureをクリックして
データ構成を取得し直します。
スクリーンショット 2020-10-17 20.48.44.png

この状態になったら、slackから実行したいAPIを動かすアクションを行います(メッセージ送信など)
スクリーンショット 2020-10-17 21.07.37.png

(1)POSTされたBODY部のJSONがvalueでそのまま取得できるようになっています。
(2)x-slack-signaturex-slack-request-timestampを取得できるようになりました。
スクリーンショット 2020-10-17 21.51.51.png

JSONをparse

扱いやすいようにparseして変更前同様にあつかえるようにします。
スクリーンショット 2020-10-17 22.12.18.png
スクリーンショット 2020-10-17 22.15.03.png

変更前のWebhookのパラメータを参照していた箇所はJSONをparseしたJSONモジュールのパラメータに置き換えて更新します。
(integromatで発行したURLをだし直しするのが一番楽かも)

フィルタを追加

ヘッダパラメータの存在チェックと、verifyをフィルタで実施します。
URLからのリクエストの再利用防止で1分チェックを追加しました(実装例は5分)
スクリーンショット 2020-10-18 21.36.58.png

スクリーンショット 2020-10-18 7.24.01.png

確認方法の補足

関数

実装する関数にオンマウスすると説明が表示されます。
スクリーンショット 2020-10-18 7.12.31.png

ドキュメントは・・・

不十分感あります(2020/10現在)
使われにくい要因はこういったところにあるのかも。実装と同期を取れるよう調整してほしい。
https://support.integromat.com/hc/en-us/articles/360005771433-String-Functions
スクリーンショット 2020-10-18 7.16.09.png

URLの変更

integromatでは簡単にURLを変更可能です。
サービスとして素敵だなと思いました。
slackの方で同一のURLを設定し直す時、リクエストを飛ばしてない動作を確認しています。
urlのverificationでは複数のURLを使えると検証がしやすい。

スクリーンショット 2020-10-18 6.29.55.png

デバッグ(パラメータチェック)

他に方法ないかな、と思いながら出力用に変数をいくつか用意して
パラメータをチェックして調整しました。

スクリーンショット 2020-10-17 23.20.29.png

スクリーンショット 2020-10-17 23.20.59.png

本当にOperationの消費が早い
デバッグが終わればこのモジュールは消します。

さいごに

ノーコードと聞くと素人でも簡単にできそうな感じが落とし穴です。
簡単にできるから、感覚で組んで、使用しているシナリオのOperationが跳ね上がるのが
目で見えて、それに対策が組めるかでこのサービスの利用を継続できるかの判断になるはずです。

Operationの削減が課題

手探りで実装を組む、確認する、を工程を繰り返すと、Free枠はあっという間になくなります。多少お金を出すつもりで実装を進めることをお勧めします。
一度の実行で、最低限かかるOperationは履歴から確認できるのでOperationを削減できる方法が見えてきます。

Operation、転送容量の追加購入

Operationや転送量のいずれかが超過した場合に、上のプランにあげるのでなく
追加で購入できるのはいいと思いました。
10,000Operations/人月もあれば、開発は可能な印象です。
スクリーンショット 2020-10-18 7.48.23.png

https://www.integromat.com/en/pricing
より

スクリーンショット 2020-10-18 7.56.42.png

参考URL

slack apiのrequestの検証仕様
https://api.slack.com/authentication/verifying-requests-from-slack

Webhookの仕様
https://support.integromat.com/hc/en-us/articles/360006249313-Webhooks

String関係の関数
https://support.integromat.com/hc/en-us/articles/360005771433-String-Functions

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0