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

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

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

次の例は、インデックスを作成するときに JSON Web Token (JWT) を公開鍵とともに使用してユーザーアクセスを制御する方法を示しています。JWT の詳細については、jwt.io を参照してください。

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