Создать бакет
Если у вас есть проект, вы можете создать в нем бакет.
-
Если проект еще не создан, создайте его:
kubectl create namespace <название_проекта> -
Создайте файл ресурса
Bucket:touch bucket.yaml -
Откройте файл и вставьте конфигурацию:
Бакет без публичного доступаБакет с публичным доступомapiVersion: storage.stackland.yandex.cloud/v1alpha1
kind: Bucket
metadata:
name: app-data
spec: {}apiVersion: storage.stackland.yandex.cloud/v1alpha1
kind: Bucket
metadata:
name: app-data
spec:
anonymousAccessFlags:
read: true
list: falseВ этом случае объекты будут доступны для чтения без аутентификации по ссылке вида
https://storage.sys.<домен кластера>/<название_бакета>/<название_объекта>.Где:
metadata.name— уникальное в хранилище имя бакета длиной от 3 до 63 символов. Используйте строчные буквы латинского алфавита, цифры и дефисы; начинайте и заканчивайте имя буквой или цифрой. Имя не должно иметь вид IP-адреса.metadata.namespace— проект, в котором создается бакет.spec.anonymousAccessFlags.read— разрешает анонимным пользователям читать объекты.spec.anonymousAccessFlags.list— разрешает анонимным пользователям получать список объектов.
-
Примените манифест:
kubectl apply -f bucket.yaml -n <название_проекта> -
Проверьте статус бакета:
kubectl get bucket -n <название_проекта>Дождитесь, пока в колонке
PHASEпоявится значениеReady.Если создание завершилось ошибкой, получите ее описание:
kubectl get bucket <название_бакета> -n <название_проекта> -o yamlПричина указана в
status.message. Исправьте манифест и примените его повторно.
-
Если вы еще не открыли проект, выберите проект.
-
В левом меню выберите Object Storage.
-
Нажмите Создать бакет.
-
Укажите настройки:
- Название бакета — только строчные буквы, цифры и дефисы.
- Публичный доступ — включите или выключите анонимный доступ к объектам.
-
Нажмите Создать.
Дополнительные настройки через CLI
В примере ниже заданы все доступные блоки настройки бакета: лимит размера, версионирование, публичный доступ, аутентификация по статическим ключам, метки, ACL, CORS, политика доступа, правила жизненного цикла и Object Lock. Выберите нужные настройки и измените их значения перед применением манифеста.
Пример создает закрытый бакет с лимитом 100 ГБ и версионированием. Для новых версий объектов включена блокировка на 7 дней в режиме GOVERNANCE. Отключить Object Lock после включения нельзя.
Для ACL в примере нужен сервисный аккаунт archive-reader в вашем проекте. Если его еще нет, создайте:
kubectl create serviceaccount archive-reader -n <название_проекта>
Сохраните манифест в файл bucket.yaml:
apiVersion: storage.stackland.yandex.cloud/v1alpha1
kind: Bucket
metadata:
name: app-archive
namespace: my-project
spec:
maxSize: 100Gi
versioning: ENABLED
anonymousAccessFlags:
read: false
list: false
configRead: false
disabledStaticKeyAuth: false
tags:
environment: production
application: archive
acl:
grants:
- permission: READ
grantType: ACCOUNT
grantee:
kind: ServiceAccount
namespace: my-project
name: archive-reader
cors:
- id: archive-web-app
allowedOrigins:
- "https://app.example.com"
allowedMethods:
- GET
- HEAD
- PUT
- POST
- DELETE
allowedHeaders:
- "*"
exposeHeaders:
- ETag
- x-amz-version-id
maxAgeSeconds: 3600
policy:
Version: "2012-10-17"
Statement:
- Sid: AllowAuthorizedAccess
Effect: Allow
Principal: "*"
Action: "s3:*"
Resource:
- "arn:aws:s3:::app-archive"
- "arn:aws:s3:::app-archive/*"
lifecycleRules:
- id: expire-temporary-reports
enabled: true
filter:
prefix: reports/
tags:
retention: temporary
objectSizeGreaterThan: 1Mi
objectSizeLessThan: 1Gi
expiration:
days: 90
noncurrentExpiration:
noncurrentDays: 30
- id: cleanup-incomplete-uploads
enabled: true
filter:
prefix: reports/
abortIncompleteMultipartUpload:
daysAfterExpiration: 7
- id: cleanup-delete-markers
enabled: true
filter:
prefix: reports/
expiration:
expiredObjectDeleteMarker: true
noncurrentDeleteMarkers:
noncurrentDays: 7
objectLock:
enabled: true
defaultRetention:
mode: GOVERNANCE
days: 7
Настроить параметры примера
-
metadata.name— имя бакета. При его изменении замените имя и в обеих строкахspec.policy.Statement[].Resource: первая относится к бакету, вторая — к его объектам. -
metadata.namespaceиspec.acl.grants[].grantee.namespace— имя вашего проекта. Все перечисленные ниже параметры находятся вspec. -
maxSize— максимальный объем данных в бакете. Значение0или отсутствие поля снимает ограничение размера бакета. -
versioning—ENABLEDвключает сохранение версий объектов. После включения версионирования вернуться кDISABLEDнельзя. При включенном Object Lock приостанавливать версионирование с помощьюSUSPENDEDтакже нельзя. -
anonymousAccessFlags— разрешения для анонимных пользователей:read— чтение объектов,list— список объектов,configRead— чтение конфигурации бакета. В примере все три разрешения выключены. -
disabledStaticKeyAuth—falseсохраняет возможность аутентификации по статическим ключам. Значениеtrueзапрещает такой способ аутентификации. -
tags— метки самого бакета. Они не назначаются объектам автоматически. -
acl.grants— разрешения для сервисных аккаунтов. В примереarchive-readerполучаетREAD, включая возможность прочитать ACL бакета. Для полного доступа укажитеFULL_CONTROL. Вgranteeзадайтеkind: ServiceAccount, имя аккаунта и его проект. Для публичного доступа используйтеanonymousAccessFlags. -
cors— правила запросов из браузера:id— идентификатор правила;allowedOrigins— непустой список адресов веб-приложений. Заменитеhttps://app.example.comна свой адрес;allowedMethods— непустой список разрешенных методов. ДоступныGET,HEAD,PUT,POSTиDELETE; для составной загрузки нуженPOST;allowedHeaders— заголовки, которые браузер может отправлять. Значение"*"разрешает любые заголовки;exposeHeaders— заголовки ответа, доступные коду веб-приложения;maxAgeSeconds— время кеширования ответа на preflight-запрос в секундах.
CORS не выдает права на чтение или изменение данных: приложению также нужны разрешения доступа к бакету.
-
policy— политика доступа S3. В примере правилоAllowпропускает операции над бакетом и его объектами, для которых пользователь уже имеет права. При изменении политики явно разрешите нужные операции: правилоDenyсамо по себе не разрешает остальные действия. Общий результат также зависит от IAM, ACL и настроек публичного доступа. -
lifecycleRules— правила автоматической очистки. Для каждого правила задайтеid,enabledи действия:filterвыбирает объекты. Все его условия должны выполняться одновременно. Вexpire-temporary-reportsэто префиксreports/, метка объектаretention: temporaryи размер строго между1Miи1Gi. В остальных правилах достаточно указанного префикса;expiration.days: 90задает срок хранения текущих объектов в днях. При включенном версионировании создается маркер удаления, а версия становится нетекущей. Вместоdaysможно задатьdateв формате RFC 3339, например"2030-01-01T00:00:00Z", илиexpiredObjectDeleteMarker: true. Эти три параметра нельзя использовать одновременно в одном блокеexpiration;noncurrentExpiration.noncurrentDays: 30удаляет версии через 30 дней после того, как они перестали быть текущими;abortIncompleteMultipartUpload.daysAfterExpiration: 7удаляет части незавершенной составной загрузки через 7 дней после ее начала;expiration.expiredObjectDeleteMarker: trueудаляет маркер удаления, у которого не осталось версий объекта;noncurrentDeleteMarkers.noncurrentDays: 7удаляет нетекущие маркеры удаления через 7 дней.
-
objectLock— блокировка версий объектов. Для использованияdefaultRetentionзадайтеenabled: trueиversioning: ENABLED. ВdefaultRetentionукажитеmode: GOVERNANCEилиmode: COMPLIANCEи срок вdaysлибоyears. В режимеGOVERNANCEобойти блокировку может пользователь с соответствующим разрешением; вCOMPLIANCEудаление до истечения срока запрещено. Правила жизненного цикла не удаляют защищенную версию до окончания блокировки.
Применить манифест
После изменения параметров примените манифест:
kubectl apply -f bucket.yaml
Проверьте состояние бакета:
kubectl get bucket <название_бакета> -n <название_проекта> -o yaml
Дождитесь status.phase: Ready и совпадения status.observedGeneration с metadata.generation. Для изменения существующего бакета отредактируйте его манифест и примените повторно. Удаление необязательных настроек из манифеста сбрасывает их к значениям по умолчанию; ограничения на отключение версионирования и Object Lock сохраняются.
Что дальше
- Создайте ключ доступа для работы с бакетом через S3 API.
- Узнайте больше о ресурсной модели Object Storage.