Начало работы
Объектное хранилище S3 на основе Ceph поддерживает RESTful API, совместимый с базовой моделью доступа к данным API Amazon S3. С помощью S3 API можно:
- Просматривать информацию о количестве и объеме контейнеров и объектов в рамках аккаунта;
- Создавать и удалять контейнеры;
- Загружать, просматривать, копировать, перемещать, скачивать и удалять объекты в контейнерах;
- Управлять сегментированной загрузкой объектов (Multipart Upload);
Доступ к API и аутентификация
К S3 API возможен только авторизованный доступ.
Адрес (URL) при использовании Path-Style адресации (по умолчанию): https://s3.inferit.cloud
Аутентификация в S3 API происходит с помощью подписи запросов.
Для формирования подписи потребуются ключи доступа, которые выдаются при создании пользователя.
Access Key ID — значение поля Access Key, предоставленного при создании S3-ключа.
Secret Access Key — значение поля Secret Key, предоставленного при создании S3-ключа.
Подписать запрос можно одним из методов:
-
HTTP-заголовок Authorization
Используйте заголовок Authorization, чтобы передать данные подписи вместе с запросом. -
Query-параметры или подписанный URL (Presigned URL)
Этот метод позволяет передавать параметры в URL запроса, что удобно для временного предоставления доступа к объектам.
Срок жизни подписи запроса — 15 минут.
Подробнее про аутентификацию см. https://docs.ceph.com/en/latest/radosgw/s3/authentication/
Совместимость
S3 API совместим со следующими возможностями Amazon S3 API
| Функция | Статус | Комментарий |
|---|---|---|
| List Buckets | Supported | |
| Delete Bucket | Supported | |
| Create Bucket | Supported | |
| Bucket Lifecycle | Supported | |
| Bucket Replication | Partial | Разрешено только между зонами |
| Policy (Buckets, Objects) | Supported | Поддерживаются ACL и политики для бакетов |
| Bucket Website | Supported | |
| Bucket ACLs (Get, Put) | Supported | |
| Bucket Location | Supported | |
| Bucket Notification | Supported | См. S3 Notification Compatibility |
| Bucket Object Versions | Supported | |
| Get Bucket Info (HEAD) | Supported | |
| Bucket Request Payment | Supported | |
| Put Object | Supported | |
| Delete Object | Supported | |
| Get Object | Supported | |
| Object ACLs (Get, Put) | Supported | |
| Get Object Info (HEAD) | Supported | |
| POST Object | Supported | |
| Copy Object | Supported | |
| Multipart Uploads | Supported | |
| Object Tagging | Supported | См. Object Related Operations |
| Bucket Tagging | Supported | |
| Storage Class | Supported | См. Storage Classes |
Возможные коды ответа
| HTTP Status | Response Code |
|---|---|
| 100 | Continue |
| 200 | Success |
| 201 | Created |
| 202 | Accepted |
| 204 | NoContent |
| 206 | Partial content |
| 304 | NotModified |
| 400 | InvalidArgument |
| 400 | InvalidDigest |
| 400 | BadDigest |
| 400 | InvalidBucketName |
| 400 | InvalidObjectName |
| 400 | UnresolvableGrantByEmailAddress |
| 400 | InvalidPart |
| 400 | InvalidPartOrder |
| 400 | RequestTimeout |
| 400 | EntityTooLarge |
| 403 | AccessDenied |
| 403 | UserSuspended |
| 403 | RequestTimeTooSkewed |
| 404 | NoSuchKey |
| 404 | NoSuchBucket |
| 404 | NoSuchUpload |
| 405 | MethodNotAllowed |
| 408 | RequestTimeout |
| 409 | BucketAlreadyExists |
| 409 | BucketNotEmpty |
| 411 | MissingContentLength |
| 412 | PreconditionFailed |
| 416 | InvalidRange |
| 422 | UnprocessableEntity |
| 500 | InternalError |