Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
    • Cloud Interconnect
    • Cloud Backup
    • Cloud Registry
    • Yandex AI Studio
    • Compute Cloud
    • Object Storage
    • Managed Service for Kubernetes®
    • Yandex BareMetal
    • Smart Web Security
    • Security Deck
    • Managed Service for PostgreSQL
    • Managed Service for ClickHouse®
    • Monium
    • Cloud CDN
    • Network Load Balancer
    • Virtual Private Cloud
    • Cloud DNS
    • Application Load Balancer
    • Yandex Cloud Video
    • Stackland
    • Yandex Cloud Router
    • Yandex Managed Service for Trino
    • Managed Service for MySQL®
    • Managed Service for Valkey™
    • Managed Service for Apache Spark™
    • Yandex StoreDoc
    • Managed Service for OpenSearch
    • Managed Service for Apache Kafka®
    • Data Transfer
    • Yandex MPP Analytics Engine for PostgreSQL
    • Yandex Managed Service for Apache Airflow®
    • Data Processing
    • Yandex MetaData Hub
    • Managed Service for YDB
    • Managed Service for Sharded PostgreSQL
    • Managed Service for YTsaurus
    • Yandex WebSQL
    • DataLens
    • Yandex Search API
    • SpeechSense
    • SpeechKit
    • DataSphere
    • Vision OCR
    • Translate
    • Yandex Neurosupport
    • Yandex Cloud Detection and Response
    • Yandex Identity Hub
    • Key Management Service
    • Certificate Manager
    • Yandex Lockbox
    • Audit Trails
    • SmartCaptcha
    • Cloud Desktop
    • GOST Gateway
    • Yandex SIEM
    • SourceCraft Code Assistant
    • Container Registry
    • Managed Service for GitLab
    • SourceCraft
    • Managed Service for Prometheus®
    • Cloud Functions
    • API Gateway
    • Yandex Cloud Postbox
    • Message Queue
    • Serverless Integrations
    • IoT Core
    • Data Streams
    • Serverless Containers
    • Cloud Notification Service
    • Yandex Query
    • Identity and Access Management
    • Yandex Cloud Console
    • Resource Manager
    • Yandex Cloud Billing
    • Yandex Cloud Quota Manager
    • Cloud Apps
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Yandex Object Storage
  • Правила тарификации
  • Справочник Terraform
    • Аутентификация в API
      • Как пользоваться API
      • Подписывание запросов
      • Начало работы с S3 API
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

В этой статье:

  • Генерирование строки для подписи
  • Генерирование подписывающего ключа
  • Подпись строки с помощью ключа
  • Отладка с помощью AWS CLI
  1. Справочник API
  2. AWS S3 REST
  3. Подписывание запросов

Подписывание запросов

Статья создана
Yandex Cloud
Обновлена 24 июня 2026 г.
Открыть в Markdown
  • Генерирование строки для подписи
  • Генерирование подписывающего ключа
  • Подпись строки с помощью ключа
  • Отладка с помощью AWS CLI

Важно

Подписывать запросы необходимо только при использовании аутентификации с помощью статического ключа доступа. Если вы используете аутентификацию с помощью IAM-токена, подписывать запросы не требуется.

Многие запросы к Object Storage аутентифицируются на стороне сервиса и пользователь, отправляющий запрос, должен его подписать.

Object Storage поддерживает подпись AWS Signature V4.

Процесс подписывания состоит из этапов:

  1. Генерирование строки для подписи.
  2. Генерирование подписывающего ключа.
  3. Подпись строки с помощью ключа.

Для подписи необходимо использовать механизм HMAC с хэширующей функцией SHA256. Поддержка соответствующих методов есть во многих языках программирования. В примерах предполагается, что существует функция sign(KEY, STRING), которая выполняет кодирование входной строки по заданному ключу.

Генерирование строки для подписиГенерирование строки для подписи

Строка для подписи (StringToSign) зависит от сценария использования Object Storage:

  • Обращение к API, совместимому с Amazon S3, без помощи SDK или специализированных утилит.
  • Загрузка объектов с помощью HTML-формы.
  • Подписывание URL с помощью query-параметров.

Генерирование подписывающего ключаГенерирование подписывающего ключа

Чтобы сгенерировать подписывающий ключ, вам необходимо иметь статические ключи доступа к Object Storage. О том, как их получить, читайте в статье Подготовка к работе.

Чтобы сгенерировать подписывающий ключ:

  1. Закодируйте дату с помощью секретного ключа:

    DateKey = sign("AWS4" + "SecretKey", "yyyymmdd")
    
  2. Закодируйте регион с помощью полученного на предыдущем шаге ключа DateKey:

    RegionKey = sign(DateKey, "ru-central1")
    
  3. Закодируйте сервис с помощью полученного на предыдущем шаге ключа RegionKey:

    ServiceKey = sign(RegionKey, "s3")
    
  4. Получите подписывающий ключ:

    SigningKey = sign(ServiceKey, "aws4_request")
    

Примечание

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

Для генерации подписывающего ключа AWS SDK использует локальное системное время.

Если локальное системное время некорректно

Вы можете использовать функцию получения реального времени, например v4.SignSDKRequestWithCurrentTime в AWS SDK для Go:

client := s3.New(sess)
client.Handlers.Sign.Swap(v4.SignRequestHandler.Name, request.NamedHandler{
    Name: v4.SignRequestHandler.Name,
    Fn: func(r *request.Request) {
        v4.SignSDKRequestWithCurrentTime(r, currentTimeFn)
    },
})

Подпись строки с помощью ключаПодпись строки с помощью ключа

Чтобы получить подпись строки, необходимо использовать механизм HMAC с хэширующей функцией SHA256, а полученный результат преобразовать в шестнадцатеричное представление.

signature = Hex(sign(SigningKey, StringToSign))

Отладка с помощью AWS CLIОтладка с помощью AWS CLI

Чтобы отладить процесс формирования канонического запроса, строки для подписи и подписывающего ключа, используйте утилиту AWS CLI с параметром --debug.

Примечание

Убедитесь, что сервисный аккаунт, от имени которого вы выполняете команды aws, имеет необходимые права для выполнения запрашиваемых действий. Например, для создания бакета назначьте сервисному аккаунту роль storage.editor на каталог. Подробнее на странице Обзор способов управления доступом в Object Storage.

AWS CLI

В терминале выполните команду для создания бакета и посмотрите, как генерируются параметры для запроса:

aws s3api create-bucket \
  --endpoint-url=https://storage.yandexcloud.net \
  --bucket <имя_бакета> \
  --debug

Результат:

2024-06-03 13:02:36,238 - MainThread - botocore.auth - DEBUG - CanonicalRequest:
PUT
/<имя_бакета>

host:storage.yandexcloud.net
x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b********
x-amz-date:20240603T100236Z

host;x-amz-content-sha256;x-amz-date
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b********

2024-06-03 13:02:36,238 - MainThread - botocore.auth - DEBUG - StringToSign:
AWS4-HMAC-SHA256
20240603T100236Z
20240603/ru-central1/s3/aws4_request
7877a13bafaa45f9751e7f345b64a63acc6de279ff927736e906d7c5********

2024-06-03 13:02:36,238 - MainThread - botocore.auth - DEBUG - Signature:
90545034742d1e057c8eeb2cca3c23a38a3ced5ef847f61ac80cb8e1********

Полезные ссылкиПолезные ссылки

  • Начало работы с AWS S3 API в Yandex Object Storage
  • Пример отправки подписанного запроса с помощью утилиты curl
  • Пример кода для генерации подписи

Была ли статья полезна?

Предыдущая
Как пользоваться API
Следующая
Начало работы с S3 API
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»