Подписание 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
Трудно ответить на что-либо конкретное без полного понимания того, что происходит с конкретным запросом, но вот несколько советов о том, где начать поиск решения.
- Может возникнуть проблема с промежуточным программным обеспечением. Я нашел еще один, который, кажется, чище и лучше тестировался. Я бы предложил попробовать его - amazon-es-php
- Возможно, возникла проблема с вашей политикой/настройкой VPC, поэтому обязательно проверьте эту страницу для возможных проблемных мест
- Другой вариант - включить 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 для получения дополнительной информации об устранении неполадок.
Для получения дополнительной информации проверьте это...