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

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

亚马逊 OpenSearch 服务的 JWT 身份验证和授权

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

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

注意事项

在 JWTs 使用 Amazon OpenSearch 服务之前,您必须考虑以下几点:

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

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

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

修改域访问策略

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

JSON
{ "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. (可选)您可以在“其他设置”下配置以下可选字段

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

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

    完成更改后,请保存域。

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

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

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