使用 JSON 網絡令牌(JWT)與共享密鑰 - Amazon Kendra

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 JSON 網絡令牌(JWT)與共享密鑰

下列範例說明如何在建立索引時使用 JSON Web Token (JWT) 搭配共用密碼權杖,以供使用者存取控制。

Console
  1. 選擇 [建立索引] 以開始建立新索引。

  2. 在 [指定索引詳細資訊] 頁面上,為索引提供名稱和說明。

  3. 對於 IAM 角色,請選取角色或選取 [建立新角色],然後指定角色名稱以建立新角色。該 IAM 角色的前綴為「AmazonKendra-」。

  4. 將所有其他欄位保留為預設值。選擇下一步

  5. 在 [設定使用者存取控制] 頁面的 [存取控制設定] 下,選擇 [] 以使用權杖進行存取控制。

  6. 令牌配置下,選擇具有共享密鑰的 JWT 作為令牌類型

  7. 在 [簽署共用密碼的參數] 下,選擇 [密碼類型]。您可以使用現有的 AWS Secrets Manager 共用密碼或建立新的共用密碼。

    若要建立新的共用密碼,請選擇 [新增],然後依照下列步驟執行:

    1. 在 [新 AWS Secrets Manager 密碼] 下,指定 [密碼] 名稱。當您儲存公開金鑰時,AmazonKendra-會新增前置字元。

    2. 指定金鑰識別碼。密鑰 ID 是一個提示,指示哪個密鑰用於保護令牌的 JSON Web 簽名。

    3. 選擇權杖的簽署演算法。這是用於保護 ID 令牌的加密算法。如需 RSA 的詳細資訊,請參閱 RSA 加密法

    4. 透過輸入 base64 URL 編碼的密碼來指定共用密碼。您也可以選取 [產生密碼],為您產生密碼。您必須確保密碼是一個 base64 網址編碼的密碼。

    5. (選擇性) 指定共用密碼的有效時間。您可以指定密碼的有效起始日期和時間、有效截止日期或兩者兼而有之。密碼將在指定的間隔內有效。

    6. 選取 [儲存密碼] 以儲存新密碼。

  8. (選擇性) 在「進階組態」下:

    1. 指定 ACL 檢查中要使用的「使用名稱」。

    2. 指定一個或多個要在 ACL 檢查中使用的群組

    3. 指定將驗證權杖行者的發行者。

    4. 指定宣告識別碼。您必須指定符合 JWT 中對象的規則運算式。

  9. 佈建詳細資料頁面中,選擇開發人員版本

  10. 選擇 [建立] 以建立索引。

  11. 等待您的索引創建。 Amazon Kendra 為您的索引佈建硬體。此操作可能需要一些時間。

CLI

您可以在中使用帶有共享密鑰的 AWS Secrets Manager JWT 令牌。密碼必須是以 base64 網址編碼的密碼。您需要 Secrets Manager ARN,並且您的 Amazon Kendra 角色必須具有 Secrets Manager 資源的GetSecretValue存取權。如果您使用加密資 Secrets Manager 源 AWS KMS,則角色也必須具有解密動作的存取權。

若要 AWS CLI 使用 JSON 輸入檔案建立索引,請先使用您想要的參數建立 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

您可以在中使用帶有共享密鑰的 AWS Secrets Manager JWT 令牌。密碼必須是以 base64 網址編碼的密碼。您需要 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' )