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