Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Object Storage
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Бакеты
      • Создание бакета
      • Удаление бакета
      • Ограничение максимального размера бакета
      • Открытие публичного доступа к бакету
      • Шифрование бакета
      • Управление жизненными циклами объектов
      • Управление конфигурацией CORS
      • Редактирование ACL бакета
      • Включение механизма логированния
    • Объекты
      • Загрузка объекта
      • Получение информации об объекте
      • Скачивание объекта
      • Получение публичной ссылки на объект
      • Удаление объекта
      • Удаление частично загруженного объекта
      • Редактирование ACL объекта
    • Хостинг статических сайтов
      • Настройка хостинга
      • Поддержка собственного домена
      • Поддержка нескольких доменных имен
      • Настройка HTTPS
  • Концепции
    • Обзор
    • Бакет
    • Объект
    • Версионирование бакета
    • Жизненные циклы объектов
    • CORS
    • Хостинг статических сайтов
    • Подписанные (pre-signed) URL
    • Составная (multipart) загрузка
    • Список управления доступом (ACL)
    • Политика доступа (Bucket Policy)
    • Загрузка файла через HTML форму
    • Класс хранилища
    • Механизм логирования действий с бакетом
    • Резервное копирование
    • Протокол TLS
    • Квоты и лимиты
  • Инструменты
    • Все инструменты
    • Консольные клиенты
      • AWS CLI
      • S3cmd
    • Файловые браузеры
      • CyberDuck
      • WinSCP
    • SDK
      • AWS SDK для Java
      • Python SDK (boto)
    • FUSE
      • s3fs
      • goofys
  • HTTP API, совместимый с Amazon S3
    • Как пользоваться API
    • Подписывание запросов
    • Справочник API
      • Все сервисы и методы
      • Bucket
        • Все методы
        • create
        • getBucketEncryption
        • getMeta
        • listObjects
        • listBuckets
        • deleteBucket
        • deleteBucketEncryption
        • putBucketEncryption
        • putBucketVersioning
        • getBucketVersioning
        • putBucketLogging
        • getBucketLogging
        • listObjectVersions
      • Object
        • Все методы
        • upload
        • get
        • copy
        • getObjectMeta
        • delete
        • deleteMultipleObjects
        • options
      • Multipart upload
        • Общий порядок составной загрузки
        • startUpload
        • uploadPart
        • copyPart
        • listParts
        • abortUpload
        • completeUpload
        • listUploads
      • Static Website Hosting
        • Все методы
        • upload
        • get
        • delete
        • Коды ответов статического сайта
      • CORS
        • Все методы
        • XML-структура конфигурации CORS
        • upload
        • get
        • delete
      • Lifecycles
        • Все методы
        • XML-структура конфигурации жизненных циклов
        • upload
        • get
        • delete
      • ACL
        • Все методы
        • XML-структура конфигурации ACL
        • objectGetAcl
        • objectPutAcl
        • bucketGetAcl
        • bucketPutAcl
      • Bucket Policy
        • Все методы
        • GetBucketPolicy
        • PutBucketPolicy
        • DeleteBucketPolicy
        • Схема данных
        • Действия
        • Условия
      • Общие заголовки запросов
      • Общие заголовки ответов
      • Ответы
  • Управление доступом
  • Правила тарификации
    • Действующие правила
    • Архив
      • До 1 января 2019 года
      • С 1 января до 1 марта 2019 года
  • Вопросы и ответы
  1. HTTP API, совместимый с Amazon S3
  2. Подписывание запросов

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

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

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

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

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

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

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

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

Чтобы сгенерировать подписывающий ключ, вам необходимо иметь статические ключи доступа к 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")
    

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

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

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

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

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

signature = Hex(sign(SigningKey, StringToSign))
В этой статье:
  • Генерирование подписывающего ключа
  • Генерирование строки для подписи
  • Подпись строки с помощью ключа
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»