JWT 身份验证和授权 OpenSearch - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

JWT 身份验证和授权 OpenSearch

Amazon Ser OpenSearch vice 现在允许您使用 JSON Web 令牌(JWTs)进行身份验证和授权。 JWTs 是基于 JSON 的访问令牌,用于授予单点登录(SSO)访问权限。您可以在 S OpenSearch ervice JWTs 中使用来创建单点登录令牌,从而验证对您的 Serv OpenSearch ice 域的请求。要使用 JWTs,您必须启用精细访问控制,并且必须提供有效的 RSA 或 ECDSA PEM 格式的公有密钥。有关精细访问控制的更多信息,请参阅 Amazon Service 中的精细访问控制。 OpenSearch

您可以使用 OpenSearch 服务控制台、 Amazon Command Line Interface (Amazon CLI) 或配置 JSON Web 令牌 Amazon SDKs。

注意事项

在使用Amazon JWTs S OpenSearch ervice 之前,您必须注意以下几点:

  • 由于 PEM 格式的 RSA 公有密钥很大,我们建议使用 Amazon 控制台配置 JWT 身份验证和授权。

  • 在为自己指定主体和角色字段时,必须提供有效的用户和角色 JWTs,否则请求将被拒绝。

  • OpenSearch JWT 身份验证的最低兼容版本。

修改域访问策略

在将域配置为使用 JWT 身份验证和授权之前,必须更新域访问策略,以允许 JWT 用户访问该域。否则,所有传入的 JWT 授权请求都将被拒绝。为子资源 (/*) 提供完全访问权限的建议域访问策略是:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESHttp*", "Resource": "domain-arn/*" } ] }

配置 JWT 身份验证和授权

您可以在域创建过程中或通过更新现有域来启用 JWT 身份验证和授权。根据您选择的具体选项,设置步骤会略有差异。

以下步骤说明了如何在 Ser OpenSearch vice 控制台中配置现有域的 JWT 身份验证和授权:

  1. 在 “域配置” 下,导航到 “JWT 身份验证和授权” OpenSearch,选择 “启用 JWT 身份验证和授权”。

  2. 配置要用于域的公有密钥。要执行此操作,您可以上传包含公有密钥的 PEM 文件,也可以手动输入。

    注意

    如果上传或输入的密钥无效,则会在文本框上方显示一条警告,说明具体的问题。

  3. (可选)您可以在“其他设置”下配置以下可选字段

    • 主体密钥 — 您可以将此字段留空,以使用您的默认sub JWTs。

    • 角色密钥 — 您可以将此字段留空,以使用您的默认 ro roles les 密钥 JWTs。

    完成更改后,请保存域。

使用 JWT 发送测试请求

创建具有指定主体和角色对的新 JWT 后,您可以发送测试请求。要执行此操作,请使用私有密钥并通过创建 JWT 的工具签署您的请求。 OpenSearch Service 能够通过验证此签名来验证传入的请求。

注意

如果您为 JWT 指定了自定义的主体密钥或角色密钥,则必须使用 JWT 的正确声明名称。

以下示例演示了如何使用 JWT 令牌通过域的搜索端点访问Ser OpenSearch vice:

curl -XGET "$search_endpoint" -H "Authorization: Bearer <JWT>"

以下 Amazon CLI 命令将为该域启用 JWT 身份验证和授权, OpenSearch 但前提是该域存在:

aws opensearch update-domain-config --domain-name <your_domain_name> --advanced-security-options '{"JWTOptions":{"Enabled":true, "PublicKey": "<your_public_key>", "SubjectKey": "<your_subject_key>", "RolesKey": "<your_roles_key>"}}'

配置 JWT 身份验证和授权(通过 API 配置)

对配置 API 的以下请求为 OpenSearch 现有域启用 JWT 身份验证和授权:

POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config { "AdvancedSecurityOptions": { "JWTOptions": { "Enabled": true, "PublicKey": "public-key", "RolesKey": "optional-roles-key", "SubjectKey": "optional-subject-key" } } }
生成密钥对

要 JWTs 为您的 OpenSearch 域进行配置,您需要提供隐私增强邮件(PEM)格式的公有密钥。Amazon S OpenSearch ervice 目前在使用时支持两种非对称加密算法 JWTs:RSA 和 ECDSA。

要使用通用的 openssl 库创建 RSA 密钥对,请执行以下步骤:

  1. openssl genrsa -out privatekey.pem 2048

  2. openssl rsa -in privatekey.pem -pubout -out publickey.pem

在此示例中,publickey.pem文件包含用于 Amazon S OpenSearch ervice 的公有密钥,同时privatekey.pem包含用于签署 JWTs 发送到该服务的私有密钥。此外,如果您需要使用常用pkcs8格式的私有密钥来生成,则可以选择将其转换为该格式 JWTs。

如果您使用上传按钮将 PEM 文件直接添加到控制台,该文件的扩展名必须为 .pem,目前不支持其他文件扩展名,例如 .crt.cert.key