パブリックキーでの JSON ウェブトークン (JWT) の使用 - Amazon Kendra

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

パブリックキーでの JSON ウェブトークン (JWT) の使用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  11. インデックスが作成されるまで待ちます。 は、インデックスのハードウェアを 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 を参照してください。

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' )