【问题标题】:Can I use Amazon's Elasticsearch with Rails searchkick gem securely?我可以安全地使用 Amazon 的 Elasticsearch 和 Rails searchkick gem 吗?
【发布时间】:2016-03-17 16:33:04
【问题描述】:

我想知道是否以及如何安全地使用 searchkick 和 Amazon 的 Elasticsearch。

下面是访问选项的图像。 IP 地址并不理想,因为服务器 IP 可能会更改。

如果我限制对一个或多个 AWS 账户或 IAM 用户的访问,那么我不确定如何从 rails 应用程序进行身份验证。

【问题讨论】:

标签: ruby-on-rails amazon-web-services heroku elasticsearch searchkick


【解决方案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'
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'
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2014-12-24
    • 2014-06-14
    • 2016-07-24
    • 2017-06-18
    • 2017-05-30
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多