net-kingdom/docs/intakes/activity-core-ops-sso-operators.md
tegwick 3580e43e5f Add NK-WP-0021 for activity-core ops SSO least-privilege.
Promote NK-IN-0001/0002 after scope/intent review into a single ready
workplan (LLDAP operator group, membership runbook, Authelia domain rules,
live verification). Hub workstream and tasks registered via fix-consistency.
2026-07-22 15:21:22 +02:00

110 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 (T01T02). 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 (T03T04). 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/3032). 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"
```