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

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

最終更新日:Apr 21, 2026

Function Compute では、HTTP トリガーに対して JSON Web トークン (JWT) 認証を設定できます。この設定により、有効な JWT を持つクライアントのみが関数にアクセスできるようになり、HTTP サービスのセキュリティが強化され、不正アクセスや悪意のある攻撃を防ぐことができます。

背景情報

概要

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

JWT 認証の仕組み

上の図は、非対称暗号化アルゴリズムを使用する Function Compute の HTTP トリガーにおける JWT 認証ワークフローのシーケンスを示しています。手順は以下の通りです。

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

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

  3. カスタム権限付与サービスは、トークンを含む応答をクライアントに返します。クライアントは、この token をローカルにキャッシュする必要があります。

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

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

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

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

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

前提条件

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

制限事項

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

  • Function Compute は、kid (キー ID) を持たない JSON Web Key (JWK) をサポートしています。

  • トリガーは、リクエストの header (ヘッダー)、Query (クエリ) パラメーター (GET リクエストの場合)、フォームパラメーター (POST リクエストの場合)、または cookie からトークンを読み取ることができます。

  • claims (クレーム) を header (ヘッダー)、フォームパラメーター (POST リクエストの場合)、または cookie として関数に転送できます。

  • Function Compute では、HTTP トリガーに JWKS を設定できます。システムは JWKS 内で、token 内の kid と一致する公開 JWK を検索します。その後、この公開鍵を使用して token の署名を検証します。トリガーの JWKS には、kid が欠落しているか空文字列である JWK を最大 1 つまで含めることができます。

    Function Compute の JWT は、以下のアルゴリズムをサポートしています。

    署名アルゴリズム

    Alg の値

    RSASSA-PKCS1-V1_5

    RS256, RS384, RS512

    RSASSA-PSS

    PS256, PS384, PS512

    Elliptic Curve (ECDSA)

    ES256, ES384, ES512

    HMAC

    HS256, HS384, HS512

    EdDSA

    EdDSA

    重要
    • HMAC 署名アルゴリズムは対称暗号化を使用しており、セキュリティが低いです。より安全な非対称暗号化アルゴリズムを使用することを推奨します。

    • 非対称暗号化アルゴリズムを使用する場合、セキュリティのため、JWT には公開鍵情報のみを含めるべきです。秘密鍵情報を含めないことを推奨します。

    • トークンの漏洩を防ぐため、リクエスト内の 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 クレーム変換 セクションで、パラメーターの転送先、元のパラメーター名、および関数の新しいパラメーター名を指定します。

      クレームをヘッダー、Cookie、またはフォームパラメーター (POST) にマッピングできます。

      image

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

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

      • ホワイトリストモードリクエストパスのホワイトリスト で指定されたパスへの HTTP リクエストには JWT 認証は不要です。他のすべてのリクエストには JWT 認証が必要です。

      • ブラックリストモードリクエストパスのブラックリスト で指定されたパスへの HTTP リクエストには JWT 認証が必要です。他のすべてのリクエストには JWT 認証は不要です。

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

      • 完全一致

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

      • あいまい一致

        パスにワイルドカード (*) を使用できますが、ワイルドカード (*) はパスの末尾に配置する必要があります。たとえば、リクエストパスのブラックリスト/login/* に設定した場合、/login/ をプレフィックスとするすべてのパス (例: /login/a/login/b/c/d) へのリクエストには JWT 認証が必要です。

ステップ 2: 設定の確認

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

  1. ステップ 1 で生成した 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": "田中太郎",
          "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 で、ヘッダーにトークンパラメーターを設定し、[送信] をクリックします。以下の表に、トークン設定の例を示します。

      パラメーター

      説明

      キー

      Authentication

      JWT トークンの設定 セクションで指定したパラメーター名。

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

      JWT トークンの設定 セクションで指定した [プレフィックスの削除] パラメーターの値と JWT トークンを連結したもの。この例の値は、[プレフィックスの削除] が Bearer に設定されていることを前提としています。

      重要

      リクエストヘッダー内の JWT パラメーターのプレフィックスとスペースは、JWT トークンの設定 セクションで指定した プレフィックスの削除 の値と完全に一致する必要があります。一致しない場合、トリガーはトークンを解析できず、invalid or expired jwt エラーを返します。

よくある質問

「invalid or expired jwt」というエラーが表示されるのはなぜですか?

Function Compute はトークンを受信しましたが、検証中に拒否しました。考えられる原因は次のとおりです。

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

  • トークンの有効期限が切れています。新しいトークンを生成してください。

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

「the jwt token is missing」というエラーが表示されるのはなぜですか?

Function Compute がリクエスト内でトークンを見つけられませんでした。リクエストにトークンが存在すること、および [JWT トークン設定][読み取り位置] とパラメーター名がトークンを送信している場所と完全に一致していることを確認してください。[読み取り位置]ヘッダーに設定されている場合、ヘッダーの値には [プレフィックスの削除] の値とそれに続くスペース、そしてトークンが含まれている必要があります。

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

いいえ。JWT 認証に追加料金はかかりません。Function Compute は、JWT 認証が有効になっているかどうかに関わらず、関数呼び出しの回数に基づいて課金されます。