Подписание ElasticSearch AWS-вызовов

Я пытаюсь подписать все наши призывы 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();

Для справки: политика, прилагаемая к экземпляру elasticsearch, к которому мы пытаемся получить доступ;

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

Другая информация;

  • Мы используем раму Laravel, версия 5.4.7
  • Версия клиента Elasticearch 5.3.2

Ответ 1

Трудно ответить на что-либо конкретное без полного понимания того, что происходит с конкретным запросом, но вот несколько советов о том, где начать поиск решения.

  1. Может возникнуть проблема с промежуточным программным обеспечением. Я нашел еще один, который, кажется, чище и лучше тестировался. Я бы предложил попробовать его - amazon-es-php
  2. Возможно, возникла проблема с вашей политикой/настройкой VPC, поэтому обязательно проверьте эту страницу для возможных проблемных мест
  3. Другой вариант - включить loggin для вашего клиента elasticsearch php, чтобы пролить свет на то, что происходит с запросами. Это можно сделать, добавив библиотеку монологи к вашему приложению и создав обработчик журнала. Вот руководство от официальной эластичной поисковой документации.

Ответ 2

Это помогло мне, когда у меня была аналогичная проблема:

Чтобы устранить эту проблему, проверьте следующее:

Убедитесь, что вы используете клиента, который поддерживает подписание учетных данных, и что ваши запросы подписываются правильно. AWS использует Signing Version 4 Signing Process для добавления информации аутентификации в запросы AWS; запросы от клиентов, которые не совместимы с Подписной версией 4, отклоняются с анонимной неавторизованной ошибкой. Примеры хорошо сформированных запросов к Elasticsearch см. В разделе Подписание запроса поиска службы поиска Amazon Elasticsearch.

Убедитесь, что у пользователей и ресурсов, указанных в политике доступа, указано правильное имя ресурса Amazon (ARN). Для получения общей информации о ARN см. "Имена ресурсов Amazon" (ARN) и пространства имен службы AWS.

Убедитесь, что IP-адреса, указанные в политике доступа, используют нотацию CIDR. Политики доступа используют запись CIDR при проверке вашего IP-адреса на IP-адреса, указанные политикой.

Убедитесь, что IP-адреса, указанные в вашей политике доступа, соответствуют IP-адресам, которые вы используете для доступа к кластеру Elasticsearch. Возможно, ваш IP-адрес изменился с момента первоначальной настройки политики доступа. Вы можете определить публичный IP-адрес любого экземпляра на странице http://checkip.amazonaws.com/.

Обзор Устранение неполадок политики IAM для получения дополнительной информации об устранении неполадок.

Для получения дополнительной информации проверьте это...