ブログ · · 約 14 分で
複数のサービスの Webhook の一元管理:勧める理由と進め方
請求・会員・予約など
要点
- 複数の
サービスから Webhook を 送るなら、 送信の 仕組みは 会社で 1 つに まとめる 方が、 署名・再送・記録・SSRF の 対策を 1 回作れば 済み、 受け手にも 同じ形で 届きます。 - Stripe・GitHub・Twilio・Shopify は、
製品や 種類が 違っても、 同じ ヘッダー・ 同じ 署名・ 同じ 再送の 仕組みで Webhook を 送っています。 - 送る
サービスが 1 つで イベントも 少ないなら、 まとめる 必要は ありません。 まとめる 場合は、 1 つの 送信先の 障害が ほかの サービスに 広がらない 分け方と、 受け手を 壊さない 移行の 順番が 要ります。
複数の
この
サービスごとに作ったときに起きること
結論と
たとえば、X-Signature に
| 項目 | サービスごとに |
一元 |
|---|---|---|
| 署名 | ヘッダー名・署名する |
1 つの |
| 再送 | 回数・間隔・成功の |
同じ |
| 重複の |
ID の |
どの |
| 送信の |
サービスごとの |
1 か所で |
| 失敗の |
通知の |
同じ |
| SSRF の |
サービスごとに |
1 か所で |
| 鍵の |
手順が |
同じ |
| 受け手向けの |
サービスごとに |
1 つの |
一元管理を勧める理由
理由は
署名の形が 1 つになる
Webhook の
同じ
再送と重複の扱いがそろう
受け手がwebhook-id を
サービスごとに
記録と監視が 1 か所になる
顧客から
失敗の
セキュリティの対策を 1 回で済ませられる
Webhook を
この
受け手から見て 1 社の Webhook になる
顧客は、
同じ部品を何度も作らずに済む
Webhook の
CNCF の
公開されている例
Webhook を
| 会社 | そろっている |
出典 |
|---|---|---|
| Stripe | 決済・請求・Connect などのStripe-Signature、 |
Stripe の |
| GitHub | リポジトリ・組織・GitHub App・Marketplace・Sponsors などのX-GitHub-Delivery・X-Hub-Signature-256 など)GitHub-Hookshot/ で |
Webhook の |
| Twilio | Event Streams で、 |
Event Streams |
| Shopify | どのX-Shopify-Topic・X-Shopify-Webhook-Id・X-Shopify-Hmac-Sha256 が |
Shopify の |
受け手の
一元管理が向かない場合
次の
- Webhook を
送る サービスが 1 つで、 今後も 増える 予定が ない - 送信先が
社内の 1〜2 か所だけで、 顧客に 送っていない - イベントの
種類が 数個で、 送信の 記録を 顧客に 見せる 必要が ない - 送る
側の サービスが 別の 会社に 売却・ 分社される 予定で、 仕組みを 共有すると 切り離しの 手間が 増える
1 つ目と
まとめたときの弱点と手当て
弱点は、
| 弱点 | 手当て |
|---|---|
| 送信の |
送信の |
| 1 社の |
送信先ごとに |
| 1 つの |
API の |
| 権限が |
サービスごとに |
| 移行の |
1 サービスずつ移し、 |
受け付けの
社内の基盤か、配信サービスか
どちらでも
| 観点 | 社内の |
配信サービス |
|---|---|---|
| 向く |
基盤の |
基盤の |
| 初めに |
送信の |
各サービスから |
| 毎月の |
障害の |
通数に |
| データの |
自社の |
サービスの |
配信サービスには
一元管理の進め方
- 今の
送信を : Webhook を棚卸しする 送っている サービス、 イベントの 種類、 署名の 形、 再送の 仕様、 送信先の 数、 受け手向けの 文書を 一覧に する - 共通の
決めごとを : 署名の文書に する 形 (Standard Webhooks を 勧めます) 、 イベントの 種類の 名前の 付け方、 再送の 間隔、 タイムアウト、 成功の 判定、 自動停止の 条件 - 仕組みを
決める : 社内の基盤を 作るか、 配信サービスを 使うかを、 上の 表で 決める。 サービスごとに 記録と 権限を 分けられる ことを 条件に 入れる - 失敗の
通知の : サービスごとの宛先を 決める 担当と、 全体を 見る 当番の 両方に 届くように する - 1 サービスずつ移す: 新しい
イベントの 種類から、 または 送信先の 少ない サービスから 始める。 移す間は 新旧の 両方の 署名を 付け、 受け手が 切り 替えた ことを 確かめてから 古い 形を やめる - 受け手向けの
文書と : 署名の画面を 1 つに する 検証、 再送の 仕様、 送信元 IP、 送信先の 登録の 画面を 1 か 所に まとめる
イベントの
Webhook Admin での一元管理
Webhook Admin では、
- 全プロジェクトの
横断 : 組織の画面で、 全プロジェクトの 直近 24 時間の 送信数・成功率・対応が 要る 送信先を まとめて 見られます。 本番の 送信の 記録も、 全プロジェクトを 横断して 探せます - 同じ形の
署名と : どの再送 プロジェクトからの 送信も Standard Webhooks の 形で 署名し、 既定で 最初の 送信を 含めて 8 回・約 28 時間かけて 再送します。 失敗が 5 日続いた 送信先は 自動で 無効にします - 失敗の
通知 : Slack・Teams・Chatwork・メール・Webhook に、 プロジェクトごとにも、 組織で まとめて 1 か所にも 送れます - SSRF の
対策 : 送信先のURL を 登録時に 検査し、 送る 直前にも 名前解決の 結果を 検査します - 顧客向けの
画面 : Starter から、顧客自身が 送信先・ 受け取る イベント・鍵・記録・再送を 扱える 画面を 自社の 画面に 埋め込めます - 操作の
記録と : 組織のAPI・MCP 操作の 記録を 残します。 公開 API と MCP から、 送信先の 登録や 失敗した 送信の 再送を 行えます
プロジェクトの
よくある質問
サービスが 2 つしかなくても、まとめる意味はありますか。
受け手が
まとめると、1 か所の障害で全サービスの送信が止まりませんか。
止まらないように
すでに各サービスで別の形の署名を送っています。受け手を壊さずに移れますか。
移れます。