manifest.conf — profile: platform-engineer
← kembali ke catatan
2026-09-11seri: 389 Directory Server & OpenShift (bagian 2)

LDAP Structure for OpenShift

linuxopenshiftldap389-directory-serveridentitysecurity

Setelah 389 Directory Server dan LDAPS aktif, tahap berikutnya adalah membangun Directory Information Tree (DIT) yang akan menjadi sumber identity untuk OpenShift.

Struktur yang digunakan

dc=iqiterate,dc=id
├── ou=users
│   └── uid=iqbal
├── ou=groups
│   ├── cn=openshift-admins
│   └── cn=openshift-users
└── ou=service
    └── cn=openshift-bind

Konsep singkatnya:

OU Fungsi
ou=users Akun Pengguna (User Accounts)
ou=groups Membership dan authorization
ou=service Service accounts untuk koneksi/bind aplikasi ke LDAP

1. Base DN dan OU

Buat base.ldif:

dn: dc=iqiterate,dc=id
objectClass: top
objectClass: domain
dc: iqiterate

dn: ou=users,dc=iqiterate,dc=id
objectClass: top
objectClass: organizationalUnit
ou: users

dn: ou=groups,dc=iqiterate,dc=id
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: ou=service,dc=iqiterate,dc=id
objectClass: top
objectClass: organizationalUnit
ou: service

Apply:

ldapadd -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=Directory Manager" -W -f base.ldif

Verify:

ldapsearch -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=Directory Manager" -W \
  -b "dc=iqiterate,dc=id" \
  "(objectClass=organizationalUnit)" dn

2. User LDAP

Buat users.ldif:

dn: uid=iqbal,ou=users,dc=iqiterate,dc=id
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: iqbal
cn: Muhammad Iqbal
sn: Iqbal
mail: iqbal@iqiterate.id
userPassword: PASSWORD_USER

Apply:

ldapadd -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=Directory Manager" -W -f users.ldif

Test bind:

ldapwhoami -H ldaps://ldap.iqiterate.id:636 -x \
  -D "uid=iqbal,ou=users,dc=iqiterate,dc=id" -W

Expected output:

dn: uid=iqbal,ou=users,dc=iqiterate,dc=id

3. Group groupOfNames

Group OpenShift menggunakan groupOfNames dengan membership di attribute member.

Buat groups.ldif:

dn: cn=openshift-admins,ou=groups,dc=iqiterate,dc=id
objectClass: top
objectClass: groupOfNames
cn: openshift-admins
member: uid=iqbal,ou=users,dc=iqiterate,dc=id

dn: cn=openshift-users,ou=groups,dc=iqiterate,dc=id
objectClass: top
objectClass: groupOfNames
cn: openshift-users
member: uid=iqbal,ou=users,dc=iqiterate,dc=id

Apply:

ldapadd -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=Directory Manager" -W -f groups.ldif

Verify:

ldapsearch -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=Directory Manager" -W \
  -b "ou=groups,dc=iqiterate,dc=id" \
  "(objectClass=groupOfNames)" dn cn member

4. Service account untuk OpenShift

Buat service.ldif:

dn: cn=openshift-bind,ou=service,dc=iqiterate,dc=id
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: openshift-bind
cn: openshift-bind
sn: Service
userPassword: PASSWORD_OPENSHIFT_BIND
description: Service Account for OpenShift

Apply:

ldapadd -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=Directory Manager" -W -f service.ldif

Test:

ldapwhoami -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=openshift-bind,ou=service,dc=iqiterate,dc=id" -W

5. Mengapa service account dipisahkan?

Pemisahan OU memungkinkan setiap aplikasi memiliki bind account sendiri tanpa mencampuradukkan dengan akun pengguna (user accounts):

ou=service
├── cn=openshift-bind
├── cn=jenkins-bind
└── cn=grafana-bind

Sedangkan user tetap satu dan group dapat dipakai lintas platform:

iqbal
├── openshift-admins
├── jenkins-users
└── devops

6. ACI (Access Control Instruction)

Berikan read/search/compare ke OU users agar service account bisa mencari user:

dn: ou=users,dc=iqiterate,dc=id
changetype: modify
add: aci
aci: (targetattr="*")(version 3.0; acl "OpenShift LDAP read users"; allow (read,search,compare) userdn = "ldap:///cn=openshift-bind,ou=service,dc=iqiterate,dc=id";)

Berikan akses yang sama ke OU groups:

dn: ou=groups,dc=iqiterate,dc=id
changetype: modify
add: aci
aci: (targetattr="*")(version 3.0; acl "OpenShift LDAP read groups"; allow (read,search,compare) userdn = "ldap:///cn=openshift-bind,ou=service,dc=iqiterate,dc=id";)

Apply:

ldapmodify -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=Directory Manager" -W -f aci.ldif

7. Test service account membaca users dan groups

Test baca users:

ldapsearch -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=openshift-bind,ou=service,dc=iqiterate,dc=id" -W \
  -b "ou=users,dc=iqiterate,dc=id" \
  "(uid=iqbal)" dn uid cn mail

Test baca groups:

ldapsearch -H ldaps://ldap.iqiterate.id:636 -x \
  -D "cn=openshift-bind,ou=service,dc=iqiterate,dc=id" -W \
  -b "ou=groups,dc=iqiterate,dc=id" \
  "(cn=openshift-admins)" dn cn member

Jika kedua query berhasil, LDAP sudah siap diintegrasikan dengan OpenShift.

8. Authentication vs Authorization

Konsep Dijawab oleh
Siapa saya? LDAP user (authentication)
Saya masuk kelompok apa? LDAP group (membership)
Kelompok ini punya permission apa? OpenShift RBAC (authorization)

LDAP group tidak otomatis berarti cluster-admin. Mapping group ke role dilakukan di OpenShift.

9. Hasil akhir

dc=iqiterate,dc=id
├── ou=users
│   └── uid=iqbal
├── ou=groups
│   ├── cn=openshift-admins
│   └── cn=openshift-users
└── ou=service
    └── cn=openshift-bind

Bagian berikutnya menghubungkan struktur ini ke OpenShift 4.18 menggunakan LDAPS, OAuth, RFC2307 group sync, CronJob, dan RBAC.