2015-10-16 13 views
5

Ich habe einen neuen ElasticSearch-Cluster in AWS eingerichtet, der nur Zugriff auf einen bestimmten IAM-Benutzer erlaubt.Suche nach gesichertem AWS ElasticSearch

Ich versuche jedoch, von Ruby aus eine Verbindung herzustellen und das AWS-SDK zu verwenden, aber es gibt keine Methoden, um tatsächlich HTTP-Vorgänge für Ihren ES-Cluster durchzuführen und nur auf die Konfigurations-APIs zuzugreifen.

Wie üblich erfordert dies alle AWS Anforderungsunterschriften, die sie für den API-Zugriff benötigen, aber ich kann nichts finden, das angibt, wie man das macht. Ich benutze Ruby.

Im Wesentlichen, was ich bin, ist in der Lage, GET und PUT Anfragen an diesen Cluster mit den IAM Benutzer Kredits zu machen. IP-Beschränkung ist keine Option für mich.

+0

Hat ich Ihre Frage beantwortet? – Somazx

Antwort

2

Sie können signierte, sichere Anfragen von Ruby an Amazon Elasticsearch senden. Ich habe folgendes mit einer App auf Heroku gemacht.

Stellen Sie sicher, Sie Elasticsearch Juwel haben> = v1.0.15 als Unterstützung für diese nur umgesetzt wurde dort 4. Dezember, 2015.

Sie müssen auch dieses Juwel:

gem 'faraday_middleware-aws-signers-v4' 

Beispiel aus dem elasticsearch-ruby/elasticsearch-transport Dokumentation:

Sie können jede Standard-Faraday-Middleware und Plugins in der Konfiguration verwenden b sperren, zum Beispiel die Anforderungen für die AWS Elasticsearch Dienst anmelden:

Mit dem folgenden Code:

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 

Dies funktioniert auch mit dem searchkick Juwel mit Rails. Setzen Sie Searchkick.client mit dem obigen Beispiel in einem Initialisierer:

# 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

Vergewissern Sie sich, elasticsearch-ruby> = v1.0.15 – Somazx

Verwandte Themen