Buckets и пользователи

Создание S3 buckets и управление учетными данными

Приложение Bucket создает S3 bucket через COSI и подготавливает учетные данные для каждого пользователя в виде Kubernetes Secrets.

Создание Bucket

Минимальный bucket использует BucketClass по умолчанию и не создает пользователей:

apiVersion: apps.cozystack.io/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: tenant-example
spec: {}

Это создает BucketClaim в BucketClass по умолчанию (tenant-example). Чтобы bucket был полезен, добавьте хотя бы одного пользователя (см. Пользователи ниже).

Выбор Storage Pool

Если экземпляр SeaweedFS определяет storage pools, используйте поле storagePool, чтобы выбрать конкретный pool:

apiVersion: apps.cozystack.io/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: tenant-example
spec:
  storagePool: ssd

Это создает BucketClaim в BucketClass tenant-example-ssd.

Когда storagePool пустой (значение по умолчанию), bucket использует BucketClass по умолчанию.

Object Locking

Чтобы создать bucket с включенной блокировкой объектов, задайте locking: true:

apiVersion: apps.cozystack.io/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: tenant-example
spec:
  storagePool: ssd
  locking: true

Это создает BucketClaim в BucketClass с суффиксом -lock, например tenant-example-ssd-lock. BucketClasses с включенным блокировкой используют политику удаления Retain и настраивают блокировку объектов в режиме COMPLIANCE с периодом хранения по умолчанию.

Пользователи

Map users определяет именованных S3-пользователей для bucket. Каждая запись создает ресурс COSI BucketAccess и соответствующий Kubernetes Secret с S3 учетные данные.

apiVersion: apps.cozystack.io/v1alpha1
kind: Bucket
metadata:
  name: my-bucket
  namespace: tenant-example
spec:
  storagePool: ssd
  users:
    admin: {}
    reader:
      readonly: true

Это создает двух пользователей:

ПользовательДоступИспользуемый BucketAccessClassИмя Secret
adminread-writetenant-example-ssdmy-bucket-admin
readerread-onlytenant-example-ssd-readonlymy-bucket-reader

Параметры пользователя

ПараметрТипПо умолчаниюОписание
readonlyboolfalseПри true создает учетные данные из BucketAccessClass с суффиксом -readonly

Доступ к учетным данным

Каждый пользователь получает Kubernetes Secret с именем {bucket-name}-{username} в том же namespace. Secret содержит S3 учетные данные, созданные COSI driver:

kubectl get secret my-bucket-admin -n tenant-example -o yaml

Secret содержит поля, необходимые для настройки S3 client: endpoint, access key, secret key. Точный набор полей зависит от реализации COSI driver.

Ротация учетных данных

Учетные данные пользователя bucket (access key и secret key) генерируются один раз при первом создании пользователя и не могут быть обновлены на месте. Чтобы ротировать учетные данные пользователя, удалите пользователя из map users и примените изменения, затем добавьте пользователя обратно и примените изменения еще раз:

# Шаг 1: удалите пользователя, чтобы удалить существующие учетные данные
spec:
  users: {}
# Шаг 2: добавьте пользователя обратно, чтобы создать новый набор учетных данных
spec:
  users:
    admin: {}

Логика выбора BucketClass

Имя BucketClass составляется из трех частей:

{seaweedfs-namespace}[-{storagePool}][-lock]
storagePoollockingИспользуемый BucketClass
(empty)falsetenant-example
(empty)truetenant-example-lock
ssdfalsetenant-example-ssd
ssdtruetenant-example-ssd-lock

Аналогично составляется BucketAccessClass:

{seaweedfs-namespace}[-{storagePool}][-readonly]

Полный пример

Разверните bucket в pool ssd с одним admin-пользователем и одним read-only пользователем:

apiVersion: apps.cozystack.io/v1alpha1
kind: Bucket
metadata:
  name: media-assets
  namespace: tenant-example
spec:
  storagePool: ssd
  locking: false
  users:
    app:
      readonly: false
    backup-reader:
      readonly: true

После создания bucket получите учетные данные:

# Read-write учетные данные для пользователя "app"
kubectl get secret media-assets-app -n tenant-example \
  -o jsonpath='{.data}' | jq 'map_values(@base64d)'

# Read-only учетные данные для пользователя "backup-reader"
kubectl get secret media-assets-backup-reader -n tenant-example \
  -o jsonpath='{.data}' | jq 'map_values(@base64d)'

Связанная документация

Last modified 2026-06-29: translate 1.5 (73d3d03)