From f571995ff9be77c9e31893df8f5093f4c870dcd1 Mon Sep 17 00:00:00 2001 From: migatu Date: Fri, 21 Aug 2026 00:18:16 +0200 Subject: [PATCH] feat(prezentacja): klucz podpisu sesji (LOG-34) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SESSION_SECRET w sekrecie astrololo-auth. Pod bez niego CELOWO nie wstaje: usługa z kontami, ale bez klucza, nie odróżniłaby ważnej sesji od podrobionej. W README dopisana rotacja klucza jako awaryjny wyłącznik — podmiana unieważnia wszystkie sesje naraz, co jest właściwą reakcją na podejrzenie przechwycenia cudzej sesji. Co-Authored-By: Claude Opus 5 --- astrololo/README.md | 17 ++++++++++++++++- astrololo/presentation.yaml | 7 +++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/astrololo/README.md b/astrololo/README.md index d887e7f..ab22b7d 100644 --- a/astrololo/README.md +++ b/astrololo/README.md @@ -47,11 +47,26 @@ read -rs -p "Hasło do aplikacji (APP_PASSWORD): " APP_PASSWORD; echo kubectl -n astrololo create secret generic astrololo-auth \ --from-literal=APP_PASSWORD="$APP_PASSWORD" \ - --from-literal=INTERNAL_TOKEN="$(openssl rand -hex 32)" + --from-literal=INTERNAL_TOKEN="$(openssl rand -hex 32)" \ + --from-literal=SESSION_SECRET="$(openssl rand -hex 32)" unset APP_PASSWORD ``` +`SESSION_SECRET` podpisuje ciasteczka sesji (LOG-34). **Pod bez niego celowo nie +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 +> ``` + `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 (użytkownik: `astrololo`, zmienny przez `APP_USER` w `presentation.yaml`). diff --git a/astrololo/presentation.yaml b/astrololo/presentation.yaml index 56f1151..80ef1a7 100644 --- a/astrololo/presentation.yaml +++ b/astrololo/presentation.yaml @@ -32,6 +32,13 @@ spec: secretKeyRef: { name: astrololo-auth, key: INTERNAL_TOKEN } - name: APP_USER value: "astrololo" + # Klucz podpisu ciasteczek sesji (LOG-34). WYMAGANY — pod bez niego + # celowo nie wstaje: usługa z kontami, ale bez klucza, nie umiałaby + # odróżnić ważnej sesji od podrobionej. Rotacja tego klucza WYLOGOWUJE + # WSZYSTKICH, i tak ma być — to jest awaryjny wyłącznik. + - name: SESSION_SECRET + valueFrom: + secretKeyRef: { name: astrololo-auth, key: SESSION_SECRET } - name: RATE_LIMIT_PER_MIN value: "120" # 0 = bez limitu # Aplikacja stoi za Ingressem, więc bezpośrednim rozmówcą jest zawsze -- 2.52.0