

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

# パブリックキーでの JSON ウェブトークン (JWT) の使用
<a name="create-index-access-control-tokens-jwtpublic"></a>

次の例は、インデックスを作成するときに、パブリックキーを使用した JSON ウェブトークン (JWT) を使用してユーザーアクセスコントロールを行う方法を示しています。JWT の詳細については、[jwt.io](http://jwt.io) を参照してください。

------
#### [ Console ]

1. **[Create index]** (インデックスの作成) を選択して、新しいインデックスの作成を開始します。

1. **[Specify index details]** (インデックスの詳細の指定) ページで、インデックスに名前と説明を付けます。

1. **[IAM role]** (IAM ロール) には、ロールを選択するか、または **[Create a new role]** (新規ロールの作成) を選択し、新しいロールを作成してロール名を指定します。 IAM ロールには、プレフィックス「AmazonKendra-」が付いています。

1. その他のフィールドはすべてデフォルトのままにしておきます。[**次へ**] を選択します。

1. **[Configure user access control]** (ユーザーアクセスコントロールの設定) ページの、**[Access control settings]** (アクセスコントロールの設定) で、**[Yes]** (はい) を選択し、アクセス制御にトークンを使用します。

1. **[Token configuration]** (トークンの設定) で、**[JWT with public key]** (パブリックキーを使用したJWT) を **[Token type]** (トークンタイプ) として選択します。

1. **[Parameters for signing public key]** (パブリックキーに署名するためのパラメータ) で、**[Type of secret]** (シークレットのタイプ) を選択します。既存の AWS Secrets Manager シークレットを使用するか、新しいシークレットを作成できます。

   新しいシークレットを作成するには、**[New]** (新規) を選択し、次に、以下のステップを実行します。

   1. **新しい AWS Secrets Manager シーク**レットで、**シークレット名**を指定します。プレフィックス `AmazonKendra-` は、パブリックキーを保存すると追加されます。

   1. **[Key ID]** (キー ID) を指定します。キー ID は、トークンの JSON ウェブ署名をセキュア化するために使用されたキーを示すヒントです。

   1. トークンに署名 **[Algorithm]** (アルゴリズム) を選択します。これは、ID トークンの保護に使用される暗号化アルゴリズムです。RSA の詳細については、[RSA Cryptography](https://tools.ietf.org/html/rfc3447) を参照してください。

   1. **[Certificate attributes]** (証明書属性) で、*オプション*の **[Certificate chain]** (証明書チェーン) を指定します。証明書チェーンは、証明書のリストで構成されます。サーバーの証明書で始まり、ルート証明書で終了します。

   1. *オプション* **[Thumbprint or fingerprint]** (サムプリントまたはフィンガープリント) を指定します。これは、すべての証明書データとその署名に対してコンピューティングされた証明書のハッシュです。

   1. **[Exponent]** (指数) を指定します。これは RSA パブリックキーの指数値です。これは、Base64urlUInt でエンコードされた値として表されます。

   1. **[Modulus]** (係数) を指定します。これは RSA パブリックキーの指数値です。これは、Base64urlUInt でエンコードされた値として表されます。

   1. **[Save key]** (キーを保存) を選択して新しいキーを保存します。

1. **[Advanced configuration]** (詳細設定) の *[Optional]* (オプション):

   1. **[Username]** (ユーザーネーム) を指定して ACL チェックで使用します。

   1. 1 つ以上の **[Groups]** (グループ) を指定して、ACL チェックで使用します。

   1. トークン発行者を検証する **[Issuer]** (発行者) を指定します。

   1. **[Client Id(s)]** (クライアント ID) を指定します。JWT のオーディエンスと一致する正規表現を指定する必要があります。

1. **[Provisioning details]** (プロビジョニングの詳細) ページで、**[Developer edition]** (デベロッパーエディション) を選択します。

1. **[Create]** (作成) を選択してインデックスを作成します。

1. インデックスが作成されるまで待ちます。 はインデックスのハードウェアを Amazon Kendra プロビジョニングします。この演算には時間がかかる場合があります。

------
#### [ CLI ]

JWT は、 AWS Secrets Managerの内部のパブリックキーで使用できます。 Secrets Manager ARN が必要で、 Amazon Kendra ロールが Secrets Manager リソース`GetSecretValue`の にアクセスできる必要があります。 Secrets Manager リソースを で暗号化する場合 AWS KMS、ロールには復号アクションへのアクセス権も必要です。

JSON 入力ファイル AWS CLI を使用して でインデックスを作成するには、まず目的のパラメータを使用して JSON ファイルを作成します。

```
{
    "Name": "user-context",
    "Edition": "ENTERPRISE_EDITION",
    "RoleArn": "arn:aws:iam::account id:role:/my-role",
    "UserTokenConfigurationList": [
        {
            "JwtTokenTypeConfiguration": {
                "KeyLocation": "SECRET_MANAGER",
                "Issuer": "optional: specify the issuer url",
                "ClaimRegex": "optional: regex to validate claims in the token",
                "UserNameAttributeField": "optional: user",
                "GroupAttributeField": "optional: group",
                "SecretManagerArn": "arn:aws:secretsmanager:us-west-2:account id:secret:/my-user-context-secret
            }
        }
    ],    "UserContextPolicy": "USER_TOKEN"
}
```

デフォルトのユーザーフィールド名とグループフィールド名を上書きできます。`UserNameAttributeField` のデフォルト値は「ユーザー」です。`GroupAttributeField` のデフォルト値は「グループ」です。

次に、入力ファイルを使用して、`create-index` を呼び出します。例えば、JSON ファイルの名前が `create-index-openid.json` の場合、以下を使用できます。

```
aws kendra create-index --cli-input-json file://create-index-openid.json
```

シークレットの形式は次のとおりです Secrets Manager。

```
{
  "keys": [
    {
      "alg": "RS256|RS384|RS512",
      "kty": "RSA", //this can be RSA only for now
      "use": "sig", //this value can be sig only for now
      "n": "modulus of standard pem",
      "e": "exponent of standard pem",
      "kid": "key_id",
      "x5t": "certificate thumprint for x.509 cert",
      "x5c": [
        "certificate chain"
      ]
    }
  ]
}
```

JWT の詳細については、[jwt.io](http://jwt.io) を参照してください。

------
#### [ Python ]

```
response = kendra.create_index(
    Name='user-context',
    Edition='ENTERPRISE_EDITION',
    RoleArn='arn:aws:iam::account id:role:/my-role',
    UserTokenConfigurationList=[
        {
            "JwtTokenTypeConfiguration": {
                "KeyLocation": "URL",
                "Issuer": "optional: specify the issuer url",
                "ClaimRegex": "optional: regex to validate claims in the token",
                "UserNameAttributeField": "optional: user",
                "GroupAttributeField": "optional: group",
                "SecretManagerArn": "arn:aws:secretsmanager:us-west-2:account id:secret:/my-user-context-secret"
            }
        }
    ],
    UserContextPolicy='USER_TOKEN'
)
```

------