add arrstack oauth app + per-app access groups
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/plan Pipeline failed

Add the Authentik OIDC application that fronts the arrproxy media front door
at arrstack.unkin.net, plus the per-app entitlement groups arrproxy reads from
the user's groups claim to decide which backends (sonarr/radarr/prowlarr) a
user may reach.

- config/providers_oauth2/arrstack.yaml: confidential oauth2 client
  client_id=arrstack, litellm-style auth/invalidation flows, client_secret
  from Vault kv kubernetes/namespace/arrstack/default/oauth-credentials,
  openid/email/profile scopes, redirect https://arrstack.unkin.net/oauth2/callback,
  launch https://arrstack.unkin.net/. The module always attaches the estate's
  hierarchical ak_groups scope mapping, so the front door emits the groups claim.
- config/permissions/akP-arrstack-user.yaml: front-door gate (application: arrstack).
- config/permissions/akP-arrstack-{sonarr,radarr,prowlarr}.yaml: per-app
  entitlements, unbound (no application) so they only surface in the ak_groups
  claim for arrproxy to authorize backends.
- config/roles/akR-arrstack-user.yaml: full media role nesting all four.
- akR-global-admin: also nests the arrstack front door + all per-app perms.
This commit is contained in:
unkin-agent
2026-08-16 15:00:05 +10:00
parent 132da3cfc8
commit e7c1f561f1
7 changed files with 59 additions and 0 deletions
@@ -0,0 +1,6 @@
# Permission group akP-arrstack-prowlarr (name = filename). Per-app entitlement:
# NOT bound to any application (no `application` field), so it does not gate OIDC.
# It exists purely to appear in the user's hierarchical `ak_groups` claim, which
# arrproxy reads (via oauth2-proxy X-Auth-Request-Groups) to decide whether to
# mint a token allowing the prowlarr backend.
attributes: {}
@@ -0,0 +1,6 @@
# Permission group akP-arrstack-radarr (name = filename). Per-app entitlement:
# NOT bound to any application (no `application` field), so it does not gate OIDC.
# It exists purely to appear in the user's hierarchical `ak_groups` claim, which
# arrproxy reads (via oauth2-proxy X-Auth-Request-Groups) to decide whether to
# mint a token allowing the radarr backend.
attributes: {}
@@ -0,0 +1,6 @@
# Permission group akP-arrstack-sonarr (name = filename). Per-app entitlement:
# NOT bound to any application (no `application` field), so it does not gate OIDC.
# It exists purely to appear in the user's hierarchical `ak_groups` claim, which
# arrproxy reads (via oauth2-proxy X-Auth-Request-Groups) to decide whether to
# mint a token allowing the sonarr backend.
attributes: {}
@@ -0,0 +1,4 @@
# Permission group akP-arrstack-user (name = filename). Front-door access to the
# arrstack application: bound to the arrstack oauth2 app, so only members of this
# group (or any role that nests it) can complete OIDC to the front door.
application: arrstack
+21
View File
@@ -0,0 +1,21 @@
# OAuth2/OIDC provider + application for the arrstack front door
# (arrstack.unkin.net). An oauth2-proxy sidecar in front of the `arrproxy` Go
# service performs the OIDC login; arrproxy then derives which apps (sonarr,
# radarr, prowlarr) a user may reach from the user's group membership.
# client_secret is read from Vault (seeded out of band), never committed.
name: arrstack
authorization_flow: default-provider-authorization-implicit-consent
invalidation_flow: default-provider-invalidation-flow
client_type: confidential
client_id: arrstack
launch_url: https://arrstack.unkin.net/
client_secret_vault:
mount: kv
path: kubernetes/namespace/arrstack/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://arrstack.unkin.net/oauth2/callback
+10
View File
@@ -0,0 +1,10 @@
# Role akR-arrstack-user (name = filename): full media access. Nests the
# arrstack front-door permission plus every per-app entitlement, so a member can
# log in at the front door and arrproxy will allow sonarr, radarr and prowlarr.
# For narrower access, assign the individual akP-arrstack-<app> permission groups
# (together with akP-arrstack-user for the door) to a user directly instead.
permissions:
- akP-arrstack-user
- akP-arrstack-sonarr
- akP-arrstack-radarr
- akP-arrstack-prowlarr
+6
View File
@@ -4,3 +4,9 @@ permissions:
- akP-argocd-admin
- akP-rancher-admin
- akP-litellm-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
- akP-arrstack-sonarr
- akP-arrstack-radarr
- akP-arrstack-prowlarr