Centrale OpenLDAP — ADR-0045 LDAP-IDP voor klant-orgs
  • Shell 79%
  • Dockerfile 21%
Find a file
Bram Buijs 998493279e fix(ldap): _base terug naar osixia — alleen ldap-system rootless nu
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.
2026-06-27 00:42:24 +02:00
_base fix(ldap): _base terug naar osixia — alleen ldap-system rootless nu 2026-06-27 00:42:24 +02:00
base fix(ldap-image): rootless bootstrap op ext4-PVC (lost+found) + image 0.2.2 2026-06-26 16:03:41 +02:00
image fix(ldap-image): rootless bootstrap op ext4-PVC (lost+found) + image 0.2.2 2026-06-26 16:03:41 +02:00
overlays fix(leeflicht): ldap-ns PSS privileged (osixia root) i.p.v. restricted 2026-06-08 15:12:36 +02:00
README.md fix(bootstrap): gitops-durable LDAP — uid=bbuijs+nverhage, echte ACL, runbook 2026-06-01 22:53:14 +02:00

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 naar cn=config → ACL moet apart via ldapmodify -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.