

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Application Load Balancer を使用して JWTs を検証する
<a name="listener-verify-jwt"></a>

安全なservice-to-service (S2S) またはmachine-to-machine Application Load Balancer (ALB) を設定できます。ロードバランサーは、JWT の発行方法や人間による操作の有無にかかわらず、JWT を検証できます。

 ALB はトークン署名を検証し、'iss' (発行者) と 'exp' (有効期限) の 2 つの必須クレームが必要です。さらに、トークンに存在する場合、ALB は「nbf」（以前ではない) および「iat」（時に発行) クレームも検証します。検証のために最大 10 件の追加クレームを設定できます。これらのクレームは 3 つの形式をサポートしています。
+ 単一文字列: 単一のテキスト値
+ スペース区切り値: スペースで区切られた複数の値 (最大 10 個の値)
+ 文字列配列: テキスト値の配列 (最大 10 個の値)

トークンが有効な場合、ロードバランサーはトークンを使用してリクエストをターゲットにそのまま転送します。それ以外の場合、リクエストを拒否します。

## JWT 検証を使用する準備をする
<a name="validate-access-token-requirements"></a>

以下のタスクを実行します。

1. クライアント ID とクライアントシークレットを発行する IdP にサービスを登録します。

1. サービスへのアクセスをリクエストするには、IdP を別途呼び出します。IdP はアクセストークンで応答します。このトークンは通常、IdP によって署名された JWT です。

1. JSON ウェブキーセット (JWKS) エンドポイントを設定します。ロードバランサーは、設定した既知の場所で IdP によって発行されたパブリックキーを取得します。

1. JWT をリクエストヘッダーに含め、すべてのリクエストで Application Load Balancer に転送します。注: RS256 アルゴリズムのみがサポートされています

## JWT 検証の制限
<a name="jwt-validation-limits"></a>

Application Load Balancer で JWT 検証を使用する場合、JWKS (JSON Web キーセット) エンドポイントは次の要件を満たしている必要があります。
+ **最大レスポンスサイズ**: 150 KB
+ **キーの最大数**: 10 キー

ID プロバイダーからの JWKS レスポンスがこれらの制限のいずれかを超えた場合、Application Load Balancer はリクエストをバックエンドターゲットに転送しません。

ID プロバイダーの JWKS エンドポイントがこれらの制限を超える場合は、アプリケーションコードに JWT 検証を実装するか、小さいキーセットの ID プロバイダーを使用することを検討してください。<a name="configure-jwt-validation-listener-rule"></a>

# コンソールを使用して JWT 検証を設定するには
<a name="configure-jwt-validation-listener-rule"></a>

1. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

1. ナビゲーションペインの [**ロードバランシング**] で [**ロードバランサー**] を選択します。

1. Application Load Balancer を選択し、**リスナー**タブを選択します。

1. HTTPS リスナーを選択し、**ルールの管理**を選択します。

1. [**ルールを追加**] を選択してください。

1. (オプション) ルールの名前を指定するには、**名前とタグ**を展開し、名前を入力します。タグを追加するには、**[タグを追加]** を選択し、タグキーとタグ値を入力します。

1. **条件** で、1～5 の条件値を定義します。

1. (オプション) 変換を追加するには、**変換の追加**を選択し、変換タイプを選択し、一致する正規表現と置換文字列を入力します。

1.  **アクション、事前ルーティング**アクションで、**トークンの検証を選択します。**

   1.  **JWKS エンドポイント**の場合は、JSON ウェブキーセットエンドポイントの URL を入力します。このエンドポイントはパブリックアクセス可能で、JWT 署名の検証に使用されるパブリックキーを返す必要があります。

   1.  **発行者**には、JWT トークンに iss クレームの想定値を入力します。

   1. (オプション) 追加クレームを検証するには、**追加クレームを選択します。**

      1.  **クレーム名**に、検証するクレームの名前を入力します。

      1. **Format** で、クレーム値の解釈方法を選択します。

         1. **単一文字列**: クレームは、指定された 1 つの値と正確に一致する必要があります。

         1. **文字列配列**: クレームは配列の値の 1 つと一致する必要があります。

         1. **スペース区切り値**: クレームには、指定された値を含める必要があるスペース区切り値が含まれています。

      1. Values には****、クレームの想定値を入力します。

      1. 追加のクレームに対して繰り返します (最大 10 クレーム）。

1.  **アクション、ルーティングアクション**で、トークンの検証が成功した後に実行するプライマリアクション **(固定レスポンスに転送、リダイレクト、または返す)** を選択します。

1.  必要に応じてプライマリアクションを設定する 

1.  **[保存]** を選択します。

## CLI を使用して JWT 検証を設定するには
<a name="configure-access-token-validation"></a>

次の [create-rule](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-rule.html) コマンドを使用して、JWT 検証 を設定します。

JWTs を検証するアクションを使用してリスナールールを作成します。リスナーは HTTPS リスナーである必要があります。

**注記**  
JWT 検証を設定するときは、JWKS エンドポイントレスポンスのサイズが 150 KB を超えないか、10 個を超えるキーが含まれていないことを確認してください。これらの制限を超えるレスポンスは、ターゲットへのリクエストの転送を妨げます。

```
aws elbv2 create-rule \
    --listener-arn listener-arn \
    --priority 10 \
    --conditions Field=path-pattern,Values="/login" \
    --actions file://actions.json
```

以下は、 `jwt-validation`アクションと `forward`アクションを指定する `actions.json` ファイルの例です。ID プロバイダーから提供されたドキュメントに従って、サポートされているフィールドを確認してください。

```
--actions '[
    {
        "Type":"jwt-validation",
        "JwtValidationConfig":{
            "JwksEndpoint":"https://issuer.example.com/.well-known/jwks.json",
            "Issuer":"https://issuer.com"
        },
        "Order":1
    },
    {
        "Type":"forward",
        "TargetGroupArn":"target-group-arn",
        "Order":2
    }
]'
```

次の例では、検証する追加のクレームを指定します。

```
--actions '[
    {
        "Type":"jwt-validation",
        "JwtValidationConfig":{
            "JwksEndpoint":"https://issuer.example.com/.well-known/jwks.json",
            "Issuer":"https://issuer.com",
            "AdditionalClaims":[
              {
                  "Format":"string-array",
                  "Name":"claim_name",
                  "Values":["value1","value2"]
              }
            ],
        },
        "Order":1
    },
    {
        "Type":"forward",
        "TargetGroupArn":"target-group-arn",
        "Order":2
    }
]'
```

詳細については、「[Application Load Balancer のリスナールール](listener-rules.md)」を参照してください。