

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

# 共有シークレットで JSON ウェブトークン (JWT) を使用する
<a name="create-index-access-control-tokens-jwtshared"></a>

次の例は、インデックスを作成するときに、共有シークレットトークンを使用した JSON ウェブトークン (JWT) を使用してユーザーアクセスコントロールを行う方法を示しています。

------
#### [ 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 shared secret]** (共有シークレットを使用したJWT) を **[Token type]** (トークンタイプ) として選択します。

1. **[共有シークレットに署名するためのパラメータ]** で、**[シークレットのタイプ]** を選択します。既存の 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. base64 URL でエンコードされたシークレットを入力して、**[共有シークレット]** を指定します。また、**[シークレットの生成]** を選択して、自分のシークレットを生成できます。シークレットが base64 URL でエンコードされていることを確認する必要があります。

   1. (オプション) 共有シークレットが有効になるタイミングを指定します。**シークレットの有効開始日、有効期限、またはその両方を指定できます。シークレットは、指定された時間間隔の間、有効です。

   1. **[Save secret]** (シークレットの保存) を選択して新しいシークレットを保存します。

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

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

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

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

   1. **[クレーム ID]** を指定します。JWT のオーディエンスと一致する正規表現を指定する必要があります。

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

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

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

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

JWT トークンは、内部の共有シークレットで使用できます AWS Secrets Manager。シークレットは、base64 URL でエンコードされている必要があります。 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}}",
    "UserTokenConfigurations": [
        {
            "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
```

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

```
{
  "keys": [
    {
      "kid": "{{key_id}}",
      "alg": "HS256|HS384|HS512",
      "kty": "OCT", 
      "use": "sig", //this value can be sig only for now
      "k": "{{secret}}",
      "nbf":"{{ISO1806 date format}}"
      "exp":"{{ISO1806 date format}}"
    }
  ]
}
```

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

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

JWT トークンは、内部の共有シークレットで使用できます AWS Secrets Manager。シークレットは、base64 URL でエンコードされている必要があります。 Secrets Manager ARN が必要で、 Amazon Kendra ロールが Secrets Manager リソース`GetSecretValue`の にアクセスできる必要があります。で Secrets Manager リソースを暗号化する場合 AWS KMS、ロールには復号アクションへのアクセス権も必要です。

```
response = kendra.create_index(
    Name='{{user-context}}',
    Edition='{{ENTERPRISE_EDITION}}',
    RoleArn='arn:aws:iam::{{account-id}}:role:/{{my-role}}',
    UserTokenConfigurations=[
        {
            "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'
)
```

------