Просто построить на ответ Ка Hou Ieong «s, есть одна вещь, которая споткнулась меня. Я использовал aws-requests-auth==0.3.0
, а при использовании requests.get(url, auth=auth)
я все еще получал 403
.
; TLDR;: Мой URL был строки запроса и это выглядит как aws-requests-auth
не или, вероятно, не может убедиться, что QueryString параметры отсортированы в порядке возрастания и %
закодирована.
==> Поэтому, как только я изменил мой url
QueryString заказываются и %
закодирована, я получил 200
.
Детали: Я включил API протоколирования шлюза, и я получаю
In [46]: resp = requests.get(url, auth=auth)
In [47]: resp.text
Out[47]: u'{"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....
(новые линии и усечения (...
) выше шахтные)
Пер с Amazon Canonical Request for Signature Version 4,
Чтобы построить каноническую строку запроса, выполните следующие шаги:
Сортируйте имена параметров по коду символа в порядке возрастания. Например, имя параметра, начинающееся с прописной буквы F, предшествует имени параметра, которое начинается с буквы нижнего регистра b.
URI-кодирование для каждого имени параметра и значения в соответствии со следующими правилами:
а. Не кодируйте URI любого из безоговорочных символов, которые RFC 3986 определяет: A-Z, a-z, 0-9, дефис (-), подчеркивание (_), период (.) И тильда (~).
b. Процент-кодировать все остальные символы с% XY, где X и Y - шестнадцатеричные символы (0-9 и верхний регистр A-F).Например, символ пробела должен быть закодирован как% 20 (не используя «+», как это делают некоторые схемы кодирования), а расширенные символы UTF-8 должны быть в форме% XY% ZA% BC.
Это каноническое QueryString используется в генерации Authorization Signature
и АМС применяет те же правила при расчете Signature Version 4
сиговых. Подводя итог, я думаю, конечно aws-requests-auth
Auth
, конечно, не может изменить ваш url
, вам нужно.
Спасибо, работает как очарование. После установки пользовательских имен доменов я заменил aws_host и получаю URL с моим собственным доменным именем. – blueCat