适用于 Amazon OpenSearch Service 的 JWT 身份验证和授权 - 亚马逊 OpenSearch 服务

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

适用于 Amazon OpenSearch Service 的 JWT 身份验证和授权

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

您可以使用 OpenSearch Service 控制台、AWS Command Line Interface(AWS CLI)或 AWS SDK 来配置 JSON Web 令牌。

注意事项

在将 JWT 与 Amazon OpenSearch Service 结合使用之前,您必须注意以下几点:

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

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

  • OpenSearch 2.11 是可用于 JWT 身份验证的最低兼容版本。

修改域访问策略

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

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

配置 JWT 身份验证和授权

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

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

  1. 域配置下,导航到适用于 OpenSearch 的 JWT 身份验证和授权,选择启用 JWT 身份验证和授权

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

    注意

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

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

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

    • 角色密钥 – 您可以将此字段留空,以使用您的 JWT 的默认 roles 密钥。

    完成更改后,请保存域。

使用 JWT 发送测试请求

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

注意

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

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

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

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

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" } } }
生成密钥对

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

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

  1. openssl genrsa -out privatekey.pem 2048

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

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

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