Хранилище
S3. Сгенерировать временную ссылку (presigned URL)
Что такое 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 (Отказано в доступе).
В 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 (воспользуйтесь конвертером, чтобы преобразовать время)
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.
Готово! Команда сгенерирует ссылку. Скопируйте её и пришлите пользователю, которому хотите открыть доступ.