Перейти к содержимому

Подписанные ссылки для доступа к объектам

Заголовок раздела «Подписанные ссылки для доступа к объектам»

По умолчанию доступ к объектам в Object Storage имеет только владелец. Владелец может назначать права доступа другим пользователям.

Однако при работе с Object Storage могут возникнуть ситуации, когда доступ к объектам нужно предоставить любому пользователю из интернета, например:

  • необходимость открыть один или несколько объектов для публичного скачивания;
  • организация резервного копирования и миграции данных;
  • интеграция Object Storage со сторонними сервисами и приложениями.

Организовать ограниченный публичный доступ к объектам можно с помощью подписанных ссылок (presigned URL), которые включают подпись, подтверждающую авторизацию. Доступ к объекту по таким ссылкам может получить любой пользователь.

Подписанная ссылка дает доступ только к одному объекту. Время ее действия ограничено. С помощью подписанной ссылки можно выполнить только одну операцию: либо загрузить, либо скачать объект.

Подписанную ссылку может сгенерировать любой пользователь, у которого есть НМAC-ключ.

Подписанная ссылка имеет следующий вид:

https://storage.mwsapis.ru/bucket/file1.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=t9XS183JYMrbWlieuXRz%2F20241205%2Fru-central1%2Fs3%2Faws4_request&X-Amz-Date=20241205T075426Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=ecb7b343c27b4582124cc7e8271a53db20006b9d86dff33719db1edcebeb9998

В ее состав входит подпись, а также некоторые дополнительные параметры:

ПараметрОписание
X-Amz-Algorithm Алгоритм для генерации подписи
X-Amz-ExpiresВремя в секундах, в течение которого ссылка будет действительна. Может иметь значение от 60 (1 минута) до 604800 (7 дней) секунд
X-Amz-DateВремя и дата подписания запроса в формате YYYMMDDThhmmss. Должна совпадать с датой в параметре X-Amz-Credential
X-Amz-SignedHeadersЗаголовки, которые были использованы при создании подписи (через запятую)
X-Amz-SignatureКриптографическая подпись, которая создается с помощью секретного ключа и подтверждает, что запрос был авторизован
X-Amz-CredentialУчетные данные, которые включают идентификатор ключа доступа и дату. Имеют формат вида <идентификатор ключа доступа>/<дата в формате YYYY-MM-DD/<ru-central1>/<aws4-request>

Сгенерировать подписанную ссылку на скачивание объекта

Заголовок раздела «Сгенерировать подписанную ссылку на скачивание объекта»
  • AWS CLI
  • Python
  • Go
bash
aws s3 presign s3://<имя бакета>/<ключ объекта> --expires-in <срок действия ссылки в секундах>

Чтоб скачать объект, вставьте подписанную ссылку в адресную строку браузера. Скачивание начнется автоматически.

Также для скачивания можно использовать консольные утилиты — например, cURL:

bash
curl -o <имя, под которым будет сохранен объект> "<подписанная ссылка>"

Сгенерировать ссылку на загрузку объекта

Заголовок раздела «Сгенерировать ссылку на загрузку объекта»

Сгенерировать ссылку на загрузку объекта в Object Storage можно только с помощью SDK. В утилите AWS CLI генерация ссылок для загрузки не поддерживается.

  • Python
  • Go

Приведенный код на Python:

  1. Импортирует библиотеку boto3 — официальный AWS SDK для Python.
  2. Создает клиент и сессию для подключения к Object Storage.
  3. Определяет имя бакета, в который нужно загрузить объект, и имя, под которым объект будет загружен.
  4. Устанавливает для подписанной ссылки срок действия 10 минут (600 секунд).
  5. Генерирует и выводит подписанную ссылку на загрузку объекта.
python
import boto3
session = boto3.session.Session(profile_name='default')
s3 = session.client(
service_name='s3',
endpoint_url='https://storage.mwsapis.ru/'
)
presigned_url = s3.generate_presigned_url(
"put_object",
Params={"Bucket": "bucket", "Key": "file.txt"},
ExpiresIn=600,
)
print(presigned_url)

Загрузить объект по подписанной ссылке можно с помощью утилиты cURL:

bash
curl -X PUT -T <путь к файлу в локальной системе> "<подписанная ссылка>"