S3 Presigned URL. Сгенерировать временную ссылку на файл

Последние изменения: 03.03.2023

Что такое presigned URL
Сгенерировать presigned URL

        • через aws cli
        • через S3cmd

Что такое presigned URL

Presigned URL — это временная ссылка, по которой можно получить доступ к приватному файлу в хранилище. Сгенерировать такую ссылку может только тот, у кого есть ключи доступа (Access key и Secret key) от хранилища. Как правило, это владелец.

Работа с presigned URL устроена так:

1. Владелец генерирует presigned URL, задавая срок действия ссылки.

2. Владелец отправляет сгенерированную ссылку пользователям, которым хочет открыть доступ к файлу.

3. Пользователи получают ссылку вида:

187cab819548cbd320bc29b2e34b9407.png

4. Получив такую ссылку, пользователи смогут посмотреть и скачать файл в течение срока действия ссылки, который задал владелец.

5. Когда время действия ссылки истечёт, доступ будет аннулирован. При переходе по ссылке пользователи увидят ошибку AccessDenied (Отказано в доступе).

7bd9c1c0453385742912253926cd81e9.png

В 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 вашего хранилища (его можно найти в Деталях хранилища в личном кабинете)

3. Нажмите Enter.

Готово! Команда сгенерирует ссылку. Скопируйте её и пришлите пользователю, которому хотите открыть доступ.

Генерировать ссылки в S3cmd

1. Откройте командную строку или консоль и перейдите к каталогу S3cmd.

2. Вставьте команду ниже в S3cmd и замените значения на ваши: 

s3cmd signurl s3://example-bucket/image.jpg 1657457538

Где:

  • example-bucket — название бакета, где находится файл

  • image.jpg — файл, к которому хотите открыть доступ

  • 1657457538 — окончание срока действия ссылки в формате Timestamp (воспользуйтесь конвертером, чтобы преобразовать время)

Также вы можете задать срок действия ссылки не в Timestamp, а используя команду Echo. Например, задать срок действия — 7 дней можно, введя следующую строку:
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.

Готово! Команда сгенерирует ссылку. Скопируйте её и пришлите пользователю, которому хотите открыть доступ.

Помогла ли вам статья?