如何通过Python使用主用户连接AWS OpenSearch域
AWS OpenSearch域校验与Python主用户连接指引
域配置校验(对照官方指南补漏)
所有配置修改后必须等待域状态从「处理中」变更为「可用」再测试,配置生效通常需要10-15分钟,刚改完配置连不上属于正常情况。
- 主用户配置校验:进入域详情的安全配置页,确认你选择的是内置主用户模式,记录好设置的主用户名、密码,密码尽量避免使用
@、#这类特殊URL保留字符,防止编码导致认证失败。 - 访问策略校验:公有访问域必须在访问策略中放通你运行代码的机器的公网IP,参考最小权限策略配置:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "es:*", "Resource": "替换为你的OpenSearch域ARN/*", "Condition": { "IpAddress": {"aws:SourceIp": ["替换为你的出口公网IP/32"]} } } ] }
VPC私有域需要确认运行代码的资源在域所属VPC内,关联的安全组入方向放通443端口到代码运行资源的IP/安全组。
- 端点校验:在域概述页复制官方给出的访问端点,格式为
https://search-<域标识>-<随机串>.<区域>.es.amazonaws.com,不要手动拼接域名,不要添加末尾斜杠。
Python连接实现
首先安装依赖包:pip install opensearch-py
内置主用户(用户名密码认证,即你创建域时手动设置账号密码的模式)
from opensearchpy import OpenSearch # 替换为你的配置 DOMAIN_HOST = "search-xxx.us-east-1.es.amazonaws.com" # 去掉https前缀 MASTER_USER = "你的主用户名" MASTER_PWD = "你的主用户密码" REGION_PORT = 443 client = OpenSearch( hosts=[{"host": DOMAIN_HOST, "port": REGION_PORT}], http_auth=(MASTER_USER, MASTER_PWD), use_ssl=True, verify_certs=True, ssl_show_warn=False, timeout=30 ) # 连通性测试 if client.ping(): cluster_info = client.info() print(f"连接成功,集群版本:{cluster_info['version']['number']}") else: print("连接失败,请按下方排错项检查")
IAM主用户认证(创建域时选择IAM身份作为主用户的场景)
如果选择IAM身份作为主用户,不能使用用户名密码认证,需要做请求签名,额外安装依赖pip install requests-aws4auth,连接代码如下:
from opensearchpy import OpenSearch, RequestsHttpConnection from requests_aws4auth import AWS4Auth DOMAIN_HOST = "search-xxx.us-east-1.es.amazonaws.com" REGION = "us-east-1" # 替换为你的域所在区域 AWS_AK = "你的IAM用户AK" AWS_SK = "你的IAM用户SK" aws_auth = AWS4Auth(AWS_AK, AWS_SK, REGION, "es") client = OpenSearch( hosts=[{"host": DOMAIN_HOST, "port": 443}], http_auth=aws_auth, use_ssl=True, verify_certs=True, connection_class=RequestsHttpConnection, timeout=30 ) print("连接成功" if client.ping() else "连接失败")
常见报错排查
- 403权限错误:优先检查访问策略IP配置是否正确,主用户凭证是否输入错误,确认精细访问控制未给主用户添加额外限制(新建主用户默认绑定超级管理员角色,无需额外配置)。
- 连接超时/拒绝连接:本地先执行
curl -v https://你的域端点测试网络连通性,不通则排查安全组、网络ACL、IP白名单配置,VPC域确认路由、终端节点配置正确。 - SSL证书错误:检查本地是否开启抓包代理、VPN导致证书劫持,测试阶段可临时将
verify_certs设为False验证,生产环境必须开启证书校验。
内容的提问来源于stack exchange,提问作者Serhii Mirko
相关产品推荐
相关产品推荐

