Presigned URL в S3 позволяет временно предоставить доступ к объекту в хранилище без необходимости изменять права доступа на объект. Это удобный инструмент для скачивания файлов сторонними пользователями. В статье рассмотрим, как создать Presigned URL двумя способами: через панель управления и с использованием AWS CLI.
Через панель управления
Генерация Presigned URL доступна только для приватных бакетов. Чтобы сгенерировать Presigned URL, перейдите в раздел «Объекты» в нужном бакете. Наведите курсор на объект, для которого требуется создать ссылку, и нажмите на кнопку «Ссылка на файл».

Ссылка будет скопирована в буфер обмена и активна в течение 60 минут. После истечения этого времени при попытке перехода по ссылке будет возвращаться ошибка 403. В панели управления нельзя изменить продолжительность времени, на протяжении которого ссылка будет активна.
Ссылку также можно сгенерировать для конкретной версии объекта, если в бакете
Через AWS CLI
Создать Presigned URL с помощью AWS CLI можно с помощью команды:
Параметр --expires-in необязателен. Он определяет время доступности объекта по ссылке в секундах. Если параметр не указан, объект будет доступен в течение 3600 секунд (1 час).
Скрипт запускается командой:
Где:
-
--expires-in— время в секундах, через которое ссылка перестанет работать. -
--version-id— версия объекта (VersionId), которую можно получить, например, с помощью AWS CLI.
Данные для авторизации скрипт возьмет из файла ~/.aws/credentials
Генерация Presigned URL до загрузки объекта
Вы можете заранее сгенерировать ссылку для загрузки объекта — даже если сам объект еще не существует в бакете.
Стандартные утилиты вроде AWS CLI не поддерживают генерацию Presigned URL для загрузки, однако это можно реализовать с помощью SDK. Например, через boto3 для Python.
Пример скрипта:
Указывать Content-Type при генерации ссылки не нужно, так как его передача может привести к ошибке.
В результате выполнения скрипта будет сгенерирована временная ссылка для загрузки объекта.
Загрузить файл можно с помощью curl:
