如何通过编程获取VPC内AWS Elasticsearch的端点?
解决VPC内Elasticsearch域端点获取及SSL访问异常问题
我来帮你梳理下问题的根源和解决办法:
首先,你提到aws es describe-elasticsearch-domain不适用于VPC内的域,其实这个命令是完全支持的——只是你需要关注VPC专属的端点字段,而不是默认的公网端点。
一、正确获取VPC内Elasticsearch域的端点
执行以下AWS CLI命令,就能直接拿到VPC内ES域的私有DNS端点:
aws es describe-elasticsearch-domain --domain-name YOUR_DOMAIN_NAME --query "DomainStatus.Endpoints.vpc" --output text
这个命令会返回类似vpc-my-es-domain-xxxxxx.us-east-1.es.amazonaws.com的地址,这才是你应该用于REST请求的正确端点。
二、为什么用私有IP访问会抛出SSLPeerUnverifiedException?
AWS Elasticsearch(现也称为OpenSearch Service)的SSL证书是绑定到它的官方VPC端点DNS名称的。当你直接用私有IP发起请求时,客户端会验证证书中的域名与访问地址是否匹配,IP和DNS显然不匹配,所以会触发SSL验证失败的异常。
三、解决SSL异常的方案
方案1:使用VPC端点DNS访问(推荐)
直接用上面命令获取的DNS名称发起REST请求,确保你的客户端处于VPC内(或通过VPC对等连接、VPN等能访问VPC内部DNS的环境),VPC内的DNS会自动把这个私有域名解析到对应的弹性网卡IP,同时SSL证书验证会顺利通过。
方案2:临时映射DNS到IP(不推荐,仅应急用)
如果因为特殊场景必须用IP访问,可以在客户端机器的hosts文件中添加DNS与IP的映射:
- Linux/macOS:编辑
/etc/hosts,添加一行:10.0.1.25 vpc-my-es-domain-xxxxxx.us-east-1.es.amazonaws.com - Windows:编辑
C:\Windows\System32\drivers\etc\hosts,添加同样的内容
这样客户端用DNS名称发起请求时,会直接连接到指定IP,同时SSL验证能通过。但要注意:ES域扩容、重启时,弹性网卡IP可能会变化,需要手动更新映射,所以这只是临时方案。
内容的提问来源于stack exchange,提问作者Ion
相关产品推荐
相关产品推荐

