Подробный гайд по принципам работы с S3-хранилищем.
Данные для подключения к S3 можно найти в панели управления в настройках нужного бакета.
Кластер s3.timeweb.com
Для работы в конфигурационном файле используйте логин и пароль созданного пользователя:
Access Key
используется логин аккаунта;Secret Key
используется пароль администратора хранилища;Region
используется ru-1
;URL
для доступа (endpoint_url
) — https://s3.timeweb.com
.На текущий момент реализована поддержка AWS Signature V4
.
Для подтверждения личности запрашивающего все запросы должны иметь подпись, которую можно создать с помощью Access Key
и Secret Key
.
Кластер s3.timeweb.cloud
В конфигурационном файле используйте логин и пароль созданного пользователя:
Access Key
используется логин аккаунта;Secret Key
используется пароль администратора хранилища;Region
используется ru-1
;URL
для доступа (endpoint_url
) — https://s3.timeweb.cloud
.На текущий момент реализована поддержка AWS Signature V2
и AWS Signature V4
.
Для подтверждения личности запрашивающего все запросы должны иметь подпись, которую можно создать с помощью Access Key
и Secret Key
.
Вычисление подписи состоит из трех шагов:
SigningKey
)StringToSign
)Для получения подписывающего ключа закодируйте с помощью алгоритма HMAC-SHA256
следующие данные:
DateKey = HMAC-SHA256("AWS4"+"<SecretKey>", "<YYYYMMDD>")
DateRegionKey = HMAC-SHA256(<DateKey>, "<aws-region>")
DateRegionServiceKey = HMAC-SHA256(<DateRegionKey>, "<aws-service>")
SigningKey = HMAC-SHA256(<DateRegionServiceKey>, "aws4_request")
Мы поддерживаем метод подписи запросов через HTTP-заголовок Authorization
.
Использование заголовка Authorization
является наиболее частным методом аутентификации пользователя.
Общий вид запроса:
Authorization: AWS4-HMAC-SHA256
Credential=12345_USER/20180524/ru-1/s3/aws4_request,
SignedHeaders=host;range;x-amz-date,
Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
Описание параметров запроса:
Параметр |
Описание |
AWS4-HMAC-SHA256 |
Подпись AWS версии 4 (AWS4) и алгоритм подписи (HMAC-SHA256) |
Credential |
Содержит ключ доступа и информацию о запросе в формате: ${ACCESS_KEY}/${YYYYMMDD}/${REGION}/s3/aws4_request |
SignedHeaders |
Список в нижнем регистре имен заголовков запроса, используемых при вычислении подписи |
Signature |
Подписанный хэш, состоящий из хэша тела запроса, секретного ключа и информации о запросе (каноническом запросе) |
Для того чтобы получить строку для подписи, необходимо сделать канонический запрос следующего вида:
<HTTPMethod>\n
<CanonicalURI>\n
<CanonicalQueryString>\n
<CanonicalHeaders>\n
<SignedHeaders>\n
<HashedPayload>
Где:
HTTPMethod
— один из HTTP-методов, например GET
, PUT
, HEAD
и DELETE
;CanonicalURI
— URI-кодированная часть адреса, которая начинается после домена, с первым «/», например для https://s3.timeweb.com/bucket/sample.txt
будет выглядеть следующим образом: /bucket/sample.txt
;CanonicalQueryString
— параметры строки запроса;CanonicalHeaders
— список заголовков и их значений, разделенных новой строкой, в нижнем регистре и без пробелов;SignedHeaders
— список имен заголовков без значений, отсортированных по алфавиту, в нижнем регистре и через точку с запятой. Например: host;x-amz-content-sha256;x-amz-date
;HashedPayload
— хэш SHA256
тела запроса Hex(SHA256Hash())
. В случае, если тела запроса нет, хэш необходимо посчитать от пустой строки Hex(SHA256Hash(“”))
.Строка для подписи представляет собой конкатенацию следующих строк:
"AWS4-HMAC-SHA256" + "\n" +
timeStampISO8601Format + "\n" +
<Scope> + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))
Где:
AWS4-HMAC-SHA256
— данная строка определяет алгоритм шифрования, который вы используете;timeStampISO8601Format
— текущее UTC-время в формате ISO 8601 (например, 20130524T000000Z
);Scope
— строка формата date.Format(<YYYYMMDD>) + "/" + <region> + "/" + <service> + "/aws4_request"
, например “20130606/ru-1/s3/aws4_request”
, привязывает полученную подпись к определенной дате, региону или сервису. В случае привязки к дате, подпись будет действовать 15 минут.Подробнее о способе аутентификации через заголовок Authorization
читайте в официальной документации Amazon S3 API.
Кластер s3.timeweb.com
Облачное хранилище Timeweb Cloud обеспечивает совместимость с методами AWS S3: Bucket CRUD
, Bucket Location
, Object CRUD
, Object Copy
.
Метод |
Описание |
GET Service |
Получение списка бакетов |
GET Bucket (List Objects) |
Получение списка объектов в бакете |
GET Bucket Location |
Получение региона бакета |
DELETE Bucket |
Удаление бакета |
HEAD Bucket |
Получение статуса бакета |
PUT Bucket |
Создание бакета |
Метод |
Описание |
GET Object |
Получение объекта |
HEAD Object |
Получение метаданных объекта |
PUT Object |
Создание объекта |
PUT Object — Copy |
Копирование объекта |
DELETE Object |
Удаление объекта |
Кластер s3.timeweb.cloud
Основные методы S3, которые поддерживает хранилище Timeweb Cloud, перечислены ниже. Список всех функций и дополнительную информацию можно найти в официальной документации.
Метод |
Описание |
GET Service (List Buckets) |
Получение списка бакетов |
GET Bucket (List Objects) |
Получение списка объектов в бакете |
GET Bucket Location |
Получение региона бакета |
DELETE Bucket |
Удаление бакета |
HEAD Bucket |
Получение статуса бакета |
PUT Bucket |
Создание бакета |
GET Bucket ACL |
Получение списка управления доступом (access control list) |
PUT Bucket ACL |
Назначение списка управления доступом |
GET Bucket Multipart Uploads |
Получение списка текущих составных загрузок |
PUT Bucket Versioning (Enable / Suspend) |
Включение или выключение версионирования бакета |
GET Bucket Versioning |
Получение статуса версионирования (метод не вернет статус, если состояние версионирования не было ранее установлено методом PUT) |
PUT Notification |
Включение уведомлений о событиях для бакета |
DELETE Notification |
Удаление уведомлений о событиях для бакета |
GET Notification |
Получения списка уведомлений для бакета |
GET Bucket Lifecycle |
Получение конфигурации жизненного цикла бакета |
DELETE Bucket Lifecycle |
Удаление конфигурации жизненного цикла бакета |
PUT Bucket Tagging |
Добавление меток бакету |
GET Bucket Tagging |
Получение меток бакета |
DELETE Bucket Tagging |
Удаление меток бакета |
GET Bucket Policy |
Получение политики доступа для бакета |
PUT Bucket Policy |
Применение политики доступа для бакета |
DELETE Bucket Policy |
Удаление политики доступа для бакета |
Метод |
Описание |
PUT Object |
Создание объекта |
PUT Object — Copy |
Копирование объекта |
DELETE Object |
Удаление объекта |
GET Object |
Получение объекта |
HEAD Object |
Получение метаданных объекта |
GET Object ACL |
Получение списка управления доступом для объекта |
PUT Object ACL |
Назначение списка управления доступом для объекта |
POST Multipart Upload |
Запуск составной загрузки |
PUT Multipart Upload Part |
Загрузка части объекта |
GET Multipart Upload Parts |
Получение загруженных частей составной загрузки |
POST Multipart Upload (Complete) |
Завершение составной загрузки |
DELETE Multipart Upload |
Прерывание составной загрузки |
PUT Object Tagging |
Добавление меток для объекта |
GET Object Tagging |
Получение меток объекта |
DELETE Object Tagging |
Удаление меток объекта |
10 дней работал S3 как хранилище редкоиспользуемых видеофайлов. После это перестал. Поддержка подсказала, что проблема в разрешении политик CORS: No 'Access-Control-Allow-Origin' header is present on the requested resource. Не могли бы вы добавить статью как правильно и, главное, безопасно применять политики? Имеющиеся применительно к Amazon приемы пока не понятно как реализуемы (не разобралась вечерами).
Добрый день!
Мы подготовили статью, в которой подробно описали, как правильно настроить политики CORS для S3-бакетов. Вы можете ознакомиться с ней по ссылке.
Если после настройки CORS проблема сохранится, напишите, пожалуйста, нам повторно в тикете.
Помогло! Спасибо огромное! На 5 баллов!
Добрый день! нужен пример еще на Golang
Добрый день! Передали пожелание коллегам, постараемся добавить в будущем 👌