ruby - AWS Elasticsearch 服务不断给出 'User anonymous' 错误

标签 ruby amazon-web-services elasticsearch

我正在尝试从 EC2 实例连接到我的 ES 集群,并已将我的 IAM 策略配置为接受来自我的 key / key 对的请求。我正在使用 ruby​​ 尝试对服务进行查询并不断收到 403 '用户:匿名无权执行:es:ESHttpGet on resource:arn ...'

我的代码如下所示:

require 'faraday_middleware/aws_signers_v4'

client = Elasticsearch::Client.new url: 'https://myEScluster.es.amazonaws.com' do |f|
  f.request :aws_signers_v4,
        credentials: Aws::Credentials.new('mykey', 'mysecret'),
        service_name: 'es',
        region: 'us-east-1'
end  

当我尝试执行 client.search 时出现错误。我查看了 ES gem 的所有 github 问题和文档,其中说要做我正在尝试的事情:
“您可以在配置 block 中使用任何标准的 Faraday 中间件和插件,例如签署 AWS Elasticsearch 服务的请求:”
require 'patron'
require 'faraday_middleware/aws_signers_v4'

client = Elasticsearch::Client.new url: 'https://search-my-cluster-abc123....es.amazonaws.com' do |f|
  f.request :aws_signers_v4,
            credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET_ACCESS_KEY']),
            service_name: 'es',
            region: 'us-east-1'
end

正如你所看到的,它几乎是一样的。我也试过这些:

https://github.com/elastic/elasticsearch-ruby/issues/232

https://github.com/elastic/elasticsearch-ruby/pull/235

另一件事,这是我的 ES 服务安全策略:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "myarn"
      },
      "Action": "es:*",
      "Resource": "myresourcearn/*"
    }
  ]
}

不幸的是,亚马逊缺乏这方面的文档,他们的服务 api 只提供基本的维护功能。谁能帮我吗?

提前致谢!

最佳答案

检查您的 elasticsearch gem 版本,我使用的是 1.0.14 并得到相同的错误。固定到 1.0.15 允许 block 将传输配置为使用签名请求。见 https://github.com/elastic/elasticsearch-ruby/blob/master/CHANGELOG.md#1015 .

关于ruby - AWS Elasticsearch 服务不断给出 'User anonymous' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33961162/

相关文章:

Elasticsearch:获取给定文档中的短语频率

Ruby 泄露的对象被 RubyVm::Env 引用

ruby - require 'a' 和 require 'a.rb' 有什么区别?

ruby - 如何使用 rspec stub /模拟对命令行的调用?

elasticsearch - Elasticsearch + Filebeat + Logstash

elasticsearch - 在Elasticsearch中过滤geo_distance

ruby - 从现有数据库生成数据映射器模型

amazon-web-services - 如何使用lambda将s3中的最新代码部署到lambda函数

sql-server - Azure AWS 数据库连接

amazon-web-services - 将文件上传到 Amazon S3 时出现访问被拒绝错误