すべてのプロダクト
Search
ドキュメントセンター

Function Compute:HTTP トリガーの JWT 認証の設定

最終更新日:Sep 06, 2025

Function Compute で HTTP トリガーの JSON Web トークン(JWT)認証を設定できます。 この方法では、有効なトークンを持つクライアントのみがトリガーにアクセスできます。 これにより、不正アクセスや悪意のあるアクセスをブロックすることで、HTTP セキュリティが向上します。

バックグラウンド

概要

Function Compute では、HTTP トリガーの JWT 認証を有効にすることができます。 JWT(RFC 7519)は、リクエストを認証するための、使いやすくトークンベースのメソッドです。 ユーザーのステータス情報は、クライアントから提供される tokens に格納されます。 関数またはサーバーはトークンを保存しません。 したがって、このメソッドはサーバーレス アプリケーションに特に適しています。 Function Compute は、HTTP トリガーに設定されている公開 JSON Web Key Set(JWKS)を使用して、HTTP リクエストに対して JWT 認証を実行できます。 Function Compute は、HTTP トリガーの構成に基づいて、claims をパラメーターとして関数に転送します。 この方法では、関数でリクエスト認証は不要になり、ビジネス ロジックに集中できます。 認証プロセスと JWT の tokens の基本情報については、「JWT ベースの認証」および「JSON Web トークンの概要」をご参照ください。

JWT 認証プロセス

前の図は、Function Compute における HTTP トリガーの JWT 認証のワークフローを示しています。 このプロセスでは、非対称暗号化アルゴリズムが使用されます。 次の項目では、プロセスの詳細について説明します。

  1. クライアントは、カスタム認証サービスに認証リクエストを送信します。 ほとんどの場合、クライアントユーザーのユーザー名とパスワードがリクエストで指定されます。

  2. カスタム認証サービスは、リクエスト内のユーザー名やパスワードなどの認証情報を読み取って検証します。 リクエストが検証に合格すると、認証サービスは秘密鍵を使用して標準の token を生成します。

  3. カスタム認証サービスは、token を含むレスポンスをクライアントに転送します。 クライアントは token をオンプレミスのマシンにキャッシュします。

  4. クライアントは、token を含むビジネスリクエストを HTTP トリガーに送信します。

  5. HTTP トリガーは、設定された公開鍵を使用して、リクエスト内の token を検証します。

  6. 検証に合格すると、リクエストは保護された関数に渡されます。

  7. 保護された関数はリクエストを処理し、レスポンスを返します。

  8. HTTP トリガーは、ビジネスレスポンスをクライアントに転送します。

始める前に

関数と、その関数の HTTP トリガーを作成します。 詳細については、「関数の作成」および「ステップ 1: トリガーの作成」をご参照ください。

制限事項

  • ビジネス要件に基づいて JWT を生成および配布できます。 Function Compute は、トリガーに設定されている公開 JWKS を使用して JWT を認証します。

  • kid(キー ID)のない JSON Web Key(JWK)がサポートされています。

  • トークンは、headerquery パラメーター(GET メソッドを使用)、フォーム パラメーター(POST メソッドを使用)、または cookie から読み取ることができます。

  • claimsheadersquery パラメーター(GET メソッドを使用)、フォーム パラメーター(POST メソッドを使用)、および cookies として関数に転送できます。

  • HTTP トリガーの JWKS を設定できます。 JWKS が設定されると、システムは JWKS 内で、kidtoken の kid と同じ公開 JWK を検索し、その公開 JWK を使用して token の署名を検証します。 トリガーの JWKS には、kid が存在しないか空の文字列に設定されている JWK を最大 1 つ含めることができます。

    次の表に、Function Compute の JWT でサポートされているアルゴリズムを示します。

    署名アルゴリズム

    alg

    RSASSA-PKCS1-V1_5

    RS256、RS384、または RS512

    RSASSA-PSS

    PS256、PS384、または PS512

    楕円曲線(ECDSA)

    ES256、ES384、または ES512

    HMAC

    HS256、HS384、または HS512

    EdDSA

    EdDSA

    重要
    • ハッシュベースのメッセージ認証コード(HMAC)署名アルゴリズムは、セキュリティが弱い対称暗号化を使用します。 セキュリティを強化するために、非対称暗号化アルゴリズムを使用することをお勧めします。

    • 非対称暗号化アルゴリズムを使用する場合は、セキュリティ上の理由から、JWT に秘密鍵ではなく公開鍵に関する情報のみを含める必要があります。

    • トークンの漏洩を防ぐために、HTTPS を使用して、リクエスト内の tokens などの機密情報を保護することをお勧めします。

手順

ステップ 1: JWT 認証の設定

  1. Function Compute コンソール にログオンします。 左側のナビゲーションウィンドウで、[関数] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数をクリックします。

  3. 関数詳細ページの下部にある [構成] タブをクリックします。 左側のナビゲーションウィンドウで、[トリガー] をクリックします。 表示されるページで、HTTP トリガーを見つけ、[アクション] 列の [変更] をクリックします。

  4. トリガーの変更パネルで、次のパラメーターを設定し、[OK] をクリックします。

    1. [認証方法][JWT 認証] に設定します。

      image

    2. [JWKS] を設定します。

      HTTP トリガーの JWT 認証を設定するには、有効な JWKS を提供する必要があります。 JWKS は手動で生成することも、Web ブラウザーで JSON Web Key generator を検索して mkjwk.org などのオンライン ジェネレーターを使用することもできます。 Privacy Enhanced Mail(PEM)形式のキーがある場合は、jwx などのツールを使用して、キーを JWKS 形式に変換できます。

      この例では、mkjwk.org を使用して JWKS を生成します。 次の図に示す例では、[キーの使用][署名] に、[アルゴリズム][RS256] に、[X.509 を表示][はい] に設定し、[生成] をクリックして秘密鍵を生成します。 コードで秘密鍵を使用して JWT を発行する必要があります。 公開鍵の内容をコピーし、コピーした内容をコンソールの JWKS 入力ボックスに貼り付けます。

      image.png

      image

      次のサンプルコードは、設定された JWKS を示しています。

      {
          "keys": [
              {
                  "alg": "RS256", // 署名アルゴリズム
                  "e": "AQAB",
                  "kty": "RSA",
                  "n": "u1LWgoomekdOMfB1lEe96OHehd4XRNCbZRm96RqwOYTTc28Sc_U5wKV2umDzolfoI682ct2BNnRRahYgZPhbOCzHYM6i8sRXjz9Ghx3QHw9zrYACtArwQxrTFiejbfzDPGdPrMQg7T8wjtLtkSyDmCzeXpbIdwmxuLyt_ahLfHelr94kEksMDa42V4Fi5bMW4cCLjlEKzBEHGmFdT8UbLPCvpgsM84JK63e5ifdeI9NdadbC8ZMiR--dFCujT7AgRRyMzxgdn2l-nZJ2ZaYzbLUtAW5_U2kfRVkDNa8d1g__2V5zjU6nfLJ1S2MoXMgRgDPeHpEehZVu2kNaSFvDUQ",
                  "use": "sig" // 使用目的
              }
          ]
      }
    3. [JWT トークンの構成] セクションで、token の読み取り位置と名前を選択します。

      token の 読み取り位置 パラメーターは、ヘッダー、Cookie、クエリ パラメーター、またはフォーム パラメーターに設定できます。 token の 読み取り位置 パラメーターをヘッダーに設定する場合は、[パラメーター名][プレフィックスの削除] パラメーターを指定する必要があります。 Function Compute がトークンを取得すると、[プレフィックスの削除] パラメーターで指定されたプレフィックスが削除されます。

      image

      重要

      [プレフィックスの削除] パラメーターを設定する場合は、プレフィックスの後にスペースがあるかどうかを確認してください。 指定したプレフィックスの後にスペースを追加することをお勧めします(例: Bearer )。

    4. [JWT クレームの変換] セクションで、関数にパラメーターを渡す位置、パラメーターの元の名前、およびパラメーターが関数に渡された後の新しい名前を選択します。

      マッピング パラメーターの位置 をヘッダー、Cookie、クエリ パラメーター、またはフォーム パラメーターに設定できます。

      image

    5. リクエストのマッチングモードを設定します。

      • [すべて一致]: すべての HTTP リクエストは JWT を使用して検証する必要があります。

      • [ホワイトリストモード]: [リクエストパスのホワイトリスト] で指定されたパスから送信された HTTP リクエストには、JWT 認証は不要です。 その他のリクエストには JWT 認証が必要です。

      • [ブラックリストモード]: [リクエストパスのブラックリスト] で指定されたパスから送信された HTTP リクエストには、JWT 認証が必要です。 その他のリクエストには JWT 認証は不要です。

      [ホワイトリストモード][ブラックリストモード] は、次のマッチングモードをサポートしています。

      • 完全一致

        パスは、指定されたパスと完全に同じ場合にのみ一致します。 たとえば、[リクエストパスのブラックリスト]/a に設定した場合、/a から送信されたリクエストには JWT 認証が必要です。 /a/ から送信されたリクエストには JWT 認証は不要です。

      • あいまい一致

        値を、ワイルドカードとしてアスタリスク(*)が付加されたパスに設定できます。 たとえば、[リクエストパスのブラックリスト] パラメーターを /login/* に設定した場合、/login/ で始まるパス(/login/a/login/b/c/d など)から送信されたリクエストには JWT 認証が必要です。

ステップ 2: JWT 構成の検証

このセクションでは、HTTP トリガーの JWT 構成に基づいて、HTTP サービスに想定どおりにアクセスできるかどうかをツールを使用して検証する方法について説明します。 このセクションでは、Postman を使用します。

  1. ステップ 1 で生成された X.509 PEM 形式の秘密鍵を秘密鍵として使用して、JWT を発行します。 次の手順では、Python を例として使用して、ローカル スクリプトを使用してトークンを生成するプロセスを示します。

    1. PyJWT モジュールをインストールします。

      pip install PyJWT
    2. オンプレミスのマシンで次の Python スクリプトを実行して、JWT を生成します。

      import jwt
      import time
      
      private_key = """
      -----BEGIN PRIVATE KEY-----
      <ステップ 1 で生成された X.509 PEM 形式の秘密鍵を使用します。>
      -----END PRIVATE KEY-----
      """
      
      headers = {
          "alg": "RS256", // 署名アルゴリズム
          "typ": "JWT"  // トークンタイプ
      }
      
      payload = {
          "sub": "1234567890", // サブジェクト
          "name": "John Snow", // 名前
          "iat": int(time.time()),   # トークンが発行された時刻。
          "exp": int(time.time()) + 60 * 60,   # トークンの有効期間を 1 時間に設定します。
      }
      
      
      encoded = jwt.encode(payload=payload, key=private_key.encode(), headers=headers)
      print("Generated token: %s" % encoded) // 生成されたトークン
      
  2. Postman を使用して、HTTP サービスに想定どおりにアクセスできるかどうかを検証します。

    1. [構成] > [トリガー] ページからインターネット URL を取得し、Postman に入力します。

    2. Postman の ヘッダー タブでトークン パラメーターを設定します。 次に、[送信] をクリックします。 次の表に、トークンの構成を示します。

      名前

      説明

      キー

      Authentication

      [JWT トークンの構成] セクションで指定したトークンの名前。

      Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiSm9uIFNub3ciLCJhZG1pbiI6dHJ1ZSwiZXhwIjo0ODI5NTk3NjQxfQ.eRcobbpjAd3OSMxcWbmbicOTLjO2vuLR9F2QZMK4rz1JqfSRHgwQVqNxcfOIO9ckDMNlF_3jtdfCfvXfka-phJZpHmnaQJxmnOA8zA3R4wF4GUQdz5zkt74cK9jLAXpokwrviz2ROehwxTCwa0naRd_N9eFhvTRnP3u7L0xn3ll4iOf8Q4jS0mVLpjyTa5WiBkN5xi9hkFxd__p98Pah_Yf0hVQ2ldGSyTtAMmdM1Bvzad-kdZ_wW0jcctIla9bLnOo-Enr14EsGvziMh_QTZ3HQtJuToSKZ11xkNgaz7an5de6PuF5ISXQzxigpFVIkG765aEDVtEnFkMO0xyPGLg

      JWT 値。 [JWT トークンの構成] の プレフィックスの削除 パラメーターの値が含まれています。 この例では、プレフィックスの削除 パラメーターは Bearer に設定されています。

      重要

      リクエストヘッダーの JWT パラメーターのプレフィックスとスペースは、[JWT トークンの構成] セクションの [プレフィックスの削除] パラメーターのプレフィックスとスペースと同じである必要があります。 それ以外の場合、トリガーがトークンを解析するときにエラーが発生し、「無効または期限切れの jwt」エラーが報告されます。

よくある質問

カスタム ドメイン 名の JWT 認証を有効にした後、カスタム ドメイン名にアクセスすると、「無効または期限切れの jwt」が返されるのはなぜですか?

このメッセージは、JWT 認証に失敗したことを示しています。 考えられる原因は次のとおりです。

  • トークンの署名または形式が無効です。

  • トークンの期限が切れています。

  • トークンのキー ID が、カスタム ドメイン名に設定した JWKS と一致しないか、一致した JWK が正しくありません。

カスタム ドメイン 名の JWT 認証を有効にした後、カスタム ドメイン名にアクセスすると、「jwt トークンがありません」が返されるのはなぜですか?

このメッセージは、Function Compute がカスタム ドメイン名の JWT トークンの構成に基づいてトークンを見つけられないことを示しています。 リクエストにトークンが含まれているかどうか、または読み取り位置または名前が正しく指定されているかどうかを確認してください。 [JWT トークンの構成] セクションの 読み取り位置 パラメーターをヘッダーに設定した場合は、トークンを設定するときに、[プレフィックスの削除] パラメーターの値を追加し、値と JWT トークンの間にスペースを空ける必要があります。 それ以外の場合、エラーが返されます。

JWT 認証は課金されますか?

いいえ、JWT 認証は課金されません。 デフォルトでは、Function Compute によって提供されるゲートウェイ関連の機能は、関数の呼び出し回数に基づいて課金されます。 したがって、機能を有効にするかどうかに関係なく、JWT 認証は課金されません。