From 43d325146c85a7c761495c670b21b1c73f25aa6d Mon Sep 17 00:00:00 2001 From: unkin-agent Date: Sun, 23 Aug 2026 17:24:18 +1000 Subject: [PATCH] Add logviewer OAuth2 provider/application and akP-logviewer-admin permission The ClickHouse log UI (logviewer) is being exposed at https://logviewer.unkin.net behind oauth2-proxy in the logging namespace; this adds the Authentik side as the prerequisite. - Adds config/providers_oauth2/logviewer.yaml mirroring traefik: confidential client, client_id logviewer, secret from Vault kv kubernetes/namespace/logging/default/oauth-credentials, openid/email/profile scopes (ak_groups is attached to every oauth2 provider by the module), strict redirect URI for the logviewer oauth2 callback. - Adds config/permissions/akP-logviewer-admin.yaml bound to the logviewer application and nests it under akR-global-admin. --- config/permissions/akP-logviewer-admin.yaml | 3 +++ config/providers_oauth2/logviewer.yaml | 21 +++++++++++++++++++++ config/roles/akR-global-admin.yaml | 1 + 3 files changed, 25 insertions(+) create mode 100644 config/permissions/akP-logviewer-admin.yaml create mode 100644 config/providers_oauth2/logviewer.yaml diff --git a/config/permissions/akP-logviewer-admin.yaml b/config/permissions/akP-logviewer-admin.yaml new file mode 100644 index 0000000..1289b69 --- /dev/null +++ b/config/permissions/akP-logviewer-admin.yaml @@ -0,0 +1,3 @@ +# Permission group akP-logviewer-admin (name = filename). Grants admin +# access to logviewer: bound to the logviewer application, gating the log UI. +application: logviewer diff --git a/config/providers_oauth2/logviewer.yaml b/config/providers_oauth2/logviewer.yaml new file mode 100644 index 0000000..93d6fa9 --- /dev/null +++ b/config/providers_oauth2/logviewer.yaml @@ -0,0 +1,21 @@ +# OAuth2/OIDC provider + application for logviewer (the ClickHouse log UI, +# served at https://logviewer.unkin.net in the logging namespace). An +# oauth2-proxy in front of the UI performs the OIDC login; access is gated on +# the user's hierarchical ak_groups claim (akP-logviewer-admin). +# client_secret is read from Vault (seeded out of band), never committed. +name: logviewer +authorization_flow: default-provider-authorization-implicit-consent +invalidation_flow: default-provider-invalidation-flow +client_type: confidential +client_id: logviewer +launch_url: https://logviewer.unkin.net/ +client_secret_vault: + mount: kv + path: kubernetes/namespace/logging/default/oauth-credentials +scope_mappings: + - goauthentik.io/providers/oauth2/scope-openid + - goauthentik.io/providers/oauth2/scope-email + - goauthentik.io/providers/oauth2/scope-profile +redirect_uris: + - matching_mode: strict + url: https://logviewer.unkin.net/oauth2/callback diff --git a/config/roles/akR-global-admin.yaml b/config/roles/akR-global-admin.yaml index d7df0fc..80262d8 100644 --- a/config/roles/akR-global-admin.yaml +++ b/config/roles/akR-global-admin.yaml @@ -4,6 +4,7 @@ permissions: - akP-argocd-admin - akP-rancher-admin - akP-litellm-admin + - akP-logviewer-admin # arrstack has no admin tier (it is a proxy front door); grant global admins # the front door plus every per-app entitlement so they reach all media apps. - akP-arrstack-user