Является ли X-Amz-Expires
обязательным заголовком/параметром?
X-Amz-Expires
используется только с аутентификацией строки запроса, а не с заголовком Authorization:
.
Нет значения по умолчанию для проверки подлинности строки запроса. Это обязательный параметр, и служба отклонит запрос, если в строке запроса присутствует X-Amz-Algorithm=AWS4-HMAC-SHA256
, а X-Amz-Expires=...
— нет.
<Error>
<Code>AuthorizationQueryParametersError</Code>
...
О какой отметке времени мы здесь говорим?
Это относится к X-Amz-Date:
при использовании с заголовком Authorization:
. Поскольку X-Amz-Date:
является частью входных данных алгоритма подписи, изменение даты или времени также меняет подпись. В остальном идентичный запрос, подписанный на 1 секунду раньше или позже, имеет совершенно другую подпись. По сути, AWS позволяет часам вашего сервера ошибаться до 15 минут, не нарушая вашу способность аутентифицировать запросы. Это не запасной вариант или значение по умолчанию. Это фиксированное окно.
AWS сравнивает X-Amz-Date:
из Authorization:
запросов на основе заголовка с их системным временем, которое, конечно же, синхронизируется с UTC, и запрос отклоняется, если это значение отличается от UTC более чем на 15 минут на момент поступления запроса. Никакой другой проверки, связанной с аутентификацией, не происходит до проверки времени.
Проверка срока действия аутентификации строки запроса включает другую логику:
X-Amz-Expires
не должно быть больше 604800 или меньше 0; в противном случае запрос немедленно отклоняется без дальнейшей обработки, включая сообщение, подобное приведенному выше.
X-Amz-Date
не должно быть более чем через 15 минут в будущем, согласно системным часам AWS. Ошибка Request is not yet valid
.
X-Amz-Date
не должно быть более чем на X-Amz-Expires
количество секунд в прошлом относительно системных часов AWS, и допуск на 15 минут не применяется. Ошибка Request has expired
.
При возникновении любого из этих условий дальнейшая проверка подписи не выполняется, поэтому эти сообщения не будут меняться в зависимости от достоверности подписи. Это проверяется в первую очередь.
Кроме того, самые левые 8 символов вашего X-Amz-Date:
должны соответствовать части даты вашего компонента Credential
заголовка Authorization:
. Сама дата не допускает несоответствия учетным данным (поэтому при подписании не считывайте свое системное время дважды, иначе вы рискуете создать случайную недействительную подпись около полуночи UTC).
Наконец, срок действия запросов не истекает в процессе обработки. Если вы отправляете запрос с использованием любого метода подписи, который считается действительным, когда он поступает, но срок действия которого истекает очень скоро после этого, он всегда может выполняться до завершения — например, большая загрузка S3 или запрос на создание моментального снимка EBS не запустится. , затем не удастся продолжить, поскольку таймер истечения срока действия сработал, когда запрос уже был запущен на стороне AWS. Если действие было авторизовано по запросу, оно продолжается и завершается как обычно.
person
Michael - sqlbot
schedule
18.09.2016