15.4. LDAP グループの自動同期

Cron ジョブを設定して、LDAP グループを定期的に自動的に同期できます。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • LDAP アイデンティティープロバイダー(IDP)を設定していること。

    この手順では、ldap -secret という名前の LDAP シークレットと ca- config-map という名前の設定マップを作成していることを前提としています。

手順

  1. Cron ジョブを実行するプロジェクトを作成します。

    $ oc new-project ldap-sync 1
    1
    この手順では、ldap -sync というプロジェクト を使用します。
  2. LDAP アイデンティティープロバイダーの設定時に作成したシークレットおよび設定マップを見つけ、それらをこの新規プロジェクトにコピーします。

    シークレットおよび設定マップは 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. クラスターロールを定義します。

    Example 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. 同期設定ファイルを指定する設定マップを定義します。

    Example ldap-sync-config-map.yaml

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: ldap-group-syncer
      namespace: ldap-sync
    data:
      ldap-group-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. 設定マップを作成します。

    $ 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: "openshift/origin-cli:latest"
                  command:
                    - "/bin/bash"
                    - "-c"
                    - oc adm groups sync
                    - --sync-config=/etc/config/ldap-group-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 sync コマンド。設定マップで定義された同期設定ファイルを渡します。
    4
    このシークレットは、LDAP IDP の設定時に作成されています。
    5
    この設定マップは LDAP IDP の設定時に作成されました。
  12. cron ジョブを作成します。

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