シークレットを使用して Webhook ペイロードをセキュリティで保護する

完了

関数は、ペイロードを受信するように構成されると、構成したエンドポイントに送信されるペイロードをリッスンするようになります。 セキュリティ上の理由から、GitHub から送信される要求に限定することをお勧めします。 これを行う方法はいくつかあります。 たとえば、GitHub の IP アドレスからの要求を承認することができます。 より簡単な方法は、シークレット トークンを設定し、そのトークンを使用して要求を検証することです。

このシナリオ例では、IT 部門の管理者は、あなたが Azure Functions アプリ内に作成した、Webhook によってトリガーされる関数に満足しています。 会社の Wiki の更新に関するすべての情報は、Gollum イベントがトリガーされるたびに、その関数によって解析され、管理者に送信されます。 管理者は、GitHub から渡される情報がどのようにセキュリティで保護されているかをたずねました。 あなたは、情報をセキュリティで保護する方法を見つけ、それが更新を送信しているのが GitHub であることを検証するように求められました。

このユニットでは、シークレットを使用して Webhook のペイロードをセキュリティで保護し、GitHub からのペイロードを検証する方法について説明します。

Webhook のシークレット

Webhook のシークレットを設定すると、ペイロード URL に送信された POST 要求が GitHub からのものであることを確認できます。 シークレットを設定すると、Webhook の POST 要求で x-hub-signature ヘッダーを受け取ります。

GitHub では、Webhook を設定したリポジトリに移動してから Webhook を編集することで、"シークレット" フィールドを設定できます。 その方法については、次の演習の例で説明します。

GitHub からのペイロードを検証する

シークレット トークンが設定されると、GitHub はそれを使用して各ペイロードのハッシュ署名を作成します。 このハッシュ署名は、ヘッダーの各要求と共に x-hub-signature として渡されます。

関数が要求を受け取ったら、シークレットを使用してハッシュを計算し、それが要求ヘッダーのハッシュと一致することを確認する必要があります。 GitHub はハッシュの計算に HMAC SHA1 の 16 進数のダイジェストを使用するので、シークレットのキーとペイロードの本文を使用して、これと同じ方法でハッシュを計算する必要があります。 ハッシュ署名は sha1= というテキストから始まります。