Seed LLDAP activity-core-operators, add membership runbook and helper, restrict Authelia access on activity/temporal.coulomb.social to that group (member one_factor + domain deny fallback), apply live, and verify via Authelia check-policy plus unauthenticated edge redirects.
3.2 KiB
Operator groups — membership runbook
Least-privilege app-scoped LLDAP groups that gate browser SSO via Authelia
domain rules. Distinct from platform groups (net-kingdom-users /
net-kingdom-admins).
Groups
| Group | Gates (Authelia) | Who belongs |
|---|---|---|
activity-core-operators |
activity.coulomb.social, temporal.coulomb.social |
Named founders / platform operators who need the activity-core ops console or Temporal UI |
Do not auto-add everyone in net-kingdom-admins. Membership is a conscious
grant. Platform admin ≠ activity-core operator.
Seed empty groups with ./bootstrap-users.sh (idempotent). Authelia config:
sso-mfa/k8s/authelia/configmap.yaml (access_control.rules).
WebUI path
- Open https://lldap.coulomb.social (IP-restricted admin UI).
- Sign in as
admin(password from KeePassXC / custody — never commit it). - Groups →
activity-core-operators→ add or remove members. - User must already exist (create via WebUI or
./create-user.sh). - User re-authenticates at Authelia if an old session lacks the group claim (sign out / new browser session).
Scripted path
cd sso-mfa/k8s/lldap
# Add a user to the operator group
./manage-group-members.sh add <uid> activity-core-operators
# Remove
./manage-group-members.sh remove <uid> activity-core-operators
# List members
./manage-group-members.sh list activity-core-operators
Defaults: LLDAP URL https://lldap.coulomb.social, secrets from
../../bootstrap/secrets/lldap/secrets.env. Override:
./manage-group-members.sh add bernd activity-core-operators \
https://lldap.coulomb.social /path/to/secrets
Live ops without a local secrets file: export LLDAP_ADMIN_PASS from the
cluster secret (operator workstation only; do not log or commit):
export LLDAP_ADMIN_PASS="$(kubectl get secret -n sso lldap-secrets \
-o jsonpath='{.data.LLDAP_LDAP_USER_PASS}' | base64 -d)"
# manage-group-members.sh also accepts LLDAP_ADMIN_PASS when secrets.env is absent
Onboarding checklist (activity-core ops)
- User has LLDAP account and is in
net-kingdom-users(normal onboarding). - Operator adds them to
activity-core-operators(WebUI or script). - User signs in at https://auth.coulomb.social (password; MFA via KeyCape path when using OIDC apps — ForwardAuth to ops hosts uses Authelia session).
- Open https://activity.coulomb.social and https://temporal.coulomb.social — both should pass only for group members.
- Offboard: remove from
activity-core-operatorsfirst; full account offboard remains the platform lifecycle path.
Break-glass (independent of this group)
activity-core ClusterIP port-forward + ACTIVITY_CORE_OPERATOR_TOKEN does not
use Authelia groups. Documented in activity-core runbooks. Keep that path for
SSO outages; do not gate break-glass on LLDAP group membership.
Adding a future app-operator group
- Add the group name to
REQUIRED_GROUPSinbootstrap-users.sh. - Document it in this table.
- Add Authelia domain rules (member
one_factor+ domaindenyfallback) insso-mfa/k8s/authelia/configmap.yaml— see Authelia README. - Never invent a KeyCape OIDC client solely for Traefik ForwardAuth apps.