diff --git a/astrololo/README.md b/astrololo/README.md index 7b4de2f..27460f1 100644 --- a/astrololo/README.md +++ b/astrololo/README.md @@ -100,15 +100,43 @@ unset APP_PASSWORD wstanie**: usługa z kontami, ale bez klucza, nie odróżniłaby ważnej sesji od podrobionej. Nikt go nigdy nie musi oglądać. -> **Rotacja tego klucza wylogowuje WSZYSTKICH.** To nie usterka, tylko awaryjny -> wyłącznik: gdy podejrzewasz, że ktoś przechwycił cudzą sesję, podmiana klucza -> unieważnia je wszystkie naraz. -> -> ```bash -> kubectl -n astrololo patch secret astrololo-auth --type=json \ -> -p="[{\"op\":\"replace\",\"path\":\"/data/SESSION_SECRET\",\"value\":\"$(openssl rand -hex 32 | base64 | tr -d '\n')\"}]" -> kubectl -n astrololo rollout restart deploy/presentation -> ``` +### ⚠️ Masz już sekret sprzed LOG-34? Dołóż klucz, nie twórz od nowa + +Komenda wyżej zakłada sekret **od zera**. Jeśli `astrololo-auth` już istnieje, +merge manifestu sam klucza nie dołoży — pod zgłosi wtedy: + +``` +Error: couldn't find key SESSION_SECRET in Secret astrololo/astrololo-auth +``` + +Dokładamy klucz, nie ruszając pozostałych: + +```bash +kubectl -n astrololo patch secret astrololo-auth --type=merge \ + -p "{\"stringData\":{\"SESSION_SECRET\":\"$(openssl rand -hex 32)\"}}" + +kubectl -n astrololo rollout restart deploy/presentation +``` + +Sprawdzenie, że komplet kluczy jest na miejscu (bez pokazywania wartości): + +```bash +kubectl -n astrololo get secret astrololo-auth -o jsonpath='{.data}' \ + | tr ',' '\n' | grep -o '"[A-Z_]*"' +``` + +Oczekiwane: `APP_PASSWORD`, `INTERNAL_TOKEN`, `SESSION_SECRET`. + +> `--type=merge` ze `stringData` **dokłada albo nadpisuje** i nie wymaga, żeby +> klucz wcześniej istniał — w odróżnieniu od JSON Patch z `op: replace`, który +> na brakującej ścieżce po prostu odmawia. Ta sama komenda służy więc i do +> dołożenia, i do rotacji. + +### Rotacja klucza sesji + +**Wylogowuje WSZYSTKICH.** To nie usterka, tylko awaryjny wyłącznik: gdy +podejrzewasz, że ktoś przechwycił cudzą sesję, podmiana klucza unieważnia je +wszystkie naraz. Komenda ta sama, co dołożenie wyżej. `INTERNAL_TOKEN` jest losowany i **nikt go nigdy nie musi oglądać** — służy tylko usługom do rozmowy między sobą. `APP_PASSWORD` wpisujesz w przeglądarce