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

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

最終更新日:Mar 25, 2026

HTTP トリガーに JSON Web トークン (JWT) 認証を設定することで、有効な JWT を持つクライアントのみがご利用の関数にアクセスできるようにします。このアプローチにより、不正アクセスや悪意のある攻撃からご利用の HTTP サービスを保護します。

背景情報

概要

Function Compute は、HTTP トリガーの JWT 認証をサポートしています。JWT (JSON Web トークン、RFC7519) は、トークンベースの便利な認証方式です。ユーザーの状態情報は、クライアントから提供される Token に保存されます。関数 (サーバー) はこの情報を保存する必要がないため、サーバーレスに適した認証方法です。Function Compute は、HTTP トリガーにバインドした公開 JWKS を使用して、HTTP リクエスト内の JWT を認証できます。HTTP トリガーの設定に基づき、claims をパラメーターとして関数に転送できます。これにより、関数は認証を実行する代わりに、ビジネスロジックに集中できます。JWT Token 認証プロセスと基本概念の詳細については、「JWT ベースのトークン認証」および「JWT の概要」をご参照ください。

JWT 認証フロー

image

上の図は、非対称暗号化アルゴリズムを使用する HTTP トリガーの JWT 認証プロセスを示しています。

  1. クライアントは、カスタム認証サービスに認証リクエストを送信します。リクエストには通常、エンドユーザーのユーザー名とパスワードが含まれます。

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

  3. カスタム認証サービスは、応答でトークンをクライアントに返します。クライアントは、この token をローカルにキャッシュします。

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

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

  6. 検証が成功すると、トリガーはリクエストを保護された関数に渡します。

  7. 保護された関数は、ビジネスリクエストを処理し、応答を返します。

  8. HTTP トリガーは、ビジネス応答をクライアントに返します。

前提条件

関数と HTTP トリガーが作成されていること。詳細については、「関数の作成」および「トリガーの作成」をご参照ください。

制限事項

  • JWT は任意の方法で生成および配布できます。Function Compute は、トリガーに設定された公開 JWKS を使用して JWT を認証します。

  • Function Compute は、キー ID (kid) のない JWK をサポートしています。

  • トリガーは、headerQuery パラメーター (GET)、フォームパラメーター (POST)、または cookie からトークンを読み取ることができます。

  • claimsheader、フォームパラメーター (POST)、または cookie として関数に転送できます。

  • Function Compute では、HTTP トリガーに JWKS を設定できます。システムは JWKS を検索し、token 内の kid と一致するキー ID (kid) を持つ公開 JWK を探します。その後、トリガーはこのキーを使用してトークンの署名を検証します。トリガーの JWKS には、kid がない、または `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 署名アルゴリズムは対称暗号化を使用しており、セキュリティが低いです。より安全な非対称暗号化アルゴリズムの使用を推奨します。

    • 非対称暗号化アルゴリズムを使用する場合、セキュリティのため、JWKS には公開鍵情報のみが含まれていることを確認してください。秘密鍵の詳細は含めないでください。

    • token などのリクエスト内の機密情報を保護するために、HTTPS の使用を推奨します。

操作手順

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

  1. Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数管理] > [関数] を選択します。

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

  3. 関数の詳細ページで、トリガー タブをクリックします。HTTP トリガーを見つけ、変更 列の [変更] をクリックします。

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

    1. 認証方法 で、JWT 認証 を選択します。

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

      HTTP トリガーの JWT 認証を設定するには、有効な JWKS を提供する必要があります。独自の JWKS を生成するか、JSON Web Key Generator を検索してオンラインツールを使用できます。たとえば、mkjwk.org を使用できます。PEM 形式のキーがある場合は、jwx などのツールを使用して JWKS 形式に変換できます。

      このトピックでは、mkjwk.org を使用して JWKS を生成する方法を説明します。次の図に示すように、キー生成ページで、[キーの使用法][署名] に、[アルゴリズム][RS256] に、[X.509 を表示][はい] に設定し、[生成] をクリックします。コード内で秘密鍵 (図の ①) を使用して JWT トークンを発行し、安全に保管します。公開鍵 (図の ②) をコピーし、コンソールの JWKS 設定の keys 配列に貼り付けます。

      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 の名前を指定します。

      Token の場所は、ヘッダー、Cookie、クエリパラメーター (GET)、およびフォームパラメーター (POST) をサポートしています。Token の場所としてヘッダーを選択した場合は、[パラメーター名][プレフィックスの削除] も指定する必要があります。Function Compute がトークンを取得すると、[プレフィックスの削除] で指定されたプレフィックスを削除します。

      image

    4. [JWT Claim の変換] セクションで、claim の送信先、元の claim 名、および関数に渡される新しいパラメーター名を指定します。

      マッピングパラメーターの場所は、ヘッダー、Cookie、またはフォームパラメーター (POST) にすることができます。

      image

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

      • [すべて一致]:すべての HTTP リクエストで JWT 検証が必要です。

      • [ホワイトリストモード][リクエストパスのホワイトリスト] 内のパスへのリクエストは JWT 検証をバイパスします。他のすべてのリクエストでは検証が必要です。

      • [ブラックリストモード][リクエストパスのブラックリスト] 内のパスへのリクエストのみ JWT 検証が必要です。他のすべてのリクエストは検証をバイパスします。

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

      • 完全一致

        リクエストパスは、指定されたパスと完全に一致する必要があります。たとえば、[リクエストパスのブラックリスト]/a に設定した場合、パス /a へのリクエストは JWT 検証が必要ですが、パス /a/ へのリクエストは不要です。

      • あいまい一致

        パスの末尾にワイルドカード (*) を使用できます。たとえば、[リクエストパスのブラックリスト]/login/* に設定した場合、/login/ で始まるすべてのパス (/login/a/login/b/c/d など) へのリクエストは JWT 検証が必要です。

ステップ 2: 設定の確認

Postman などのテストツールを使用して、HTTP サービスにアクセスできることを確認します。HTTP トリガーの JWT 設定に基づいて、アクセスアドレス、トークン、その他の情報を設定します。

  1. ステップ 1: JWT 認証の設定」で生成した X.509 PEM 形式の秘密鍵を使用して、JWT トークンを発行します。次の手順では、Python を例に、ローカルスクリプトを使用してトークンを生成する方法を説明します。

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

      pip install 'PyJWT>=2.0'
    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. 関数詳細ページの トリガー タブで、HTTP トリガーのパブリックアクセスアドレスを取得し、Postman の URL フィールドに貼り付けます。

    2. Postman の [Headers] タブで、トークンパラメーターを設定し、[Send] をクリックします。次の例は、トークン設定を示しています。

      パラメーター

      説明

      Key

      Authentication

      [JWT トークン設定] で設定したパラメーター名。

      Value

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

      [JWT トークン設定] で指定されたプレフィックスと、それに続く JWT トークン。この例の値は、プレフィックスが Bearer に設定されていることを前提としています。

      重要

      リクエストヘッダーのトークン値は、[JWT トークン設定] セクションの [プレフィックスの削除] で設定したプレフィックスとスペースで正確に始まっている必要があります。そうでない場合、トリガーはトークンを解析できず、`invalid or expired jwt` エラーを返します。

よくある質問

JWT 認証が有効になっているカスタムドメイン名にアクセスすると、`invalid or expired jwt` エラーが表示されるのはなぜですか?

このエラーは、JWT 認証が失敗したことを示します。考えられる原因は次のとおりです。

  • トークンの署名またはフォーマットが無効です。

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

  • トークン内の kid が、カスタムドメイン名に設定した JWKS と一致しないか、一致した JWK が正しくありません。これにより、トークンが正しく検証されません。

JWT 認証が有効になっているカスタムドメイン名にアクセスすると、`the jwt token is missing` エラーが表示されるのはなぜですか?

このエラーは、Function Compute がカスタムドメイン名の JWT 設定に基づいてトークンを見つけられないことを示します。リクエストにトークンが含まれているか、トークンの場所と名前が正しいかを確認してください。[JWT 設定] を構成する際にトークンの場所をヘッダーに設定した場合は、トークンの前に [プレフィックスの削除] の値とスペースを追加する必要があります。そうしないと、エラーが発生します。

JWT 認証を有効にすると追加料金は発生しますか?

いいえ。Function Compute が提供するゲートウェイ関連機能の課金は、関数の呼び出し回数に基づいています。したがって、JWT 認証を有効にしても追加料金は発生しません。