Как проверить срок действия кэшированного предварительно подписанного URL-адреса accessKeyId (подписавшая сторона, а не подпись)? - PullRequest
0 голосов
/ 16 апреля 2020

Я работаю с некоторыми кэшированными предварительно подписанными URL-адресами для загрузок S3, довольно просто. У нас есть много URL-адресов для каждого актива и много ресурсов для каждого запроса, поэтому, чтобы не создавать столько новых предварительно подписанных URL-адресов для каждого запроса, мы сохраняем предварительно подписанные URL-адреса, пока срок их действия еще не наступил. Большую часть времени он работает нормально, но время от времени мы получаем 400 неверных запросов с сообщением об ошибке «Token expired».

Из того, что я узнал:

  • S3 предварительно подписанные URL также иметь accessKeyId, который является аутентификацией подписавшего.
  • Ключ подписавшего также имеет свое собственное время истечения.
  • Предварительно подписанный URL может быть отклонен, если истек срок действия ключа подписавшего, даже если срок действия самого URL не достигнут.

Итак, у меня есть вопрос: как я могу проверить время истечения accessKeyId, так как мой Сервер уже может обновить свой собственный ключ (и добавить к этому неопределенность экземпляров сервера разные или нет ключей) и у меня больше нет доступа к AWS.config.credentials.expirationTime?

1 Ответ

1 голос
/ 17 апреля 2020

К сожалению, я думаю, что вам не повезло, когда вы смотрите на сам URL. Я уверен, что он встроен в x_amz_security_token, но формат этого токена не публикуется (хотя, если вы расшифруете его с помощью Base64, вы увидите несколько интересных бит читаемого текста и много двоичных данных).

Вместо этого я рекомендую вам убедиться, что срок действия подписанного URL-адреса совпадает с датой окончания сеанса, который его подписывает. сервер и использовать учетные данные из этого назначения роли для создания подписанного URL-адреса.

Для этой предполагаемой роли просто необходимо иметь разрешение s3:PutObject для корзины, в которую загрузка будет go. Предполагаемый сеанс ролей будет иметь любую длительность, которую вы запрашиваете, начиная с момента, когда вы принимаете роль (в отличие от вашего экземпляра Lambda / EC2 / чего угодно, который только восстанавливает учетные данные, срок действия которых истекает).

...