- Shell 79%
- Dockerfile 21%
De per-tenant overlays (bb-open/leeflicht/remax) gebruiken _base en hun Flux-KS zijn actief. Rootless _base zou ze migreren zonder data-migratie -> OpenCloud-LDAP stuk. Per-tenant rootless = aparte taak per tenant (data-export/import). Nu alleen ldap-system (base/, Zitadel-backend) rootless. |
||
|---|---|---|
| _base | ||
| base | ||
| image | ||
| overlays | ||
| README.md | ||
bb-ldap — OpenLDAP voor BB Open (Zitadel-IDP + OpenCloud-bind)
Flux-managed OpenLDAP (ldap-system/openldap, dc=bbopen,dc=com). Bron-of-truth voor de structuur = base/03-bootstrap-configmap.yaml. Per ADR-0052 (per-tenant LDAP) is dit bb-open's instance.
Wat gitops dekt vs niet
- ✅ Structuur (OUs, users uid=bbuijs/uid=nverhage, service-accounts, groups) — slapadd't automatisch op fresh boot.
- ❌ Wachtwoorden —
{CRYPT}!placeholders; post-boot zetten uit Proton Pass (geen hashes in deze repo). - ❌ ACL (
04-acls.ldif) — osixia slapadd't custom-LDIF naar de DATA-db, niet naarcn=config→ ACL moet apart vialdapmodify -Y EXTERNAL.
Re-bootstrap runbook (na fresh PVC / ns-delete)
Voorwaarde: openldap-admin secret via proton-pass-sync aanwezig (mapping + rolebinding-ldap-system in platform-repo) → openldap-0 boot + slapadd't de structuur.
# 1. WACHTWOORDEN (admin-pw zit in pod-env $LDAP_ADMIN_PASSWORD)
# per DN: pw uit PP (pass-cli item view --field Password/password)
for entry in \
"uid=bbuijs,ou=users,o=bb-open,ou=companies,dc=bbopen,dc=com:bbuijs-ldap-user:Password" \
"uid=nverhage,ou=users,o=bb-open,ou=companies,dc=bbopen,dc=com:nverhage-ldap-user:password" \
"cn=zitadel-bind,ou=service-accounts,dc=bbopen,dc=com:zitadel-ldap-bind:Password" \
"cn=opencloud-bb-open-bind,ou=service-accounts,dc=bbopen,dc=com:opencloud-bb-open-ldap-bind:Password"; do
dn=${entry%%:*}; rest=${entry#*:}; item=${rest%%:*}; field=${rest#*:}
PW=$(pass-cli item view --vault-name "BB Open Ops" --item-title "$item" --field "$field")
kubectl exec openldap-0 -n ldap-system -- sh -c \
"ldappasswd -x -D 'cn=admin,dc=bbopen,dc=com' -w \"\$LDAP_ADMIN_PASSWORD\" -s '$PW' '$dn'"
done
# 2. ACL (04-acls.ldif → cn=config)
kubectl exec -i openldap-0 -n ldap-system -- sh -c 'ldapmodify -Y EXTERNAL -H ldapi:///' \
< <(sed -n '/dn: olcDatabase={1}mdb/,/by \* none/p' base/03-bootstrap-configmap.yaml | sed 's/^ //')
Zitadel LDAP-IDP (apart, in Zitadel — niet deze repo)
IDP bb-open-ldap: bindDn cn=zitadel-bind, userBase ou=users,o=bb-open,..., userFilter mail, attributes incl. preferredUsernameAttribute: uid (anders lege username → Register/Link geblokkeerd). Set via admin-API PUT /admin/v1/idps/ldap/{id} of UI.
Backup
Velero ldap-daily (platform-repo, 02:55) snapshot de PVCs (live entries + pw-hashes + ACL die niet in gitops staan). Nooit ns-delete zonder backup — zie incident 2026-06-01.
TODO (volledige automatisering)
Een idempotente post-boot init-Job (proton-pass-sync'd secrets → ldappasswd + ldapmodify-ACL) zou stap 1+2 automatiseren → re-bootstrap volledig hands-off. Nu runbook.