diff --git a/config/permissions/akP-arrstack-prowlarr.yaml b/config/permissions/akP-arrstack-prowlarr.yaml new file mode 100644 index 0000000..2320348 --- /dev/null +++ b/config/permissions/akP-arrstack-prowlarr.yaml @@ -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: {} diff --git a/config/permissions/akP-arrstack-radarr.yaml b/config/permissions/akP-arrstack-radarr.yaml new file mode 100644 index 0000000..4d91747 --- /dev/null +++ b/config/permissions/akP-arrstack-radarr.yaml @@ -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: {} diff --git a/config/permissions/akP-arrstack-sonarr.yaml b/config/permissions/akP-arrstack-sonarr.yaml new file mode 100644 index 0000000..e04fdfd --- /dev/null +++ b/config/permissions/akP-arrstack-sonarr.yaml @@ -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: {} diff --git a/config/permissions/akP-arrstack-user.yaml b/config/permissions/akP-arrstack-user.yaml new file mode 100644 index 0000000..c06b621 --- /dev/null +++ b/config/permissions/akP-arrstack-user.yaml @@ -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 diff --git a/config/providers_oauth2/arrstack.yaml b/config/providers_oauth2/arrstack.yaml new file mode 100644 index 0000000..32a8afe --- /dev/null +++ b/config/providers_oauth2/arrstack.yaml @@ -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 diff --git a/config/roles/akR-arrstack-user.yaml b/config/roles/akR-arrstack-user.yaml new file mode 100644 index 0000000..1791447 --- /dev/null +++ b/config/roles/akR-arrstack-user.yaml @@ -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- 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 diff --git a/config/roles/akR-global-admin.yaml b/config/roles/akR-global-admin.yaml index 6c3af26..d7df0fc 100644 --- a/config/roles/akR-global-admin.yaml +++ b/config/roles/akR-global-admin.yaml @@ -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