Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Object Storage
  • Правила тарификации
  • Справочник Terraform
    • Аутентификация в API
      • Как пользоваться API
      • Подписывание запросов
      • Начало работы с S3 API
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

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

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

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

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

Многие запросы к 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")
    

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

Чтобы получить подпись строки, необходимо использовать механизм 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
Проект Яндекса
© 2025 ООО «Яндекс.Облако»