amazon-web-services - 亚马逊 Elasticsearch 服务 : Authorization header issue when calling ES domain via proxy

标签 amazon-web-services elasticsearch

我目前正在将现有的 ELK 应用程序从 EC2 迁移到 Amazon Elasticsearch Service。 首先,我决定保留现有的 Kibana 服务器并将其切换为指向新的 ES 域。因此,我按照本节中的建议更改了现有的 kibana 配置: http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-kibana

然后,我开始遇到一些问题,其中大部分问题已在本文中解决:Kibana won't connect to Elasticsearch on Amazon's Elasticsearch Service 除了第 4 步。Kibana 仍然需要通过 header 进行身份验证。 由于我没有使用 CLI 或 AWS SDK 通过访问 key 进行身份验证,而是使用 HTTP/S 调用(即 kibana 配置文件中的 http://search-[es-domain]:80),看起来我无论如何都需要签署我的 HTTP 请求(如在上一个链接的第 4 步中建议)但是,我正在寻找其他选项来解决这个问题,以便拥有我自己的 Kibana 服务器、集群,具有来自外部互联网的适当级别的访问控制,同时仍然保护对仅针对某些 IAM 用户/角色的 Elasticsearch。

然后我决定尝试另一种选择:实现我自己的代理(在这种情况下,使用我现有的 Nginx 服务器使其指向新的 ES 域。Reinvent bdt209-launch-amazon-elasticsearch-for-realtime-data-analytics slideshare 的幻灯片 56 中建议了这种方法。 这样,我就可以让全世界都可以访问 Web 服务器(通过端口 443/80),当然还有基本的 Web 身份验证,同时使用非常严格的访问策略保护 ES 域,只允许基于 IP(以及 IAM 角色)访问 Elasticsearch 集群。

但是我还是遇到了同样的问题。我收到此消息作为回复:

 "message": "'a2liYW5hYWRtaW46YWRtaW5AMTIz' not a valid key=value pair (missing equal-sign) in Authorization header: 'Basic a2liYW5hYWRtaW46YWRtaW5AMTIz'."

这意味着我需要签署请求。 我可以就如何克服这个问题提出一些建议吗?我真的需要以编程方式签署 Web 请求吗?或者是否有其他选项不会影响安全性和访问控制(意味着允许对 kibana 的受限公共(public)访问,对 ES 集群的访问(基于角色和 IP)非常有限)?

非常感谢。

最佳答案

问题的根源是 Nginx 添加了授权 header (通过基本身份验证模块启用),其中包括带有登录详细信息的加密字符串到我的自定义 Kibana 实例。

如果此 header 传递给 ES 域端点,则 ES 域将尝试使用该 header 对接收服务器进行身份验证。由于它没有为我的自定义授权凭据预设,因此它会简单地拒绝并显示授权错误。

所以我不得不禁用从 NGINX 代理到 ElasticSearch 端点的 header 转发,用这个替换我的位置节(在我的 NGINX 配置中):

location / {
     proxy_pass http://localhost:5601/;
     proxy_pass_request_headers off;
     proxy_redirect http://localhost:5601/ /;
     proxy_set_header Host $host;
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
     auth_basic "Restricted";
     auth_basic_user_file /etc/nginx/nginx.auth;
}

关于amazon-web-services - 亚马逊 Elasticsearch 服务 : Authorization header issue when calling ES domain via proxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33358327/

相关文章:

android - Android 中的 AWS 云搜索

elasticsearch - Windows Logstash输出到具有IAM EC2角色 “Unable to access SQS queue”的AWS SQS

elasticsearch - 如何使用 elasticsearch _update_by_query 更新字符串字段?

elasticsearch - 按对象类型字段 Elasticsearch 的大小搜索

amazon-web-services - 使用 aws codeartifact 和 MAVEN 构建规范

javascript - Amazon SimpleDB Javascript 接口(interface)可能吗?

python - 无法在 AWS EMR 上下载 nltk 语料库,对已关闭文件进行 I/O 操作

python - 导入错误 : No module named _mysql

elasticsearch - Couchbase - Elasticsearch 搜索问题

elasticsearch - Logstash:错误:尝试运行logstash.bat时找不到或加载主类堆栈