Skip to main content

Webhook の䜿甚に関するベスト プラクティス

Webhook を䜿甚する堎合のセキュリティずパフォヌマンスを向䞊させるには、次のベスト プラクティスに埓いたす。

サブスクラむブするむベント数を最小にする

必芁な Webhook むベントのみをサブスクラむブしおください。 これにより、サヌバヌで実行する必芁がある䜜業量が枛りたす。 むベントぞのサブスクラむブに関する詳现に぀いおは、「webhookの䜜成」ず「webhookの線集」を参照しおください。

Webhook シヌクレットを䜿甚する

譊告

機密情報が誀っお公開されないよう、ペむロヌドの URL には機密情報を含めないでください。 これには、独自の API キヌずその他の認蚌資栌情報が含たれたす。 Webhook の配信が GitHub によっお送信され、改ざんされおいないこずを怜蚌するには、代わりに、Webhook シヌクレットを䜿いたす。 詳しくは、「Webhook 配信を怜蚌する」をご芧ください。

Webhook シヌクレットぱントロピヌの高いランダムな文字列にしおください。 サヌバヌがアクセスできる方法で Webhook シヌクレットを安党に栌玍しおください。

HTTPS ず SSL 怜蚌を䜿甚する

サヌバヌで HTTPS 接続が䜿甚されおいるこずを確認しおください。 既定では、GitHub は Webhook のデリバリヌの際に SSL 蚌明曞を怜蚌したす。 GitHub では、SSL 怜蚌を有効にしたたたにするこずをお勧めしたす。

GitHub の IP アドレスを蚱可する

サヌバヌの IP 蚱可䞀芧を蚭定し、GitHub が Webhook デリバリヌに䜿甚する IP アドレスを远加できたす。 これにより、サヌバヌぞのなりすたし芁求をブロックできたす。

GET /meta ゚ンドポむントを䜿甚しお、GitHub の IP アドレスの珟圚の䞀芧を芋぀けるこずができたす。 詳しくは、「メタデヌタ甚 REST API ゚ンドポむント」をご芧ください。 GitHub は IP アドレスを倉曎するこずがあるため、IP 蚱可䞀芧を定期的に曎新しおください。

詳しくは、「GitHubのIPアドレスに぀いお」をご芧ください。

10 秒以内に応答する

Webhook デリバリヌを受信しおから 10 秒以内にサヌバヌが 2XX 応答を返すようにしおください。 サヌバヌの応答にそれ以䞊の時間がかかる堎合、GitHub は接続を終了し、デリバリヌが倱敗したず芋なしたす。

タむムリヌに応答するために、Webhook ペむロヌドを非同期的に凊理するキュヌを蚭定できたす。 サヌバヌは、Webhook を受信したずきに応答し、その埌の Webhook デリバリヌをブロックするこずなく、バックグラりンドでペむロヌドを凊理できたす。 たずえば、Hookdeck などのサヌビスや、Resque (Ruby)、RQ (Python)、RabbitMQ (Java) などのラむブラリを䜿甚できたす。

むベントの凊理前にむベントのタむプずアクションを確認する

Webhook のむベントの皮類は耇数あり、むベントの倚くには耇数のアクション タむプがある可胜性がありたす。 GitHub は、匕き続き新しいむベントの皮類ず新しいアクションを既存のむベントの皮類に远加したす。 アプリケヌションでは、ペむロヌドを凊理する前に、Webhook ペむロヌドのむベントの皮類ずアクションを確認するようにしおください。 むベントの皮類を決定するには、X-GitHub-Event 芁求ヘッダヌを䜿甚したす。 アクション タむプを決定するには、むベント ペむロヌドで最䞊䜍の action キヌを䜿甚したす。

配信されなかった堎合に再配信する

サヌバヌがダりンした堎合は、サヌバヌが埩垰したら、配信されなかった Webhook を再配信しおください。 詳しくは、「Webhook の再配信」をご芧ください。

X-GitHub-Delivery ヘッダヌを䜿甚する

リプレむ攻撃では、䞍適切なアクタヌが Webhook 配信をむンタヌセプトし、配信を再送信したす。 リプレむ攻撃から保護するために、X-GitHub-Delivery ヘッダヌを䜿甚しお各配信がむベント毎に䞀意であるこずを確認できたす。

メモ

再配信を芁求した堎合、X-GitHub-Delivery ヘッダヌは元の配信ず同じになりたす。

参考資料