Является ли X-Amz-Expires обязательным заголовком / параметром для запросов к AWS?

  1. Является X-Amz-Expires требуемый заголовок / параметр? Официальная документация противоречива и использует ее в некоторых примерах, а не в других.

  2. Если это не требуется, каково значение срока действия по умолчанию для подписанного запроса? Соответствует ли это максимально возможному значению для X-Amz-Expires параметр, который составляет 604800 (семь дней)?

  3. В документации (см. Ссылки выше) говорится о X-Amz-Expires параметр только в контексте передачи параметров подписи в строке запроса. Если X-Amz-Expires параметр является обязательным, требуется ли он только для передачи параметров подписи в строке запроса (в отличие от передачи их с заголовком авторизации)?


Обновить:

В статье " Введение в процессы безопасности AWS" на странице 17 говорится

Запрос должен поступить в AWS в течение 15 минут после отметки времени в запросе. В противном случае AWS отклонит запрос.

Теперь о какой временной отметке мы говорим здесь? Я думаю, что это X-Amz-Date, Если я прав, то возникает другой вопрос:

  1. Как X-Amz-Date а также X-Amz-Expires параметры относятся друг к другу? Для меня это звучит как алгоритм истечения срока действия запроса отходит до 15 минут от X-Amz-Date отметка времени, если X-Amz-Expire нет

1 ответ

Решение

Является 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 минут, не нарушая вашу способность аутентифицировать запросы. Это не запасной вариант или дефолт. Это фиксированное окно.

X-Amz-Date: из Authorization: Запросы на основе заголовков сравниваются AWS с их системным временем, которое, конечно, синхронизируется с UTC, и запрос отклоняется, если это происходит вручную, если это значение перекошено от UTC более 15 минут, когда поступает запрос. Никакой другой проверки, связанной с аутентификацией, не происходит до проверки времени.

Проверка истечения срока действия проверки подлинности Query String требует другой логики:

  • 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: заголовок. Сама дата не допускает расхождений с учетными данными (поэтому при подписании не считывайте системное время дважды, в противном случае вы рискуете сгенерировать случайную недействительную подпись около полуночи по Гринвичу).

Наконец, запросы не истекают в процессе обработки. Если вы отправляете запрос, используя любой метод подписи, который считается действительным, когда он прибывает, но срок его действия истечет очень скоро после этого, ему всегда разрешается выполнить до конца - например, загрузка большого S3 или запрос создания снимка EBS не начнутся., затем не удается продолжить, поскольку таймер истечения времени срабатывает, когда запрос уже запущен на стороне AWS. Если действие было запрошено по запросу, оно продолжается и завершается как обычно.

Другие вопросы по тегам