Top.Mail.Ru

Хранилище

S3. Сгенерировать временную ссылку (presigned URL)

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

Как работать с presigned URL:

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

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

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

https://s-dt2.cloud.edgecore.ru/bucket/image.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=IQXDZ0GBVTR12[...]&X-Amz-Date=20220707T074708Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=b28fb[..]

Где:

  • https://s-dt2.cloud.edgecore.ru/bucket/image.jpg – путь до файла в бакете.
  • X-Amz-Algorithm=AWS4-HMAC-SHA256 – алгоритм шифрования, который использовался для создания подписи в ссылке.
  • X-Amz-Credential=IQXDZ0GBVTR12[...] – дополнительная информация о запросе (регион AWS, время).
  • X-Amz-Date=20220707T074708Z – время создания ссылки в формате ГГГГММДД’T’ЧЧММСС’Z.
  • X-Amz-Expires=3600 – продолжительность действия ссылки в секундах.
  • X-Amz-SignedHeaders=host – HTTP-заголовки, которые будут добавлены в запрос по ссылке.
  • X-Amz-Signature=b28fb[..] – подпись, которая даёт пользователю доступ к просмотру и скачиванию контента по ссылке. 

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

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

S3. Сгенерировать временную ссылку (presigned URL)

В presigned URL не заложена проверка подлинности получателя. Это значит, что доступ к файлу будет у всех пользователей, к которым попала действующая временная ссылка. Например, если один из пользователей, которому вы прислали ссылку, перешлёт её другому человеку, тот тоже сможет просмотреть и скачать файл.

Чтобы защитить временную ссылку, можно ограничить доступ по IP в Policy (Политика доступа). Код для этого вы найдёте в статье «Настроить ACL и Policy для S3-хранилища».

Мы подготовили инструкцию по генерации 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.

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

Мы используем cookie, чтобы сайт стал лучше для вас.