Почему AccessKeyId включен в предварительно подписанный URL-адрес s3? - PullRequest
0 голосов
/ 06 апреля 2019

Почему AccessKeyId включено в предварительно подписанный URL-адрес s3?Это действительно необходимо?Предварительно подписанный URL-адрес уже содержит поле Signature, почему для него все еще требуется AccessKeyId?Не будет ли Signature достаточным?

1 Ответ

3 голосов
/ 06 апреля 2019

Подпись используется для доказательства двух вещей:

  • , что подписывающее лицо разрешает этот конкретный запрос, и
  • , что подписавшее лицо обладало секретным ключом, связанным с указано идентификатор ключа доступа.

Важно ... что подпись на самом деле не содержит какой-либо значимой информации.Это либо правильно, либо неправильно.

Это основанный на HMAC хэш общедоступной (выполняемый запрос) и закрытой (секретный ключ) информации.Сервис не «расшифровывает» его, не интерпретирует и не извлекает из него что-либо.

Вместо этого служба - используя идентификатор ключа доступа - ищет связанный секретный ключ, ¹ принимает запрос;и внутренне генерирует подпись, которую вы должны были сгенерировать для того же запроса ... затем он проверяет, действительно ли вы это сгенерировали. ² Если нет, то ошибка SignatureDoesNotMatch.Ошибка не является более конкретной, потому что подпись для любого данного запроса в любой момент времени имеет только одно возможное значение.Любая другая подпись - просто неправильная подпись.

Но идентификатор ключа доступа должен быть указан, чтобы служба знала, кто делает запрос.Подпись не содержит обратимой / декодируемой / дешифруемой информации.


¹ ищет связанный секретный ключ , вероятно, упрощение при использовании Подписи версии 4, потому что есть уровни (ключи даты, региона, службы, подписи), полученные из секретного ключа пользователя IAM ... и структура и вложение подразумевают, что отдельные службы имеют доступ только к необходимым им значениям.

² , которые вы создали - это важная фраза, поскольку существует вероятность неправильного понимания источника предварительно подписанных URL-адресов.Они генерируются полностью в вашем коде, без взаимодействия со службой.S3 не знает о существовании каких-либо предварительно подписанных URL-адресов, пока они фактически не используются.Это имеет последствия, которые иногда могут быть полезны;например, вполне возможно создать предварительно подписанный URL-адрес для объекта, который еще не существует, и создать объект позже.Кроме того, отключение или удаление aws-access-key-id, который использовался для создания предварительно подписанного URL-адреса, немедленно делает недействительными все URL-адреса, которые когда-либо генерировал ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...