共有シークレットで JSON ウェブトークン (JWT) を使用する - Amazon Kendra

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

共有シークレットで JSON ウェブトークン (JWT) を使用する

次の例は、インデックスを作成するときに JSON Web Token (JWT) を共有シークレットトークンとともに使用してユーザーアクセスを制御する方法を示しています。

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

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

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

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

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

  6. [Token configuration] (トークンの設定) で、[JWT with shared secret] (共有シークレットを使用したJWT) を [Token type] (トークンタイプ) として選択します。

  7. [共有シークレットに署名するためのパラメータ] で、[シークレットのタイプ] を選択します。既存の AWS Secrets Manager 共有シークレット、または新しい共有シークレットを使用できます。

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

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

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

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

    4. base64 URL でエンコードされたシークレットを入力して、[共有シークレット] を指定します。また、[シークレットの生成] を選択して、自分のシークレットを生成できます。シークレットが base64 URL でエンコードされていることを確認する必要があります。

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

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

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

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

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

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

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

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

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

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

CLI

内部に共有シークレットを含む JWT トークンを使用できます。 AWS Secrets Managerシークレットは、base64 URL でエンコードされている必要があります。 Secrets Manager ARN が必要で、 Amazon Kendra GetSecretValue Secrets Manager ロールにはリソースへのアクセス権が必要です。 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 を参照してください。

Python

JWT トークンを内部に共有シークレットとともに使用できます。 AWS Secrets Managerシークレットは、base64 URL でエンコードされている必要があります。 Secrets Manager ARN が必要で、 Amazon Kendra GetSecretValue Secrets Manager ロールにはリソースへのアクセス権が必要です。 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' )