本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
适用于 Amazon OpenSearch 服务的 JWT 身份验证和授权
亚马逊 OpenSearch 服务现在允许您使用 JSON 网络令牌 (JWT) 进行身份验证和授权。JWT 是基于 JSON 的访问令牌,用于授予单点登录 (SSO) 访问权限。您可以使用 Service 中的 JWT 创建单点登录令牌来验证对 OpenSearch 服务域的请求。 OpenSearch 要使用 JWT,必须启用精细访问控制,并且必须提供有效的 RSA 或 ECDSA PEM 格式的公钥。有关精细访问控制的更多信息,请参阅 Amazon Service 中的精细访问控制。 OpenSearch
您可以使用 OpenSearch 服务控制台、 AWS Command Line Interface (AWS CLI) 或软件开发工具包配置 J AWS SON Web 令牌。
注意事项
在将 JWT 与 Amazon OpenSearch 服务配合使用之前,您必须考虑以下几点:
-
由于 PEM 格式的 RSA 公钥很大,我们建议使用 AWS 控制台配置 JWT 身份验证和授权。
-
在为 JWT 指定主题和角色字段时,必须提供有效的用户和角色,否则,请求将被拒绝。
修改域访问策略
在将您的域配置为使用 JWT 身份验证和授权之前,必须更新您的域访问策略以允许 JWT 用户访问该域。否则,所有传入的 JWT 授权请求都将被拒绝。为子资源 (/*) 提供完全访问权限的推荐域访问策略是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:ESHttp*",
"Resource": "domain-arn/*"
}
]
}
配置 JWT 身份验证和授权
您可以在域名创建过程中或通过更新现有域来启用 JWT 身份验证和授权。根据您选择的选项,设置步骤略有不同。
以下步骤说明了如何在 OpenSearch 服务控制台中为 JWT 身份验证和授权配置现有域:
-
在 “域配置” 下,导航到 “JWT 身份验证和授权” OpenSearch,选择 “启用 JWT 身份验证和授权”。
-
配置要用于您的域的公钥。为此,您可以上传包含公钥的 PEM 文件,也可以手动输入。
注意
如果上传或输入的密钥无效,则会在文本框上方显示一条警告,说明问题。
-
(可选)在 “其他设置” 下,您可以配置以下可选字段
-
主题密钥 — 您可以将此字段留空以使用您的 JWT 的默认
sub
密钥。 -
角色密钥 — 您可以将此字段留空,以便使用您的 JWT 的默认
roles
密钥。
进行更改后,保存您的域名。
-
使用 JWT 发送测试请求
创建具有指定主题和角色对的新 JWT 后,您可以发送测试请求。为此,请使用私钥通过创建 JWT 的工具签署您的请求。 OpenSearch 服务能够通过验证此签名来验证传入的请求。
注意
如果您为 JWT 指定了自定义主题密钥或角色密钥,则必须为 JWT 使用正确的声明名称。
以下是如何使用 JWT 令牌通过域名的搜索端点访问 OpenSearch 服务的示例:
curl -XGET "$search_endpoint" -H "Authorization: Bearer <JWT>"
如果域存在,以下 AWS 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 密钥对,请执行以下步骤:
openssl genrsa -out privatekey.pem 2048
openssl rsa -in privatekey.pem -pubout -out publickey.pem
在此示例中,该publickey.pem
文件包含用于 Amazon OpenSearch 服务的公钥,而privatekey.pem
包含用于签署发送到该服务的 JWT 的私钥。此外,如果您需要将私钥转换为常用pkcs8
格式来生成 JWT,则可以选择将其转换为常用格式。
如果您使用上传按钮将 PEM 文件直接添加到控制台,则该文件必须具有.pem
扩展名,.key
目前不支持其他文件扩展名,例如.crt
.cert
、或。