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

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

JWTAmazon OpenSearch 服务的身份验证和授权

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

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

注意事项

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

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

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

  • 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 服务控制台中配置现有域以进行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>"

如果域存在, OpenSearch 则以下 Amazon CLI 命令可启用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" } } }
生成 key pair

为了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 OpenSearch 服务的公钥,而privatekey.pem包含用于对JWTs发送到服务的文件进行签名的私有密钥。此外,如果您需要将私钥转换为常用pkcs8格式来生成,则可以选择将其转换为常用格式JWTs。

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