diff --git a/migration.md b/migration.md index fd1da9c..4d5a1fe 100644 --- a/migration.md +++ b/migration.md @@ -353,3 +353,33 @@ Klonowanie superproject: ```bash git clone --recurse-submodules https://rv32i.pl/trade/trade-infra.git ``` + +## 13) Dostęp i logowanie (admin vs użytkownicy) + +Wymaganie: +- **admin** ma dostęp do wszystkich serwisów (np. Portainer, Argo CD, itp.) +- pozostali użytkownicy logują się **wyłącznie** do `trade` (`trade.rv32i.pl`) + +Rekomendowana metoda: **Traefik `basicAuth` na Ingress (Middleware)**. + +### Plan wdrożenia (staging → prod) + +1) Inwentaryzacja publicznych endpointów: + - sprawdzić które serwisy mają Ingress (hosty) i które mają być dostępne wyłącznie dla admina. +2) `trade` (multi-user): + - przygotować `htpasswd` z wieloma wpisami (bcrypt), + - utworzyć `Secret` w namespace `trade-staging` (np. `trade-basic-auth`) z plikiem `users`, + - dodać `Middleware` `basicAuth` wskazujący na secret, + - podpiąć middleware do `Ingress/trade-frontend`. +3) `portainer` (admin-only): + - analogicznie utworzyć admin-only `Secret`+`Middleware` i podpiąć do `Ingress/portainer`. +4) Wyłączyć/dopasować auth w aplikacji `trade-frontend`: + - obecnie serwer frontendu ma wbudowany basic auth (plik `frontend.json`), + - żeby nie było „podwójnego logowania”, dodać tryb `BASIC_AUTH_MODE=off` (albo podobny) i ustawić go w `trade-deploy`. +5) Testy: + - `https://trade.rv32i.pl` → 401 bez auth, 200/304 z auth dla każdego usera, + - `https://portainer.rv32i.pl` → 401 bez auth, dostęp tylko dla admin, + - regresja: proxy `/api/*` w frontendzie nadal działa (token read jest dodawany po stronie serwera frontendu). +6) Utrzymanie: + - dodanie/usunięcie usera = update secreta (`htpasswd`) + rollout (bez zmian w kodzie), + - docelowo przenieść sekrety do GitOps (np. SOPS/SealedSecrets/ExternalSecrets). diff --git a/steps.md b/steps.md index 67e7717..1533772 100644 --- a/steps.md +++ b/steps.md @@ -228,3 +228,8 @@ Uwaga: **nie zapisuję sekretów** (hasła, tokeny, prywatne klucze) – jeśli - `deploy/` → `trade/trade-deploy` - `doc/` → `trade/trade-doc` - Do push użyto tokena repo-scope wygenerowanego w podzie Gitei; token zapisany lokalnie w `gitea/token` (gitignored), wartość nie jest logowana. + +### Dostęp: admin vs użytkownicy (plan) +- Wymaganie: admin ma dostęp do wszystkich serwisów; pozostali użytkownicy logują się tylko do `trade.rv32i.pl`. +- Wybrano metodę: Traefik `basicAuth` na Ingress (Middleware). +- Plan wdrożenia opisany w `migration.md` (sekcja „Dostęp i logowanie”).