2016-11-04 2 views
0

Я использую следующий код для создания подписанного URL:boto3: generate_presigned_url истекающие преждевременно

client.generate_presigned_url('get_object', 
    {'Bucket': client.bucket, 'Key': s3_filename}, ExpiresIn=expiry_seconds, HttpMethod='GET') 

Это генерирует URL, который выглядит примерно так:

https://[bucket_name].s3.amazonaws.com/[path]?AWSAccessKeyId=[access-key-id]&Signature=[signature]&Expires=1478646479&x-amz-security-token=[long_token_string] 

'Expires' метка времени составляет 4 дня в будущем (на момент написания), но при нажатии на ссылку я получаю XML-ответ «Token has expired». Ссылка работает в течение нескольких часов после генерации.

Есть ли что-нибудь еще, что я должен смотреть?

Спасибо.

ответ

1

Срок годности 1478646479 равен 2016-11-08T23:07:59+00:00, что в будущем, поэтому генерируемое время истечения срока действия должно быть правильным. (Если часы не так на компьютере, создающего ссылку, это может быть не так.)

Следующая вещь, чтобы проверить, являются разрешения, связанные с объектом (идентифицированного AWSAccessKeyId), который создал предварительно подписан URL. Фактически, URL-адрес использует разрешения этого объекта (например, пользователь IAM, роль IAM, учетные данные STS) для предоставления ограниченного по времени доступа к объекту. Если у этого объекта больше нет разрешения на доступ к объекту, тогда предварительно подписанный URL-адрес больше не будет функционировать.

Вы можете выполнить тесты по предварительно подписанным URL-адресам, используя команду aws s3 presign в AWS Command-Line Interface (CLI).

+0

Я думаю, что это, вероятно, правильный ответ - в настоящее время я использую роль IAM, но в ближайшее время попробую использовать только стандартный ключ доступа (что немного стыдно с точки зрения безопасности, но на самом деле нет выбора) , Отметьте его как правильное, когда я успею его протестировать. Благодаря! – Ian

Смежные вопросы