如何为VPC内的AWS Opensearch域启用基于密码的身份验证
问题解答
1. 现有操作问题诊断
你执行的命令语法基础正确,但存在两处问题:
- 触发报错的直接原因:你当前使用的AWS IAM身份(用户/角色)缺少
es:UpdateElasticsearchDomainConfig操作权限,需要先补充IAM权限策略 - 命令参数缺失:启用内置用户数据库认证时,必须同时传递主用户的账号密码配置,否则即使权限足够也会执行失败
2. 正确启用用户名密码认证的流程
2.1 先补充IAM权限
给你执行CLI操作的IAM身份添加如下权限策略(按需替换区域、账号ID参数):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "es:UpdateElasticsearchDomainConfig", "Resource": "arn:aws:es:<你的区域>:<你的账号ID>:domain/test-domain/*" } ] }
2.2 执行正确的更新域配置命令
修改命令里的<主用户名>和<主用户密码>参数,密码要求长度至少8位,包含大小写字母、数字和特殊字符:
aws es update-elasticsearch-domain-config --domain-name test-domain \ --advanced-security-options Enabled=true,InternalUserDatabaseEnabled=true,MasterUserOptions={MasterUserName=<主用户名>,MasterUserPassword=<主用户密码>} \ --node-to-node-encryption-options Enabled=true
注意事项:
- 如果你的域已经开启了节点到节点加密,可以去掉最后一行
--node-to-node-encryption-options Enabled=true参数,未开启的话必须同时开启才能启用高级安全选项- Elasticsearch域版本需要为6.7及以上才能支持高级安全选项,版本过低请先升级域版本再执行上述操作
2.3 等待域配置更新完成
AWS ES域配置更新通常需要10~30分钟,更新完成后可以通过控制台或者aws es describe-elasticsearch-domain --domain-name test-domain命令查看状态。
3. 配置elasticsearch-dsl连接
更新完成后,修改你的elasticsearch-dsl连接代码,传入认证信息即可:
from elasticsearch import Elasticsearch from elasticsearch_dsl import connections # 方式1:直接构造Elasticsearch客户端传入认证 client = Elasticsearch( hosts=["<你的ES域VPC端点>"], http_auth=("<你设置的主用户名>", "<你设置的主用户密码>"), port=443, use_ssl=True ) connections.add_connection("default", client) # 方式2:直接通过connections配置 connections.configure( default={ "hosts": ["<你的ES域VPC端点>"], "http_auth": ("<你设置的主用户名>", "<你设置的主用户密码>"), "port": 443, "use_ssl": True } )
内容的提问来源于stack exchange,提问作者Pramay Nikhade
相关产品推荐
相关产品推荐

