Что такое presigned URL
Сгенерировать presigned URL
• через aws cli
• через S3cmd
Что такое presigned URL
Presigned URL — это временная ссылка, по которой можно получить доступ к приватному файлу в хранилище. Сгенерировать такую ссылку может только тот, у кого есть ключи доступа (Access key и Secret key) от хранилища. Как правило, это владелец.
Работа с presigned URL устроена так:
1. Владелец генерирует presigned URL, задавая срок действия ссылки.
2. Владелец отправляет сгенерированную ссылку пользователям, которым хочет открыть доступ к файлу.
3. Пользователи получают ссылку вида:
4. Получив такую ссылку, пользователи смогут посмотреть и скачать файл в течение срока действия ссылки, который задал владелец.
5. Когда время действия ссылки истечёт, доступ будет аннулирован. При переходе по ссылке пользователи увидят ошибку AccessDenied (Отказано в доступе).
В presigned URL не заложена проверка подлинности получателя. Это значит, что доступ к файлу будет у всех пользователей, к которым попала действующая временная ссылка. Например, если один из пользователей, которому вы прислали ссылку, перешлёт её другому человеку, тот тоже сможет просмотреть и скачать файл.
Чтобы защитить временную ссылку, можно ограничить доступ по IP в Policy (Политика доступа). Код для этого вы найдёте в статье «Настроить ACL и Policy для S3-хранилища».
Сгенерировать presigned URL
Мы подготовили инструкцию по генерации presigned URL для двух утилит управления хранилищем: AWS CLI и S3cmd.
Генерировать ссылки в AWS CLI
1. Откройте командную строку или консоль и перейдите к каталогу AWS.
2. Вставьте команду ниже в AWS и замените значения на ваши:
aws presign s3://example-bucket/image.jpg --expires in 60480 --endpoint-url s-dt2.cloud.edgecore.ru
Где:
example-bucket — название бакета, где находится файл
image.jpg — файл, к которому хотите открыть доступ
60480 — время действия ссылки в секундах (максимальный срок — 7 дней)
s-dt2.cloud.edgecore.ru — hostname вашего хранилища (его можно найти в Деталях хранилища в личном кабинете)
Готово! Команда сгенерирует ссылку. Скопируйте её и пришлите пользователю, которому хотите открыть доступ.
Генерировать ссылки в S3cmd
1. Откройте командную строку или консоль и перейдите к каталогу S3cmd.
2. Вставьте команду ниже в S3cmd и замените значения на ваши:
s3cmd signurl s3://example-bucket/image.jpg 1657457538
Где:
example-bucket — название бакета, где находится файл
image.jpg — файл, к которому хотите открыть доступ
1657457538 — окончание срока действия ссылки в формате Timestamp (воспользуйтесь конвертером, чтобы преобразовать время)
s3cmd signurl s3://example-bucket/image.jpg $(echo "`date +%s` + 3600 * 24 * 7" | bc)
Где:
example-bucket — название бакета, где находится файл
image.jpg — файл, к которому хотите открыть доступ
$(echo "`date +%s` + 3600 * 24 * 7" | bc) — срок действия на 7 дней
3. Нажмите Enter.
Готово! Команда сгенерирует ссылку. Скопируйте её и пришлите пользователю, которому хотите открыть доступ.