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

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

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

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

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

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

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

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

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

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

signature = Hex(sign(SigningKey, StringToSign))