#python #amazon-web-services #elasticsearch #python-requests
#python #amazon-веб-сервисы #elasticsearch #python-запросы
Вопрос:
Странное поведение AWS при запросе ElasticSearch с помощью синтаксиса строки запроса с использованием запросов python.
import requests
from requests_aws4auth import AWS4Auth
...
aws_auth = AWS4Auth(access_key, secret_key, region, service, session_token=token)
res = requests.request(url=url, method=method, data=query, headers={'Content-Type': 'application/json'}, auth=aws_auth)
if not res.ok:
print(res.text)
...
Когда есть только один фильтр или его нет, все работает нормально. Например.:
GET log_index/_doc/_search?q=country_code:US
{
"aggs": { ...}
}
=> OK
Но когда я добавляю больше запросов, он прерывается с ошибкой:
GET log_index/_doc/_search?q=country_code:(US OR CA)
{
"aggs": { ...}
}
или
GET log_index/_doc/_search?q=country_code:US AND os:windows
{
"aggs": { ...}
}
=> Ошибка HTTP 403:
Вычисленная нами подпись запроса не соответствует предоставленной вами подписи. Проверьте свой секретный ключ доступа AWS и метод подписи. Для получения подробной информации обратитесь к документации сервиса.
Есть ли у кого-нибудь идеи о том, как «исправить» эту проблему?
Примечание 1: Без нескольких запросов все работает как ожидалось => это не проблема с учетными данными.
Примечание 2: Выполнение запросов в браузере или в Kibana дает ожидаемые результаты => это не проблема с запросами.
Примечание 3: Пробовали с кодировкой URL и без нее (urllib.parse.quote)
Обновить:
- Отключение аутентификации запроса (удалив auth =aws_auth) и белый список IP помогает
- Поведение такое же с телом запроса / без него
Текущее решение / обходной путь: После нескольких часов отладки все еще не понимаю, в чем проблема. Запросы были переписаны только для тела запроса, например:
GET log_index/_doc/_search
{
"query": { "bool": { ... } },
"aggs": { ... }
}
Все работает, как ожидалось, но создать правильный bool-запрос сложно.
Комментарии:
1. Вы правильно запустили
aws configure
?2. @Rubens_Z: Учетные данные AWS верны, аутентификация в ES Service и в других сервисах работает без проблем