Подписывание запросов
Многие запросы к Object Storage аутентифицируются на стороне сервиса и пользователь, отправляющий запрос, должен его подписать.
Object Storage поддерживает подпись AWS Signature V4
Процесс подписывания состоит из этапов:
- Генерирование строки для подписи.
- Генерирование подписывающего ключа.
- Подпись строки с помощью ключа.
Для подписи необходимо использовать механизм HMACsign(KEY, STRING)
, которая выполняет кодирование входной строки по заданному ключу.
Генерирование строки для подписи
Строка для подписи (StringToSign
) зависит от сценария использования Object Storage:
- Обращение к API, совместимому с Amazon S3, без помощи SDK или специализированных утилит.
- Загрузка объектов с помощью HTML-формы.
- Подписывание URL с помощью query-параметров.
Генерирование подписывающего ключа
Чтобы сгенерировать подписывающий ключ, вам необходимо иметь статические ключи доступа к Object Storage. О том, как их получить, читайте в статье Подготовка к работе.
Генерирование подписывающего ключа:
-
Закодировать дату с помощью секретного ключа:
DateKey = sign("AWS4" + "SecretKey", "yyyymmdd")
-
Закодировать регион с помощью полученного на предыдущем шаге ключа
DateKey
:RegionKey = sign(DateKey, "ru-central1")
-
Закодировать сервис с помощью полученного на предыдущем шаге ключа
RegionKey
:ServiceKey = sign(RegionKey, "s3")
-
Получить подписывающий ключ:
SigningKey = sign(ServiceKey, "aws4_request")
Подпись строки с помощью ключа
Чтобы получить подпись строки, необходимо использовать механизм HMAC
с хэширующей функцией SHA256
, а полученный результат преобразовать в шестнадцатеричное представление.
signature = Hex(sign(SigningKey, StringToSign))
Примеры кода для генерирования подписи см. в статье Подписанные (pre-signed) URL.