Подключитесь к elasticsearch в AWS, используя ключевые учетные данные.

Я пытаюсь отправить запрос с помощью curl в мой кластер es в AWS, используя мои accessKey и secretKey. Я успешно сделал это через почтальона (подробности здесь), где вы можете указать учетные данные AWS, но я хотел бы, чтобы это работало с curl. Почтальон может автоматически сгенерировать ваш запрос на завивку, но все, что я получаю, это ошибки.

Это сгенерированный запрос на завивание вместе с ответом

curl -X GET \
  https://search-00000000000001.eu-west-1.es.amazonaws.com/_cat/indices \
  -H 'Authorization: AWS4-HMAC-SHA256 Credential=11111111111111111111/20181119/eu-west-1/es/aws4_request, SignedHeaders=cache-control;content-type;host;postman-token;x-amz-date, Signature=11111111116401882398f46011f14fdb9d55e012a4fb912706d67c1111111111' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Host: search-00000000000001.eu-west-1.es.amazonaws.com' \
  -H 'Postman-Token: 00000000-0000-4001-8006-9291e208a000' \
  -H 'X-Amz-Date: 20181119T220000Z' \
  -H 'cache-control: no-cache'

{"message":"The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details."}%

Идентификаторы были изменены, чтобы защитить невиновных.

Я проверил все свои ключи и регион, и, как я уже сказал, это работает через почтальона. Можно ли получить доступ к этому сервису AWS с помощью моих ключей через curl?


person Damo    schedule 19.11.2018    source источник
comment
Он говорит вам о проблеме прямо в сообщении об ошибке: дело не в том, что вы не подключаетесь, а в том, что ваша подпись не соответствует тому, что служба вычисляет для этого сообщения. Если это сработало с Postman, то это могло быть так: а) вы изменили какое-то отправляемое значение; б) Почтальон отправляет какое-то скрытое значение или заголовок, который он не экспортировал (маловероятно);   -  person sofend    schedule 20.11.2018
comment
Может быть, существует одноразовый токен или что-то еще, что можно использовать только один раз? Я точно знаю, что ничего не менял.   -  person Damo    schedule 20.11.2018
comment
Боюсь, у меня для вас плохие новости — подписание запроса AWS к Elastic Search — чрезвычайно сложный и трудоемкий процесс. Как только вы получите правильный код, все в порядке, но это зависит от вычисления хэша для очень запутанной строки - ошибитесь на один символ и... ну... вы видели, что происходит. Найдите подпись AWS4. Эта ссылка поможет вам начать работу — docs.aws.amazon.com/ apigateway/api-reference/signing-requests (Если бы у меня было время, я бы опубликовал более подробную информацию.) Удачи! Адам.   -  person Adam Benson    schedule 20.11.2018


Ответы (2)


Это довольно длинная кроличья нора. Спасибо Адаму за комментарий, который направил меня в правильном направлении. Ссылка https://docs.aws.amazon.com/apigateway/api-reference/signing-requests/ действительно помогает вам понять, что вам нужно делать.

С тех пор я нашел сценарий, который следует описанному выше методу запросов на подпись. Он работает в bash, и хотя он не написан для использования с запросами elasticsearch, его можно использовать для них.

https://github.com/riboseinc/aws-authenticating-secgroup-scripts Большое спасибо https://www.ribose.com за то, что выложили это на github.

person Damo    schedule 21.11.2018

Если ваш хост содержит «:443», удалите его и повторите попытку. Это сработало для меня.

«Моя первоначальная проблема: если я получаю доступ к нему с помощью Postman, используя тот же URL-адрес, я получаю ту же ошибку, но удаляя ‘: 443/’, он работает нормально, поэтому с ключом и секретом, которые я использую, все в порядке».

person Khushhalm    schedule 17.04.2020