# Intakes — activity-core ops / Temporal UI SSO operators Cross-repo handoff from **activity-core** `ACTIVITY-WP-0025` residual **T06**. SSO edge is already live (Traefik ForwardAuth → Authelia); access is currently any authenticated Authelia user (`default_policy: one_factor`). These intakes request least-privilege group gating on the public hosts. Source design: `activity-core/docs/ops-sso-access.md` Hosts: `activity.coulomb.social`, `temporal.coulomb.social` **Promotion (2026-07-22):** both intakes accepted after scope/intent review and promoted into **`NK-WP-0021`** (`workplans/NK-WP-0021-activity-core-ops-sso-operators.md`). Single workplan because LLDAP group and Authelia domain rules share one deploy surface and a hard dependency. See that workplan for refined tasks, non-goals, and the verification matrix. --- ## NK-IN-0001 — LLDAP group for activity-core operators ```yaml id: NK-IN-0001 kind: intake title: "Create LLDAP group activity-core-operators and membership runbook" lane: blue status: closed outcome: promoted promoted_to: NK-WP-0021 priority: high owner: net-kingdom repo: net-kingdom origin: "ACTIVITY-WP-0025-T06" origin_ref: "activity-core/workplans/ACTIVITY-WP-0025-ops-ui-sso-access.md" routed_note: "Promoted 2026-07-22 into NK-WP-0021 (T01–T02). Implement in net-kingdom sso-mfa." description: | activity-core shipped Authelia SSO for the ops console and Temporal UI (ACTIVITY-WP-0025). MVP accepts any authenticated Authelia user. Needed in net-kingdom (LLDAP + ops docs), not in activity-core: 1. Create LLDAP group `activity-core-operators` (same style as net-kingdom-users / net-kingdom-admins in sso-mfa/k8s/lldap/bootstrap-users.sh). 2. Document how to add/remove human operators (WebUI checklist and/or script extension). Named founders/operators only — least privilege. 3. Do not invent OIDC clients in KeyCape for this path: activity-core uses Traefik Middleware → Authelia `/api/verify` (ForwardAuth), not a new oauth2-proxy/Keycloak client. Acceptance: group exists in LLDAP; membership procedure written under sso-mfa docs or CONFIG; at least one test operator can be assigned. notes: | Related Authelia domain rules are NK-IN-0002 (depends on this group existing). Requester residual task: ACTIVITY-WP-0025-T06 (status wait). Promoted to NK-WP-0021 (combined workplan with NK-IN-0002). state_hub_intake_id: "019f88ff-c5f1-7433-9d13-4ffe37dfef00" ``` --- ## NK-IN-0002 — Authelia domain rules for activity / temporal hosts ```yaml id: NK-IN-0002 kind: intake title: "Authelia access_control for activity + temporal.coulomb.social" lane: blue status: closed outcome: promoted promoted_to: NK-WP-0021 priority: high owner: net-kingdom repo: net-kingdom origin: "ACTIVITY-WP-0025-T06" origin_ref: "activity-core/workplans/ACTIVITY-WP-0025-ops-ui-sso-access.md" routed_note: "Promoted 2026-07-22 into NK-WP-0021 (T03–T04). Depends on NK-IN-0001 group." description: | Restrict browser access to activity-core public SSO hosts to members of LLDAP group `activity-core-operators` (see NK-IN-0001). Implementation target (live config): - File: sso-mfa/k8s/authelia/configmap.yaml - Today: access_control.default_policy: one_factor (no domain rules) - Add domain rules for: - activity.coulomb.social - temporal.coulomb.social requiring subject/group activity-core-operators (exact Authelia subject syntax per current Authelia version — use fleet patterns if any domain rules already exist for other apps). Keep MFA posture consistent with fleet (KeyCape / privacyIDEA path; do not set two_factor on Authelia itself unless that is the established pattern for similar apps). Rollout: apply Authelia ConfigMap + restart/reload Authelia in ns sso; verify unauthenticated → login; authenticated non-member → deny/403; member → pass-through to Traefik backends. Acceptance: - Unprivileged Authelia user cannot open ops UI or Temporal UI - Member of activity-core-operators can open both hosts after login - activity-core break-glass (ClusterIP port-forward + operator token) remains documented and independent of Authelia groups notes: | Depends on NK-IN-0001 (group must exist). activity-core Ingress + middleware already applied (k8s/railiance/30–32). No activity-core code change required for group enforcement — headers already carry Remote-Groups. Promoted to NK-WP-0021 (combined workplan with NK-IN-0001). state_hub_intake_id: "019f88ff-cc9e-76b4-8ce3-eb354aabefe7" ```