【问题标题】:Searching against secured AWS ElasticSearch针对安全的 AWS ElasticSearch 进行搜索
【发布时间】:2016-01-15 05:15:06
【问题描述】:

我在 AWS 上设置了一个新的 ElasticSearch 集群,它只允许访问特定的 IAM 用户。

但是,我正在尝试从 Ruby 连接到此,并查看了使用 AWS 开发工具包,但它没有实际对您的 ES 集群进行 HTTP 操作的方法,只能访问配置 API。

像往常一样,这需要 API 访问所需的所有 AWS 请求签名内容,但我找不到任何指示如何执行这些内容的内容。我正在使用 Ruby。

基本上,我所追求的是能够使用 IAM 用户凭据向该集群发出 GET 和 PUT 请求。 IP 限制对我来说不是一个选项。

【问题讨论】:

  • 我回答你的问题了吗?

标签: amazon-web-services elasticsearch


【解决方案1】:

您可以从 Ruby 向 Amazon Elasticsearch 发出签名的安全请求。我使用 Heroku 上的应用程序执行了以下操作。

确保您拥有 elasticsearch gem >= v1.0.15,因为对此的支持仅在 2015 年 12 月 4 日在那里实施。

你还需要这个宝石:

gem 'faraday_middleware-aws-signers-v4'

来自elasticsearch-ruby/elasticsearch-transport 的示例 文档:

您可以在配置块中使用任何标准的 Faraday 中间件和插件,例如对 AWS Elasticsearch 服务的请求进行签名:

使用以下代码:

require 'faraday_middleware/aws_signers_v4'

client = Elasticsearch::Client.new(url: ENV['AWS_ENDPOINT_URL']) do |f|
  f.request :aws_signers_v4,
            credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']),
            service_name: 'es',
            region: 'us-east-1'
  f.adapter Faraday.default_adapter
end

这也适用于带有 Rails 的 searchkick gem。使用上面的示例在初始化程序中设置 Searchkick.client:

# config/initializers/elasticsearch.rb
require 'faraday_middleware/aws_signers_v4'

Searchkick.client = Elasticsearch::Client.new(url: ENV['AWS_ENDPOINT_URL']) do |f|
  f.request :aws_signers_v4,
            credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']),
            service_name: 'es',
            region: 'us-east-1'
  f.adapter Faraday.default_adapter
end

【讨论】:

  • 确保你有 elasticsearch-ruby >= v1.0.15
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2014-11-04
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多