AWS Lambda中用opensearch-py连接OpenSearch认证403错误如何解决
解决方案
你遇到的403错误是opensearch-py客户端初始化参数配置错误导致的签名不匹配问题,直接修改初始化代码即可:
openSearch_client = OpenSearch( # 替换你的endpoint字符串,去掉https前缀,指定443端口 hosts = [{'host': openSearch_endpoint.replace('https://', ''), 'port': 443}], # 显式指定http_auth参数传递AWS4Auth对象 http_auth = awsauth, # 开启SSL验证,匹配OpenSearch服务的https访问要求 use_ssl = True, verify_certs = True, # 显式指定基于requests的连接类,和你直接调用requests的逻辑一致 connection_class = 'RequestsHttpConnection' )
核心修改原因说明
- 你之前直接将完整endpoint字符串传入
hosts参数时,opensearch-py默认会使用http协议、9200端口发起请求,和OpenSearch服务实际使用的https443端口不一致,导致AWS4Auth签名计算结果和实际请求信息不匹配,触发403错误。你直接调用requests时手动拼接了完整https url,签名计算正确所以可以正常访问。 - 显式使用
http_auth参数传递认证对象,比兼容性质的auth参数适配性更好,避免不同版本客户端的参数兼容问题。 - 补充说明:你代码里
service = 'es'的配置是正确的,AWS OpenSearch Service的IAM签名服务标识至今沿用旧的es取值,不需要修改。
内容的提问来源于stack exchange,提问作者average.everyman
相关产品推荐
相关产品推荐

