Processing: у секрета задач своя схема JSON, не как у движка
403 Forbidden на HeadObject объяснялся не кредами и не отсутствием объекта — и то и другое я проверил, они в порядке. Дело в схеме файла. Движок читает /vault/secrets/processing-s3 с ключами host/bucket/verify, а под задачи разбирает свой файл моделью S3AccountModel с ключами endpoint/bucket_name/access_key_id/secret_access_key/use_ssl. Совпадают только два имени из пяти. Коварство в том, что pydantic на формате движка НЕ падает: access_key_id и secret_access_key подходят по имени, а endpoint и bucket_name молча берут значения по умолчанию. Поэтому вместо понятной ошибки конфигурации задача шла в чужое хранилище и получала 403 — креды при этом верные. endpoint пишется без схемы, протокол задаёт use_ssl; у нас MinIO внутри кластера по http.
This commit is contained in:
parent
ab086a86b4
commit
f3c2fa194b
@ -396,16 +396,25 @@ vault_app_secrets:
|
|||||||
# yc-s3-service-account.json, а не как-нибудь читаемо, и путь обязан
|
# yc-s3-service-account.json, а не как-нибудь читаемо, и путь обязан
|
||||||
# совпадать с VAULT_MOUNT_PATH в apps/processing/aero.
|
# совпадать с VAULT_MOUNT_PATH в apps/processing/aero.
|
||||||
#
|
#
|
||||||
# Содержимое — тот же JSON, что движок получает в /vault/secrets/processing-s3,
|
# СХЕМА ЗДЕСЬ ДРУГАЯ, чем у секрета самого движка, и это главная ловушка.
|
||||||
# только одной строкой: агент кладёт значение ключа в файл как есть.
|
# Движок читает /vault/secrets/processing-s3 с ключами host/bucket/verify, а
|
||||||
|
# задача разбирает свой файл моделью S3AccountModel с ключами
|
||||||
|
# endpoint / bucket_name / access_key_id / secret_access_key / use_ssl
|
||||||
|
# Совпадают только два имени из пяти. Если положить сюда формат движка,
|
||||||
|
# pydantic НЕ упадёт — access_key_id и secret_access_key подойдут, — а
|
||||||
|
# endpoint и bucket_name молча возьмут значения по умолчанию, и задача
|
||||||
|
# получит 403 Forbidden на HeadObject: креды верные, адрес и бакет чужие.
|
||||||
|
#
|
||||||
|
# endpoint БЕЗ схемы: протокол задаёт use_ssl. У нас MinIO внутри кластера по
|
||||||
|
# http, поэтому use_ssl: false.
|
||||||
- path: secrets/apps/processing/yc-s3
|
- path: secrets/apps/processing/yc-s3
|
||||||
data:
|
data:
|
||||||
yc-s3-service-account.json: >-
|
yc-s3-service-account.json: >-
|
||||||
{"host": "http://minio.minio.svc.cluster.local:9000",
|
{"endpoint": "minio.minio.svc.cluster.local:9000",
|
||||||
"bucket": "{{ sarex_django_s3_bucket }}",
|
"bucket_name": "{{ sarex_django_s3_bucket }}",
|
||||||
"access_key_id": "{{ sarex_minio_k8s_user }}",
|
"access_key_id": "{{ sarex_minio_k8s_user }}",
|
||||||
"secret_access_key": "{{ sarex_secrets.SAREX_MINIO_ROOT_PASSWORD }}",
|
"secret_access_key": "{{ sarex_secrets.SAREX_MINIO_ROOT_PASSWORD }}",
|
||||||
"region": "us-east-1", "verify": false}
|
"use_ssl": false}
|
||||||
# --- Секреты приложения measurements ---------------------------------------
|
# --- Секреты приложения measurements ---------------------------------------
|
||||||
# Структура задана vault-шаблоном в apps/measurements/base/backend.yaml: он
|
# Структура задана vault-шаблоном в apps/measurements/base/backend.yaml: он
|
||||||
# собирает из этих ключей одну переменную S3_JSON_SETTINGS и читает endpoint
|
# собирает из этих ключей одну переменную S3_JSON_SETTINGS и читает endpoint
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user