16.4. LDAP 그룹 자동 동기화

cron 작업을 구성하여 정기적으로 LDAP 그룹을 동기화할 수 있습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • LDAP ID 공급자(IDP)를 구성했습니다.

    이 절차에서는 ldap-secret이라는 LDAP 시크릿과 ca-config-map 이라는 구성 맵을 생성했다고 가정합니다.

절차

  1. cron 작업이 실행될 프로젝트를 생성합니다.

    $ oc new-project ldap-sync 1
    1
    이 절차에서는 ldap-sync라는 프로젝트를 사용합니다.
  2. LDAP ID 공급자를 구성할 때 생성한 시크릿 및 구성 맵을 찾아 이 새 프로젝트에 복사합니다.

    시크릿 및 구성 맵은 openshift-config 프로젝트에 있으며 새 ldap-sync 프로젝트에 복사해야 합니다.

  3. 서비스 계정을 정의합니다.

    예: ldap-sync-service-account.yaml

    kind: ServiceAccount
    apiVersion: v1
    metadata:
      name: ldap-group-syncer
      namespace: ldap-sync

  4. 서비스 계정을 생성합니다.

    $ oc create -f ldap-sync-service-account.yaml
  5. 클러스터 역할을 정의합니다.

    예: ldap-sync-cluster-role.yaml

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: ldap-group-syncer
    rules:
      - apiGroups:
          - ''
          - user.openshift.io
        resources:
          - groups
        verbs:
          - get
          - list
          - create
          - update

  6. 클러스터 역할을 생성합니다.

    $ oc create -f ldap-sync-cluster-role.yaml
  7. 클러스터 역할을 서비스 계정에 바인딩할 클러스터 역할 바인딩을 정의합니다.

    예: ldap-sync-cluster-role-binding.yaml

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: ldap-group-syncer
    subjects:
      - kind: ServiceAccount
        name: ldap-group-syncer              1
        namespace: ldap-sync
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: ldap-group-syncer                2

    1
    이 절차의 앞부분에서 생성한 서비스 계정에 대한 참조입니다.
    2
    이 절차의 앞부분에서 생성한 클러스터 역할에 대한 참조입니다.
  8. 클러스터 역할 바인딩을 생성합니다.

    $ oc create -f ldap-sync-cluster-role-binding.yaml
  9. 동기화 구성 파일을 지정하는 구성 맵을 정의합니다.

    예: ldap-sync-config-map.yaml

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: ldap-group-syncer
      namespace: ldap-sync
    data:
      sync.yaml: |                                 1
        kind: LDAPSyncConfig
        apiVersion: v1
        url: ldaps://10.0.0.0:389                  2
        insecure: false
        bindDN: cn=admin,dc=example,dc=com         3
        bindPassword:
          file: "/etc/secrets/bindPassword"
        ca: /etc/ldap-ca/ca.crt
        rfc2307:                                   4
          groupsQuery:
            baseDN: "ou=groups,dc=example,dc=com"  5
            scope: sub
            filter: "(objectClass=groupOfMembers)"
            derefAliases: never
            pageSize: 0
          groupUIDAttribute: dn
          groupNameAttributes: [ cn ]
          groupMembershipAttributes: [ member ]
          usersQuery:
            baseDN: "ou=users,dc=example,dc=com"   6
            scope: sub
            derefAliases: never
            pageSize: 0
          userUIDAttribute: dn
          userNameAttributes: [ uid ]
          tolerateMemberNotFoundErrors: false
          tolerateMemberOutOfScopeErrors: false

    1
    동기화 구성 파일을 정의합니다.
    2
    URL을 지정합니다.
    3
    bindDN을 지정합니다.
    4
    이 예에서는 RFC2307 스키마를 사용하고 필요에 따라 값을 조정합니다. 다른 스키마를 사용할 수도 있습니다.
    5
    groupsQuery에 대한 baseDN을 지정합니다.
    6
    usersQuery에 대한 baseDN을 지정합니다.
  10. config map을 생성합니다.

    $ oc create -f ldap-sync-config-map.yaml
  11. cron 작업을 정의합니다.

    예: ldap-sync-cron-job.yaml

    kind: CronJob
    apiVersion: batch/v1beta1
    metadata:
      name: ldap-group-syncer
      namespace: ldap-sync
    spec:                                                                                1
      schedule: "*/30 * * * *"                                                           2
      concurrencyPolicy: Forbid
      jobTemplate:
        spec:
          backoffLimit: 0
          template:
            spec:
              containers:
                - name: ldap-group-sync
                  image: "registry.redhat.io/openshift4/ose-cli:latest"
                  command:
                    - "/bin/bash"
                    - "-c"
                    - "oc adm groups sync --sync-config=/etc/config/sync.yaml --confirm" 3
                  volumeMounts:
                    - mountPath: "/etc/config"
                      name: "ldap-sync-volume"
                    - mountPath: "/etc/secrets"
                      name: "ldap-bind-password"
                    - mountPath: "/etc/ldap-ca"
                      name: "ldap-ca"
              volumes:
                - name: "ldap-sync-volume"
                  configMap:
                    name: "ldap-group-syncer"
                - name: "ldap-bind-password"
                  secret:
                    secretName: "ldap-secret"                                            4
                - name: "ldap-ca"
                  configMap:
                    name: "ca-config-map"                                                5
              restartPolicy: "Never"
              terminationGracePeriodSeconds: 30
              activeDeadlineSeconds: 500
              dnsPolicy: "ClusterFirst"
              serviceAccountName: "ldap-group-syncer"

    1
    cron 작업의 설정을 구성합니다. cron 작업 설정에 대한 자세한 내용은 "Cron 작업 생성"에서 참조하십시오.
    2
    cron 형식으로 지정된 작업의 스케줄입니다. 이 예제 cron 작업은 30분마다 실행됩니다. 필요에 따라 빈도를 조정하여 동기화를 실행하는 데 걸리는 시간을 고려합니다.
    3
    실행할 cron 작업의 LDAP 동기화 명령입니다. 구성 맵에 정의된 동기화 구성 파일에서 전달합니다.
    4
    이 시크릿은 LDAP IDP를 구성할 때 생성되었습니다.
    5
    이 구성 맵은 LDAP IDP 구성 시 생성되었습니다.
  12. cron 작업을 생성합니다.

    $ oc create -f ldap-sync-cron-job.yaml