MinIO¶
MinIO — S3-совместимое объектное хранилище. Хранит артефакты атак, веса AI/ML-моделей, аудио- и изображения для тестирования.
Назначение¶
Используется для хранения всех бинарных объектов: отчёты, adversarial-изображения, adversarial-аудио, веса моделей, presigned URL для загрузки в браузере.
S3 Buckets¶
При первом запуске bootstrap создаёт 10 бакетов:
| Бакет | Назначение |
|---|---|
attack-artifacts |
Общие артефакты атак |
scan-reports |
Отчёты сканирований |
model-artifacts |
Артефакты моделей |
model-weights |
Веса моделей (VGG19, ResNet50, Whisper) |
cv-images |
Исходные изображения для CV-атак |
cv-attack-artifacts |
Adversarial-изображения |
audio-samples |
Исходные аудиофайлы для ASR-атак |
asr-attack-artifacts |
Adversarial-аудиофайлы |
results-artifacts |
Артефакты результатов |
jailbreak-reports |
Отчёты jailbreak-сервиса |
Зависимости¶
Входящие (кто подключается)¶
| Сервис | Бакеты | S3-библиотека | Формат endpoint |
|---|---|---|---|
jailbreak |
jailbreak-reports |
boto3/aiobotocore | host:port (без схемы) |
results |
results-artifacts, cv-attack-artifacts, cv-images, asr-attack-artifacts, audio-samples |
boto3 | host:port |
scan-profile |
audio-samples, cv-images |
minio-python | host:port |
model-mgmt |
model-weights |
boto3 | host:port |
asr |
asr-attack-artifacts, audio-samples, model-weights |
appsec_genai_shared | http://host:port |
cv |
cv-attack-artifacts, cv-images, model-weights |
minio-python | host:port |
orchestrator |
scan-reports |
boto3 | host:port |
Три формата endpoint
asr ожидает endpoint со схемой (http://minio:9000), cv и остальные — без схемы (minio:9000). Детали — на странице каждого сервиса.
Исходящие¶
Нет.
Values¶
| Параметр | По умолчанию | Обязателен | Описание |
|---|---|---|---|
persistence.enabled |
false |
нет | Включить PVC |
persistence.size |
"200Gi" |
нет | Размер (учитывайте веса моделей) |
persistence.storageClass |
"" |
нет | StorageClass |
global.image.tag |
— | да | Версия образа |
global.imagePullSecrets[0].name |
— | да | imagePullSecret |
Пример values.yaml¶
# values-minio.yaml
persistence:
enabled: true # ОБЯЗАТЕЛЬНО для production
size: "200Gi" # с учётом весов моделей (~15 ГБ для Whisper + CV)
storageClass: ""
global:
image:
registry: registry.appsec.global
repositoryPrefix: appsecgenai-release
tag: "<VERSION>"
imagePullSecrets:
- name: harbor-cr
Установка¶
helm upgrade --install minio \
oci://registry.appsec.global/appsecgenai-release/charts/minio \
--version <VERSION> -n genai --create-namespace \
--wait \
-f values-minio.yaml
После установки чарт создаёт Secret minio-auth с ключами MINIO_ROOT_USER и MINIO_ROOT_PASSWORD.
Внешний MinIO¶
Если MinIO уже развёрнут отдельно (не через этот чарт) — установите minio.enabled: false и укажите координаты в global.deps.minio.
Wizard (values.yaml)¶
minio:
enabled: false # не ставить in-cluster MinIO
global:
deps:
minio:
host: minio.example.com
port: 9000
existingSecret: minio-auth # Secret с MINIO_ROOT_USER / MINIO_ROOT_PASSWORD
scheme: https # https если MinIO за TLS (default: http)
# bootstrap: true # создать бакеты в существующем MinIO
bootstrap: идемпотентность
Бакеты создаются с --ignore-existing (409 Conflict = пропуск). Оставить bootstrap: true на каждый update — безопасно. При встроенном MinIO (minio.enabled: true) bootstrap не нужен — Helm hook Job создаёт бакеты автоматически.
Что делает scheme: https
Wizard проставляет S3_ENDPOINT_URL / S3_ENDPOINT с нужной схемой во все продуктовые сервисы. Для cv дополнительно выставляется S3_SECURE=true (minio-python клиент не поддерживает схему в endpoint).
Ручная установка (k8s-manual)¶
При ручной установке каждого сервиса через helm install укажите endpoint как строку в global.url.s3Endpoint:
# values-<service>.yaml
global:
url:
# Внешний MinIO через HTTPS — строковый формат (передаётся as-is)
s3Endpoint: "https://minio.example.com:9000"
Формат endpoint зависит от сервиса
asrожидает URL со схемой:https://minio.example.com:9000cvожидает без схемы:minio.example.com:9000— и отдельноS3_SECURE: "true"вenv:jailbreak,results,orchestrator,model-mgmt,scan-profileожидают без схемы +S3_SECURE: "true"вenv:
Детали — на странице каждого сервиса.
Bootstrap бакетов¶
При установке через Wizard бакеты создаются автоматически. При ручной установке — создайте после старта MinIO.
Реальные бакеты из bootstrap кода:
| Бакет | Назначение |
|---|---|
cv-images |
Исходные изображения для CV-атак |
model-weights |
Веса моделей (VGG19, ResNet50, Whisper) |
scan-artifacts |
Артефакты сканирований |
scan-results |
Результаты сканирований |
asr-artifacts |
Артефакты ASR-атак |
jailbreak-artifacts |
Артефакты jailbreak-атак |
cv-artifacts |
Adversarial-изображения |
reports |
Отчёты |
thumbnails |
Превью артефактов |
temp |
Временные файлы |
# Port-forward к MinIO
kubectl port-forward svc/minio 9000:9000 -n genai &
sleep 2
# Получить credentials
MC_USER=$(kubectl get secret minio-auth -n genai \
-o jsonpath='{.data.MINIO_ROOT_USER}' | base64 -d)
MC_PASS=$(kubectl get secret minio-auth -n genai \
-o jsonpath='{.data.MINIO_ROOT_PASSWORD}' | base64 -d)
# Настроить mc
mc alias set genai http://localhost:9000 "$MC_USER" "$MC_PASS"
# Создать бакеты (идемпотентно)
for BUCKET in cv-images model-weights scan-artifacts scan-results \
asr-artifacts jailbreak-artifacts cv-artifacts \
reports thumbnails temp; do
mc mb genai/${BUCKET} 2>/dev/null && echo "✓ ${BUCKET}" || echo "→ ${BUCKET} already exists"
done