authentik: lock chrome.viktorbarzin.me noVNC to Viktor only
All checks were successful
ci/woodpecker/push/default Pipeline was successful

The chrome-service noVNC exposes Viktor's live logged-in browser sessions
(Instagram etc. — he'll sign in there for homelab browser to reuse). It was
auth="required" = any authenticated user, and "Home Server Admins" includes emo
(emil.barzin@gmail.com), so the admin group is not a sufficient gate. Add a
host-specific case to the domain-wide forward-auth restriction allowing only
Viktor's accounts (vbarzin@gmail.com + akadmin break-glass); everyone else,
incl. emo, is denied at the noVNC. emo's AGENT already can't reach the browser
(read-only RBAC blocks port-forward); this closes the human noVNC path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Viktor Barzin 2026-06-22 18:09:27 +00:00
parent a3cdc0d6d0
commit 98cd535b97

View file

@ -49,6 +49,17 @@ resource "authentik_policy_expression" "admin_services_restriction" {
host = request.context.get("host", "") host = request.context.get("host", "")
# chrome-service noVNC (chrome.viktorbarzin.me) exposes Viktor's LIVE
# logged-in browser sessions, so lock it to Viktor's own accounts ONLY.
# "Home Server Admins" is NOT sufficient emo (emil.barzin@gmail.com) is a
# member. akadmin kept as break-glass. The homelab-browser CDP path is
# already RBAC-gated (emo = oidc-power-user-readonly, no pods/portforward),
# so this closes the only remaining, human, noVNC path. Match username OR
# email so neither attribute alone can lock Viktor out.
CHROME_ALLOWED = {"akadmin", "akadmin@viktorbarzin.me", "vbarzin@gmail.com"}
if host == "chrome.viktorbarzin.me":
return request.user.username in CHROME_ALLOWED or request.user.email in CHROME_ALLOWED
# t3 Workstation edge gate: only members of "T3 Users" may reach t3. # t3 Workstation edge gate: only members of "T3 Users" may reach t3.
# Placed BEFORE the ADMIN_ONLY_HOSTS early-return (t3 is intentionally not in # Placed BEFORE the ADMIN_ONLY_HOSTS early-return (t3 is intentionally not in
# that set it must not require Home-Server-Admins, just T3 Users membership). # that set it must not require Home-Server-Admins, just T3 Users membership).