2015-10-16 50 views
5

我在AWS上設置了一個新的ElasticSearch集羣,它只允許訪問特定的IAM用戶。在安全的AWS ElasticSearch上搜索

但是,我試圖從Ruby連接到這個,並使用AWS SDK進行了研究,但沒有針對ES羣集實際進行HTTP操作的方法,只能訪問配置API。

像往常一樣,這需要所有AWS請求籤署他們需要API訪問的東西,但我找不到任何指示如何執行此操作的東西。我正在使用Ruby。

本質上,我所能做的就是使用IAM用戶信任對此羣集進行GET和PUT請求。知識產權限制對我來說不是一種選擇。

+0

我回答了您的問題嗎? – Somazx

回答

2

您可以從Ruby對Amazon Elasticsearch進行簽名,安全的請求。我使用Heroku上的應用程序進行了以下操作。

確保您有elasticsearch寶石> = v1.0.15作爲這種支持只是那裏執行12月4日,2015年

您還需要這種寶石:從elasticsearch-ruby/elasticsearch-transport

gem 'faraday_middleware-aws-signers-v4' 

例 文檔:

您可以在配置中使用任何標準的法拉第中間件和插件b鎖定,例如簽收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寶石。使用上面的示例在初始化程序中設置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 
+0

確保你有elasticsearch-ruby> = v1.0.15 – Somazx