

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

# パブリックキーでの 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'
)
```

------