++ use wb superset jwt k8s secret

This commit is contained in:
Kochetkov S 2026-08-17 17:19:21 +03:00
parent 1827903c41
commit e9c582800e
4 changed files with 17 additions and 38 deletions

View File

@ -101,7 +101,7 @@ Module Federation) конфигурируется отдельно на этап
| `JWT_PUBLIC_KEY` | string | — | Публичный RSA-ключ проверки | | `JWT_PUBLIC_KEY` | string | — | Публичный RSA-ключ проверки |
| `JWT_KID` | string | `None` | `kid` в заголовке токена (используется для межсервисных вызовов) | | `JWT_KID` | string | `None` | `kid` в заголовке токена (используется для межсервисных вызовов) |
| `DJANGO_JWT_SECRET` | string | `Froom too much love of living` | Легаси-секрет | | `DJANGO_JWT_SECRET` | string | `Froom too much love of living` | Легаси-секрет |
| `SERVER_SUPERSET_JWT_SECRET` | string | `""` | hmac-секрет для embedded superset guest token. В контуре wb берётся из vault `secrets/data/vault/apps/superset`, ключ `JWT_SECRET`, через роль `django-superset` | | `SERVER_SUPERSET_JWT_SECRET` | string | `""` | hmac-секрет для embedded superset guest token. В контуре wb берётся из k8s-секрета `superset-jwt-secret`, ключ `jwt_secret` |
### Celery (`CELERY_*`) ### Celery (`CELERY_*`)
@ -300,7 +300,7 @@ Module Federation) конфигурируется отдельно на этап
| `django-kafka` | `secrets/data/kafka/apps/django` | `KAFKA_BOOTSTRAP_SERVERS/SECURITY_PROTOCOL/SASL_*` | | `django-kafka` | `secrets/data/kafka/apps/django` | `KAFKA_BOOTSTRAP_SERVERS/SECURITY_PROTOCOL/SASL_*` |
| `django-jwt-private` / `django-jwt-public` | `secrets/data/vault/common/rsa_keys` | `JWT_PRIVATE_KEY` / `JWT_PUBLIC_KEY` | | `django-jwt-private` / `django-jwt-public` | `secrets/data/vault/common/rsa_keys` | `JWT_PRIVATE_KEY` / `JWT_PUBLIC_KEY` |
| `django-common` | `secrets/data/vault/common/django_auth` | `ZITADEL_ACCESS_TOKEN` | | `django-common` | `secrets/data/vault/common/django_auth` | `ZITADEL_ACCESS_TOKEN` |
| `server_superset_jwt_secret` | `secrets/data/vault/apps/superset` | `SERVER_SUPERSET_JWT_SECRET` для `/api/analytics/widgets/<id>/superset_guest_token/` | | `superset-jwt-secret` | k8s-секрет в неймспейсе `django` | `SERVER_SUPERSET_JWT_SECRET` для `/api/analytics/widgets/<id>/superset_guest_token/` |
Контейнер экспортирует эти файлы в окружение до запуска (`set -a; . /vault/secrets/...`). Контейнер экспортирует эти файлы в окружение до запуска (`set -a; . /vault/secrets/...`).
Кроме того, `production.py` из ConfigMap содержит функцию `_load_env_file`, которая Кроме того, `production.py` из ConfigMap содержит функцию `_load_env_file`, которая
@ -309,8 +309,9 @@ Module Federation) конфигурируется отдельно на этап
Для wb superset guest token не использует сервисную учётку Guest Token API: backend Для wb superset guest token не использует сервисную учётку Guest Token API: backend
формирует jwt локально и подписывает его `SERVER_SUPERSET_JWT_SECRET`, а superset формирует jwt локально и подписывает его `SERVER_SUPERSET_JWT_SECRET`, а superset
проверяет тем же значением через `GUEST_TOKEN_JWT_SECRET = os.getenv("JWT_SECRET")`. проверяет тем же значением через `GUEST_TOKEN_JWT_SECRET = os.getenv("JWT_SECRET")`.
Оба значения должны приходить из одного vault-пути `secrets/data/vault/apps/superset`; Оба значения должны совпадать: `superset/jwt-secret` используется superset как
разовый k8s-secret в `django` для этого кейса не используется. `JWT_SECRET`, а `django/superset-jwt-secret` используется backend как
`SERVER_SUPERSET_JWT_SECRET`.
Остальные (несекретные) переменные задаются в блоке `env` контейнеров Остальные (несекретные) переменные задаются в блоке `env` контейнеров
`backend`/`celery` (`SERVER_*`, `WORKFLOWS_*`, `BIMV2_*`, `MEASUREMENTS_*`, `backend`/`celery` (`SERVER_*`, `WORKFLOWS_*`, `BIMV2_*`, `MEASUREMENTS_*`,

View File

@ -26,30 +26,6 @@ spec:
remediation: remediation:
retries: 3 retries: 3
postRenderers:
- kustomize:
patches:
- target:
group: apps
version: v1
kind: Deployment
name: backend
patch: |-
- op: add
path: /spec/template/metadata/annotations
value:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/agent-init-first: "true"
vault.hashicorp.com/agent-pre-populate-only: "true"
vault.hashicorp.com/auth-path: "auth/kubernetes"
vault.hashicorp.com/role: "django-superset"
vault.hashicorp.com/agent-inject-secret-server-superset-jwt-secret: "secrets/data/vault/apps/superset"
vault.hashicorp.com/agent-inject-file-server-superset-jwt-secret: "server_superset_jwt_secret"
vault.hashicorp.com/agent-inject-template-server-superset-jwt-secret: |
{{- with secret "secrets/data/vault/apps/superset" -}}
{{ index .Data.data "JWT_SECRET" }}
{{- end -}}
values: values:
global: global:
env: _default env: _default
@ -76,14 +52,6 @@ spec:
port: port:
_default: 8000 _default: 8000
command:
_default:
- /bin/sh
- -ec
- |
export SERVER_SUPERSET_JWT_SECRET="$(cat /vault/secrets/server_superset_jwt_secret)"
exec bash /opt/sarex/entrypoint.sh
probes: probes:
liveness: liveness:
enabled: false enabled: false
@ -350,6 +318,11 @@ spec:
_default: "False" _default: "False"
secretEnvs: secretEnvs:
- name: SERVER_SUPERSET_JWT_SECRET
secretName:
_default: "superset-jwt-secret"
secretKey: "jwt_secret"
- name: ZITADEL_ACCESS_TOKEN - name: ZITADEL_ACCESS_TOKEN
secretName: secretName:
_default: "zitadel-secret" _default: "zitadel-secret"

View File

@ -9,7 +9,7 @@ spec:
values: values:
fullnameOverride: superset fullnameOverride: superset
vault: vault:
enabled: true enabled: false
stronghold: stronghold:
enabled: false enabled: false
extraEnv: extraEnv:
@ -19,6 +19,11 @@ spec:
extraEnvRaw: extraEnvRaw:
- name: ENABLE_PROXY_FIX - name: ENABLE_PROXY_FIX
value: "true" value: "true"
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: jwt-secret
key: jwt_secret
supersetNode: supersetNode:
connections: connections:
redis_host: superset-redis-headless redis_host: superset-redis-headless

View File

@ -8,7 +8,7 @@ spec:
chart: chart:
spec: spec:
chart: superset-prod chart: superset-prod
version: "0.13.4" version: "0.13.3"
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: yc-oci-charts name: yc-oci-charts