VK Cloud

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

4 сентября 2026 г.
_blog_head_10.png

Что такое presigned URL и какую проблему он решает

Приватный объект в S3-бакете по умолчанию недоступен по прямой ссылке: любое обращение требует AWS-учётных данных — access key и secret key — с правами на bucket или конкретный объект. Отправить файл кому-то напрямую нельзя, если заранее не открыть к нему публичный доступ, а это риск другого рода.

Presigned URL решает задачу иначе. Это обычная HTTP-ссылка со встроенной криптографической подписью, которая на ограниченное время даёт держателю доступ к конкретному объекту — без передачи самих ключей. Подпись формируется от имени владельца учётных данных заранее, а получатель просто переходит по ссылке или отправляет по ней запрос.

Главное отличие от публичного bucket или открытых ACL: доступ ограничен по времени, по конкретному объекту и по HTTP-методу, а не открыт всем и навсегда.

Типовые сценарии использования

Временная выдача файла клиенту

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

Приём загрузки от пользователя

Presigned PUT-запрос принимает файл напрямую в bucket, без прокладки трафика через backend-сервер.

Как устроена подпись: Signature Version 4 и срок действия

Presigned URL строится по алгоритму AWS Signature Version 4. В ссылку встраиваются параметры X-Amz-Algorithm, X-Amz-Credential, X-Amz-Date, X-Amz-Expires и X-Amz-Signature — они превращают обычный HTTP-запрос в подписанный и проверяемый.

Срок действия задаётся параметром expiration при генерации и ограничен сверху: при использовании временных учётных данных через SigV4 максимум составляет 7 дней (168 часов). После этого ссылка перестаёт работать независимо от того, использовалась она или нет.

Секретный ключ при этом никогда не покидает среду генерации и не передаётся получателю. Раскрывается только сама подпись, действующая ограниченное время и только для конкретного запроса.

Важно знать

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

Как сгенерировать presigned URL на практике

Собирать подпись SigV4 вручную не нужно: официальные AWS SDK предоставляют готовый метод. В boto3 для Python это generate_presigned_url; аналогичные методы есть в AWS SDK for JS и Java.

Минимальный набор параметров для генерации:

  • имя bucket;
  • ключ объекта;
  • HTTP-метод — GET для скачивания, PUT для загрузки;
  • время жизни ссылки.

Presigned URL для PUT-запроса открывает удобный паттерн: клиентское приложение — браузер или мобильное приложение — загружает файл напрямую в объектное хранилище, минуя backend-сервер. Это снижает нагрузку на сервер и упрощает архитектуру загрузки файлов.

Для точечного ограничения прав presigned URL комбинируют с IAM-политикой подписывающего принципала: например, доступ только к определённому префиксу bucket или только на чтение. Даже если подпись создаётся с широкими правами роли, конкретная ссылка не может выйти за границы, заданные политикой.

Почему это безопаснее, чем раздавать ключи доступа

Долгоживущие статические ключи, встроенные в код фронтенда или мобильного приложения и переданные третьей стороне, — постоянный источник риска. Их можно извлечь из кода, скопировать и использовать бессрочно, пока кто-то вручную не проведёт ротацию.

Presigned URL заменяет передачу постоянных ключей ограниченной по времени подписью. При утечке ссылки — через лог, случайную публикацию, кэш браузера — злоумышленник получает доступ только до истечения TTL и только к тому объекту и методу, для которых она была выписана.

Цена вопроса высокая. По данным Google Cloud Threat Horizons за первую половину 2025 года, слабые или отсутствующие учётные данные — главный вектор первичного доступа в облачные среды: 47,1% инцидентов; далее ошибки конфигурации (29,4%) и компрометация API или UI (11,8%). ENISA Threat Landscape 2025 фиксирует, что эксплуатация уязвимостей даёт 21,3% векторов первичного доступа в ЕС, а периметровые сервисы компрометируются массово в течение часов после раскрытия уязвимости: около 68% таких инцидентов заканчиваются развёртыванием вредоносного кода.

При такой статистике архитектура, где постоянные ключи не покидают серверную среду, а наружу выходят только ограниченные по времени подписи, — прямое сокращение поверхности атаки.

Практики безопасного использования presigned URL

Минимально достаточный TTL

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

Не логировать и не индексировать ссылку целиком

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

Ограничивать HTTP-метод и префикс объектов на уровне IAM-политики

Ограничения задаются для подписывающего принципала, а не только через TTL. Короткий срок действия не спасёт, если подпись выдана с избыточными правами.

Мониторить access logs bucket

Отслеживание аномальных обращений по presigned URL — стандартная точка контроля, которая встраивается в общие практики AppSec и DevSecOps — например, платформа VK Security Gate объединяет SAST, SCA, DAST, поиск секретов и сканирование контейнеров и внутри VK покрывает более 40 000 репозиториев и свыше 10 000 сканирований в день.


Presigned URL и альтернативные способы ограниченного доступа

Presigned URL — не единственный инструмент временного доступа к объектам. Среди альтернатив:

  • bucket policy с условиями — по IP-адресу, referer и другим параметрам запроса;
  • CDN-подписанные ссылки, выданные перед объектным хранилищем;
  • временные учётные данные через STS.

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

Заключение

Масштаб вопроса растёт вместе с облачной разработкой. По данным State of Cloud Native Development за Q1 2026, 71% backend-разработчиков в мире используют хотя бы одну cloud-native технологию, а 52% применяют три и более одновременно. При таком распространении объектных хранилищ и связанных с ними паттернов доступа presigned URL — рабочий инструмент, о механике и ограничениях которого стоит знать любой команде, работающей с S3-совместимым хранилищем.

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

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

section_subscribe_2x_9ab2d878a6_ac1afd4471.png

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

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

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

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

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

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

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

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

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

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

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