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

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

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

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

您可以使用 OpenSearch 服务控制台、 Amazon Command Line Interface (Amazon CLI) 或软件开发工具包配置 J Amazon SON Web 令牌。

注意事项

在将 JWT 与 Amazon OpenSearch 服务配合使用之前,您必须考虑以下几点:

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

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

修改域访问策略

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

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

配置 JWT 身份验证和授权

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

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

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

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

    注意

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

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

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

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

    进行更改后,保存您的域名。

使用 JWT 发送测试请求

创建具有指定主题和角色对的新 JWT 后,您可以发送测试请求。为此,请使用私钥通过创建 JWT 的工具签署您的请求。 OpenSearch 服务能够通过验证此签名来验证传入的请求。

注意

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

以下是如何使用 JWT 令牌通过域名的搜索端点访问 OpenSearch 服务的示例:

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

为了为您的 OpenSearch 域配置 JWT,您需要提供隐私增强邮件 (PEM) 格式的公钥。当使用 JWT 时,亚马逊 OpenSearch 服务目前支持两种非对称加密算法: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 服务的公钥,而privatekey.pem包含用于签署发送到该服务的 JWT 的私钥。此外,如果您需要将私钥转换为常用pkcs8格式来生成 JWT,则可以选择将其转换为常用格式。

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