はじめに
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のまま取得できるように設定を変更します。
Show advanced settings
にチェックをつけると必要な項目が表示されます。
Get request headers
とJSON pass-through
にチェックを入れてセーブします。
シナリオを開いて、Webhook の Re-determine data structure
をクリックして
データ構成を取得し直します。
この状態になったら、slackから実行したいAPIを動かすアクションを行います(メッセージ送信など)
(1)POSTされたBODY部のJSONがvalueでそのまま取得できるようになっています。
(2)x-slack-signature
とx-slack-request-timestamp
を取得できるようになりました。
JSONをparse
扱いやすいようにparseして変更前同様にあつかえるようにします。
変更前のWebhookのパラメータを参照していた箇所はJSONをparseしたJSONモジュールのパラメータに置き換えて更新します。
(integromatで発行したURLをだし直しするのが一番楽かも)
フィルタを追加
ヘッダパラメータの存在チェックと、verifyをフィルタで実施します。
URLからのリクエストの再利用防止で1分チェックを追加しました(実装例は5分)
確認方法の補足
関数
ドキュメントは・・・
不十分感あります(2020/10現在)
使われにくい要因はこういったところにあるのかも。実装と同期を取れるよう調整してほしい。
https://support.integromat.com/hc/en-us/articles/360005771433-String-Functions
URLの変更
integromatでは簡単にURLを変更可能です。
サービスとして素敵だなと思いました。
slackの方で同一のURLを設定し直す時、リクエストを飛ばしてない動作を確認しています。
urlのverificationでは複数のURLを使えると検証がしやすい。
デバッグ(パラメータチェック)
他に方法ないかな、と思いながら出力用に変数をいくつか用意して
パラメータをチェックして調整しました。
本当にOperationの消費が早い
デバッグが終わればこのモジュールは消します。
さいごに
ノーコードと聞くと素人でも簡単にできそうな感じが落とし穴です。
簡単にできるから、感覚で組んで、使用しているシナリオのOperationが跳ね上がるのが
目で見えて、それに対策が組めるかでこのサービスの利用を継続できるかの判断になるはずです。
Operationの削減が課題
手探りで実装を組む、確認する、を工程を繰り返すと、Free枠はあっという間になくなります。多少お金を出すつもりで実装を進めることをお勧めします。
一度の実行で、最低限かかるOperationは履歴から確認できるのでOperationを削減できる方法が見えてきます。
Operation、転送容量の追加購入
Operationや転送量のいずれかが超過した場合に、上のプランにあげるのでなく
追加で購入できるのはいいと思いました。
10,000Operations/人月もあれば、開発は可能な印象です。
https://www.integromat.com/en/pricing
より
参考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