我正在尝试将mongo-connector与亚马逊新托管的 Elasticsearch一起使用。
我相信它没有使用普通的 Elasticsearch Shield 等,而是使用亚马逊相当复杂的身份验证方案。
(相关的 GH 问题:https ://github.com/mongodb-labs/mongo-connector/issues/337 )
我正在尝试将mongo-connector与亚马逊新托管的 Elasticsearch一起使用。
我相信它没有使用普通的 Elasticsearch Shield 等,而是使用亚马逊相当复杂的身份验证方案。
(相关的 GH 问题:https ://github.com/mongodb-labs/mongo-connector/issues/337 )
我想您已经尝试过了,但最简单的方法是在您的 Amazon Elasticsearch 配置中将您的访问策略修改为“允许对域的开放访问” 。当然,这意味着您的 ES 集群对世界开放,因此对于测试目的可能没问题,但在生产环境中则不行。
您还可以选择“允许来自特定 IP 的访问”,这将“保护”您的集群,只接受来自指定 IP 地址的请求。就我个人而言,我发现这种模式是最容易使用的,因为您可以获得安全访问(前提是您是 IP 地址上唯一的人),并且您不需要通过整个 AWS签署请求的东西。虽然,如果您在 VPC 中,该选项显然不会起作用。
在您的搜索域上配置上述任何访问策略后,您无需在 mongo-connector 端执行任何特殊操作,您只需使用标准命令行启动 mongo-connector 即可完成复制盒子。
mongo-connector -m localhost:27017 -t search-<yourdomain>.us-west-2.es.amazonaws.com:80 -d elastic_doc_manager
现在,如果您的搜索域通过“允许/拒绝对特定 AWS 帐户或 IAM 用户的访问”来保护”,您将需要签署您的请求,这意味着elastic_doc_manager.py
需要以某种方式对其进行修改。最简单的选择是编写一个专门的文档管理器,通过扩展elastic_doc_manager.py
并elastic_aws_doc_manager.py
使用亚马逊提供的 Python 样板代码来签署 ES 文档管理器发出的每个请求,这很简单,但仍然需要大量工作。
但是,由于mongo_connector
es_doc_manager.py
使用了官方的 Elasticsearch Python 客户端,并且有人提出了一个很好的想法来调整它并使其能够用于签署对 AWS Elasticsearch 的请求,因此编写自定义elastic_aws_doc_manager.py
文档管理器变得更加简单。
我坚信这甚至应该内置到主程序中elastic_doc_manager.py
,并在使用 AWS Elasticsearch 服务时提供配置选项。