docs: add access control plan

This commit is contained in:
u1
2026-01-06 13:04:53 +01:00
parent 5b058cd2be
commit fc817a9b32
2 changed files with 35 additions and 0 deletions

View File

@@ -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).

View File

@@ -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”).