NK-WP-0054-T05 phase 3a: founder-run bind-split helper with end-to-end test
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

prepare-custody, plan, accounts and verify for ld-admin and the svc-* accounts;
named rotations for the Authelia bind and LLDAP_LDAP_USER_PASS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 308701@bnt-lap001
Assistant-Session: 5548e447-444c-4dcc-bed1-05c16eebfe56
This commit is contained in:
tegwick 2026-10-29 22:00:49 +01:00
parent 18dae2a0ac
commit e6f4e28164
6 changed files with 577 additions and 6 deletions

View file

@ -312,6 +312,20 @@ human login 200, wrong password 401, `svc-keycape`/`svc-privacyidea`/`ld-admin`
filter all three were 200. The read-only `svc-authelia` bind is sufficient for Authelia's lookups.
Phase 2 is complete; phases 3 and 4 remain.
**2026-10-29 phase 3a (live helper):** `sso-mfa/k8s/lldap/bind-split.py`, founder-run, changes the
directory only. `prepare-custody` adds `LLDAP_SVC_*_PASS` and a new `ld-admin` `LLDAP_LDAP_USER_PASS`
to the private custody copy (40 alphanumerics, the shape `apply-service-secrets.literal()` accepts)
and refuses a second run; `plan` is read-only; `accounts [--apply]` creates `ld-admin` and the `svc-*`
accounts with `@service.netkingdom.invalid` emails, sets exactly their groups and their passwords
(pinned `lldap_set_password`, password in the environment only) and refuses an existing account with
a foreign email or extra groups; `verify [--old-admin-retired]` proves every account signs in with
its custody password, `admin` keeps `lldap_admin`, and the old shared password is refused. The
human `admin` signs in at a hidden prompt; receipts are value-free. `make bind-split-test` runs it
end to end on a throwaway pinned LLDAP (3 tests). `apply-service-secrets.py` gains the named
rotations `lldap LLDAP_LDAP_USER_PASS` and `authelia LLDAP_SVC_AUTHELIA_PASS -> ldap_password`, so the
existing Secrets are switched only by explicit, conditional rotation (97 tests). Left: 3b (backup
profile and the three restore launchers), then phase 4.
## Disposition of per-service admin accounts
```task