2015-10-16 5 views
5

Ho installato un nuovo cluster ElasticSearch su AWS che consente solo l'accesso a uno specifico utente IAM.Ricerca contro AWS ElasticSearch protetto

Tuttavia, sto cercando di connettermi a questo da Ruby e ho cercato di utilizzare l'SDK AWS ma non ha metodi per eseguire effettivamente operazioni HTTP sul tuo cluster ES, solo per accedere alle API di configurazione.

Come al solito, questo richiede tutte le richieste di firma di AWS che richiedono per l'accesso API, ma non riesco a trovare nulla che indichi come fare questa roba. Sto usando Ruby.

In sostanza, quello che sto cercando è poter fare richieste GET e PUT a questo cluster utilizzando i credenziali utente IAM. La restrizione IP non è un'opzione per me.

+0

Ho risposto alla tua domanda? – Somazx

risposta

2

È possibile effettuare richieste firmate e sicure su Amazon Elasticsearch da Ruby. Ho fatto quanto segue con un'app su Heroku.

Assicurarsi di avere gemma elasticsearch> = v1.0.15 come supporto per questo è stato lì implementata solo 4 dicembre, 2015.

È inoltre necessario questo gioiello:

gem 'faraday_middleware-aws-signers-v4' 

Esempio dal elasticsearch-ruby/elasticsearch-transport documentazione:

È possibile utilizzare qualsiasi middleware e plug-in di Faraday standard nella configurazione b bloccare, ad esempio firmare le richieste per il servizio AWS elasticsearch:

Con questo codice:

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 

Questo funziona anche con la gemma searchkick con Rails. Impostare Searchkick.client utilizzando l'esempio precedente, in un inizializzatore:

# 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

Assicurati di avere elasticsearch-ruby> = v1.0.15 – Somazx