Configure LDAP as Identity Provider for OCP

Configuration guide for demo / lab environment purposes, not for production.


Author(s): Tamas Bures | Created: 29 May 2020 | Last modified: 29 May 2020
Tested on: Red Hat OpenShift Platform v 4.4.3 & IBM Security Directory Server 6.4.0.20

Configure LDAP as Identity Provider for OCP

In this guide, I will configure IBM Security Directory Server 6.4.0.20 as a Red Hat OpenShift Container Platform 4.4.3 (OCP) Identity Provider (IdP) for user and group synchronization and authentication.

IBM Security Directory Server 6.4

Installation and basic configuration

This topic covered earlier on this site, see here [1].

Created directory content

I have created the following directory server content, sample in ldif format:

    version: 1

    #/opt/ibm/ldap/V6.4/sbin/64/db2ldif -I idsldap -o /root/sample_ldap.ldif

    dn: o=ibm,c=hu
    objectclass: organization
    objectclass: top
    o: ibm

    dn: cn=groups,o=ibm,c=hu
    objectclass: container
    objectclass: top
    cn: groups

    dn: cn=users,o=ibm,c=hu
    objectclass: container
    objectclass: top
    cn: users

    dn: uid=john.doe,cn=users,o=ibm,c=hu
    mail: john.doe@cp4s.sechu.ibm
    mobile: +36123456789
    uid: john.doe
    ou: Security Business Unit
    objectclass: inetorgperson
    objectclass: top
    objectclass: organizationalperson
    objectclass: person
    sn: Doe
    cn: John Doe
    userPassword: {AES256}<...>==

    dn: uid=openshift_ldap_bind,cn=users,o=ibm,c=hu
    mail: openshift@cp4s.sechu.ibm
    uid: openshift_ldap_bind
    userPassword: {AES256}<...>==
    objectclass: inetorgperson
    objectclass: top
    objectclass: organizationalperson
    objectclass: person
    sn: OpenShift
    cn: OpenShift LDAP Bind User

    dn: cn=techusers,cn=groups,o=ibm,c=hu
    objectclass: groupofnames
    objectclass: top
    cn: techusers
    member: uid=openshift_ldap_bind,cn=users,o=ibm,c=hu

    dn: cn=ocp_admins,cn=groups,o=ibm,c=hu
    objectclass: groupofnames
    objectclass: top
    cn: ocp_admins
    member: uid=openshift_admin,cn=users,o=ibm,c=hu
    member: uid=john.doe,cn=users,o=ibm,c=hu

    dn: uid=openshift_admin,cn=users,o=ibm,c=hu
    mail: openshift_admin@cp4s.sechu.ibm
    uid: openshift_admin
    userPassword: {AES256}<...>==
    objectclass: inetorgperson
    objectclass: top
    objectclass: organizationalperson
    objectclass: person
    sn: OpenShift
    cn: openshift_admin

Configure OCP to connect to LDAP server

Configure LDAP IdP and create Config Resource

  1. Load Kubernetes config:

     export KUBECONFIG=/root/os4/auth/kubeconfig
  2. Create a secret on the cluster using the bastion machine.

     oc create secret generic ldap-secret --from-literal=bindPassword=<password> -n openshift-config

    Where is the bind user's password.

  3. Create the configuration YAML file:

     vi /root/os4/ldap_config.yaml

    Example content:

     apiVersion: config.openshift.io/v1
     kind: OAuth
     metadata:
       name: cluster
     spec:
       identityProviders:
         - name: ldapidp
           mappingMethod: claim
           type: LDAP
           ldap:
             attributes:
               id:
                 - uid
               email:
                 - mail
               name:
                 - displayName
               preferredUsername:
                 - uid
             bindDN: "uid=openshift_ldap_bind,cn=users,o=ibm,c=hu"
             bindPassword:
               name: ldap-secret
             insecure: true
             url: "ldap://ldap.cp4s.sechu.ibm:389/o=ibm,c=hu?uid"

    Where:

    • type: LDAP
    • bindDN: is the user in the LDAP to be able to bind
    • bindPassword: the reference name ldap-secret you created in step 1
    • url: RFC 2205 LDAP URL. The format: ldap(s)://<ldap hostname>:<ldap port>/<base DN>?<attribute>?<scope>?<filter>
  4. Create the configuration resource:

     oc apply -f /root/os4/ldap_config.yaml

Create LDAP synchronization configuration and sync groups from LDAP

  1. Create a LDAP sync file to sync groups and users.

     vi /root/os4/ldapsysnc.yaml

    Example content:

     kind: LDAPSyncConfig
     apiVersion: v1
     url: ldap://ldap.cp4s.sechu.ibm:389
     insecure: true
     rfc2307:
       groupsQuery:
         baseDN: cn=groups,o=ibm,c=hu
         scope: sub
         timeout: 0
         derefAliases: always
         filter: (objectClass=*)
         pageSize: 0
       groupUIDAttribute: dn
       groupNameAttributes: [cn]
       groupMembershipAttributes: [member]
       usersQuery:
         baseDN: cn=users,o=ibm,c=hu
         scope: one
         derefAliases: always
         pageSize: 0
       userUIDAttribute: dn
       userNameAttributes: [uid]
       tolerateMemberNotFoundErrors: true
       tolerateMemberOutOfScopeErrors: true
  2. Synchronize:

     oc adm groups sync --sync-config=ldapsysnc.yaml --confirm

    Example output:

     group/groups
     group/techusers
     group/ocp_admins
  3. Login with users (for example: john.doe) using the new LDAP IdP on OCP Console.

Grant privileges to user

  1. Once the new user can be seen on the OCP console, you can grant to any privilege to user or group. In my example, I'll. grant

     kubectl create clusterrolebinding permissive-binding \
         --clusterrole=cluster-admin \
         --user=openshift_admin \
         --user=john.doe \
         --group=system:serviceaccounts

Resources