VK Cloud

Presigned URL в S3: как выдать временный доступ к приватному объекту

3 сентября 2026 г.
Александр Иванов
Автор статьи
_blog_head_21.png

Presigned URL — временная ссылка со встроенной криптографической подписью. Она открывает доступ к приватному объекту в S3-совместимом хранилище без передачи получателю постоянных учётных данных. Ссылка привязана к конкретному объекту и действует ограниченный срок: получатель может выполнить ровно то действие, для которого ссылка создана, и ничего сверх этого.

Отличие от публичного доступа: сам объект и бакет остаются приватными. Presigned URL не меняет права доступа к хранилищу, а предоставляет точечное и временное разрешение.

Выдаёт такую ссылку владелец объекта или сервис с правами на бакет: подпись формируется на основе его учётных данных (постоянных или временных).

В URL зашиты параметры подписи: алгоритм, дата создания, область действия, срок действия и сама криптографическая подпись. Схема известна как AWS Signature Version 4; её используют как AWS, так и S3-совместимые реализации.

Когда получатель обращается по такой ссылке, сервер хранилища проверяет подпись и срок действия. Если подпись верна и срок не истёк, запрос выполняется; если нет, доступ отклоняется. Объект при этом не нужно временно делать публичным: проверка происходит на уровне подписи запроса, а не настроек доступа к бакету.

Важно знать

Генерация presigned URL не требует сетевого обращения к хранилищу. SDK вычисляет подпись локально на основе имеющихся ключей доступа, поэтому ссылка создаётся мгновенно и без нагрузки на сервис хранения.


Прямая загрузка файлов от клиента

Браузер или мобильное приложение загружает файл непосредственно в бакет, минуя backend-сервер приложения. Сервер не обрабатывает и не передаёт байты файла, а лишь выдаёт подписанную ссылку.

Временный доступ на скачивание

Presigned URL подходит для однократного или ограниченного по времени скачивания приватного файла — инвойса, отчёта, медиафайла — без открытия публичного доступа ко всему бакету.

Интеграция с внешними сервисами

Стороннему сервису, которому нужно один раз прочитать или записать конкретный объект, presigned URL даёт такую возможность без передачи постоянных ключей доступа.

Ограничение по методу и объекту

Presigned URL можно выпустить для разных операций — GET (скачивание) и PUT (загрузка) — без изменения прав доступа самого бакета. Ссылка привязана к конкретному методу, конкретному объекту и заданному сроку действия.

У каждого presigned URL задан срок жизни. По его истечении ссылка перестаёт работать: продлить её нельзя, нужно сгенерировать новую.

Схема AWS Signature Version 4 задаёт абсолютный потолок для параметра

ExpiresIn
— 7 дней (604 800 секунд). Этот потолок технически достижим только при подписи постоянными учётными данными (например, ключами IAM-пользователя). При подписи временными учётными данными — через IAM-роль или STS — ссылка живёт не дольше самих временных учётных данных: как только истекает сессионный токен, presigned URL перестаёт работать, даже если в
ExpiresIn
указан больший срок. А срок жизни временных учётных данных обычно куда короче семи дней — от нескольких минут до 12–36 часов в зависимости от способа их получения.

При работе с постоянными учётными данными такого дополнительного ограничения схема не задаёт (кроме общего потолка в 7 дней), но во многих SDK срок по умолчанию ограничен коротким интервалом. В boto3 (AWS SDK for Python) значение по умолчанию — 3600 секунд (1 час).

В boto3 presigned URL генерируется методом

generate_presigned_url()
у клиента S3. Метод принимает:

  • имя операции (
    get_object
    для скачивания,
    put_object
    для загрузки);
  • параметры запроса — бакет и ключ объекта;
  • срок действия ссылки через параметр
    ExpiresIn
    .

Если

ExpiresIn
не передан явно, действует значение по умолчанию — 3600 секунд.

S3-совместимые сервисы реализуют тот же протокол подписи запросов, поэтому механизм работает и за пределами AWS — в частности, в S3-совместимом Object Storage. Логика та же: подпись вычисляется локально на основе ключей доступа, сервер хранилища проверяет её при обращении по ссылке.

Presigned URL действует в рамках прав того, кто его подписал. Если у подписавшего есть право удалить объект, presigned URL на удаление тоже сработает. Ссылка не создаёт новых прав — она делегирует уже имеющиеся.

Важно знать

Не выдавайте ссылку на избыточно долгий срок. Чем дольше срок действия, тем шире окно риска при утечке ссылки третьим лицам.

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

Оставьте заявку, чтобы получить консультацию

Наши специалисты свяжутся с вами в ближайшее время и ответят на все вопросы.

            Узнавайте о выходе новых статей в блоге первыми!

            Будем держать в курсе новостей и облачных трендов

            section-subscribe_2x.png
              section-subscribe_2x.png
              Теги: S3
              Ссылка скопирована
              Поделиться

              Почитать по теме

              _blog_head_8.png
              3 сентября

              Bucket, Object и Key: как устроена модель хранения в S3-совместимых объектных хранилищах

              _blog_head_19.png
              3 сентября

              Визуально-лингвистические модели: как ИИ учится понимать изображения и текст одновременно

              _blog_head_1.png
              3 сентября

              Векторный поиск в PostgreSQL: pgvector для RAG-систем на корпоративных документах

              40+ готовых сервисов