使用带有公有密钥的 JSON Web 令牌(JWT) - Amazon Kendra

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用带有公有密钥的 JSON Web 令牌(JWT)

以下示例说明如何在创建索引时使用带有公钥的 JSON Web Token (JWT) 进行用户访问控制。有关 JWT 的更多信息,请参阅 jwt.io

Console
  1. 选择创建索引以开始创建新索引。

  2. 指定索引详细信息页面上,为您的索引指定名称和描述。

  3. 对于 IAM 角色,选择一个角色或选择创建新角色,并指定角色名称来创建新角色。该 IAM 角色将带有前缀 “AmazonKendra-”。

  4. 将所有其他字段保留为默认值。选择下一步

  5. 配置用户访问控制页面上,在访问控制设置下,选择以使用令牌进行访问控制。

  6. 令牌配置下,选择带有公有密钥的 JWT 作为令牌类型

  7. 用于签名公有密钥的参数下,选择密钥类型。您可以使用现有的 AWS Secrets Manager 密钥或创建一个新密钥。

    要创建新密钥,请选择新建,然后按照下列步骤操作:

    1. 在 “新 AWS Secrets Manager 密钥” 下,指定密钥名称。保存公有密钥时,将添加前缀 AmazonKendra-

    2. 指定键 ID。键 ID 是一个提示,指示哪些键用于保护令牌的 JSON Web 签名。

    3. 为令牌选择签名算法。这是用于保护 ID 令牌的加密算法。有关 RSA 的更多信息,请参阅 RSA 密码术

    4. 证书属性下,指定可选证书链。证书链由证书列表组成。它以服务器的证书开头,以根证书结尾。

    5. 可选 指定指纹。它是证书的哈希值,可计算出所有证书数据及其签名。

    6. 指定指数。这是 RSA 公有密钥的指数值。它表示为采用 Base64urlUInt 编码的值。

    7. 指定模数。这是 RSA 公有密钥的指数值。它表示为采用 Base64urlUInt 编码的值。

    8. 选择保存密钥以保存新密钥。

  8. 可选)在高级配置下:

    1. 指定要在 ACL 检查中使用的用户名

    2. 指定要在 ACL 检查中使用的一个或多个

    3. 指定将验证颁发机构的颁发机构

    4. 指定客户端 ID。您必须指定与 JWT 中的受众相匹配的正则表达式。

  9. 配置详细信息页面中,选择开发者版本

  10. 选择创建以创建索引。

  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 的默认值为“user”。GroupAttributeField 的默认值为“groups”。

接下来,使用输入文件调用 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' )