签署ElasticSearch AWS调用

Con*_*ods 13 php amazon-web-services elasticsearch laravel-5

我正在尝试将所有AWS调用签名到ElasticSearch但是响应始终是;

User: anonymous is not authorized to perform: es:ESHttpGet on resource:

我尝试了多个密钥对和IAM用户.

我们PHP中的调用是使用官方的elasticsearch-php客户端进行的,所有请求都是使用此处的连接器进行签名的.

下面显示的是我们如何构建ElasticSearch客户端并应用签名中间件;

$credentials = new Credentials('<KEY>', '<SECRET>');
$signature = new SignatureV4('es', 'eu-central-1');

$middleware = new AwsSignatureMiddleware($credentials, $signature);
$defaultHandler = ESClientBuilder::defaultHandler();
$awsHandler = $middleware($defaultHandler);

$clientBuilder =  ESClientBuilder::create();

$clientBuilder
    ->setHandler($awsHandler)
    ->setHosts(['<URL>']);
$this->_client = $clientBuilder->build();
Run Code Online (Sandbox Code Playgroud)

作为参考,我们试图访问的弹性搜索实例附带的策略是;

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<IAM_USER>"
      },
      "Action": "es:*",
      "Resource": "<RESOURCE>/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

其他信息;

  • 我们使用的是Laravel框架,版本5.4.7
  • Elasticsearch客户端版本5.3.2

Bog*_*ans 1

如果不完全了解特定请求所发生的情况,就很难回答任何具体问题,但这里有一些关于从哪里开始寻找解决方案的建议。

  1. 中间件可能有问题。我找到了另一个,它似乎更干净且经过更好的测试。我建议尝试一下 - amazon-es-php
  2. 您的策略/VPC 配置可能存在问题,因此请务必检查此页面是否存在可能有问题的地方
  3. 另一种选择是为您的 elasticsearch php 客户端启用登录,以了解请求的情况。这可以通过将独白库添加到应用程序并创建记录器处理程序来完成。这是来自弹性搜索官方文档的指南。