翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
共有シークレットで JSON ウェブトークン (JWT) を使用する
次の例は、インデックスを作成するときに JSON Web Token (JWT) を共有シークレットトークンとともに使用してユーザーアクセスを制御する方法を示しています。
- Console
-
-
[Create index] (インデックスの作成) を選択して、新しいインデックスの作成を開始します。
-
[Specify index details] (インデックスの詳細の指定) ページで、インデックスに名前と説明を付けます。
-
[IAM role] (IAM ロール) には、ロールを選択するか、または [Create a new role] (新規ロールの作成) を選択し、新しいロールを作成してロール名を指定します。 IAM ロールには「AmazonKendra-」というプレフィックスが付きます。
-
その他のフィールドはすべてデフォルトのままにしておきます。[次へ] を選択します。
-
[Configure user access control] (ユーザーアクセスコントロールの設定) ページの、[Access control settings] (アクセスコントロールの設定) で、[Yes] (はい) を選択し、アクセス制御にトークンを使用します。
-
[Token configuration] (トークンの設定) で、[JWT with shared secret] (共有シークレットを使用したJWT) を [Token type] (トークンタイプ) として選択します。
-
[共有シークレットに署名するためのパラメータ] で、[シークレットのタイプ] を選択します。既存の AWS Secrets Manager 共有シークレット、または新しい共有シークレットを使用できます。
新しい共有シークレットを作成するには、[New] (新規) を選択し、次に、以下のステップを実行します。
-
「 AWS Secrets Manager 新規シークレット」で、シークレット名を指定します。プレフィックス
AmazonKendra-
は、パブリックキーを保存すると追加されます。 -
[Key ID] (キー ID) を指定します。キー ID は、トークンの JSON ウェブ署名をセキュア化するために使用されたキーを示すヒントです。
-
トークンに署名 [Algorithm] (アルゴリズム) を選択します。これは、ID トークンの保護に使用される暗号化アルゴリズムです。RSA の詳細については、RSA Cryptography
を参照してください。 -
base64 URL でエンコードされたシークレットを入力して、[共有シークレット] を指定します。また、[シークレットの生成] を選択して、自分のシークレットを生成できます。シークレットが base64 URL でエンコードされていることを確認する必要があります。
-
(オプション) 共有シークレットが有効になるタイミングを指定します。シークレットの有効開始日、有効期限、またはその両方を指定できます。シークレットは、指定された時間間隔の間、有効です。
-
[Save secret] (シークレットの保存) を選択して新しいシークレットを保存します。
-
-
(オプション) [詳細設定]:
-
[Username] (ユーザーネーム) を指定して ACL チェックで使用します。
-
1 つ以上の [Groups] (グループ) を指定して、ACL チェックで使用します。
-
トークン発行者を検証する [Issuer] (発行者) を指定します。
-
[クレーム ID] を指定します。JWT のオーディエンスと一致する正規表現を指定する必要があります。
-
-
[Provisioning details] (プロビジョニングの詳細) ページで、[Developer edition] (デベロッパーエディション) を選択します。
-
[Create] (作成) を選択してインデックスを作成します。
-
インデックスが作成されるのを待ちます。 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' )