19.4. LDAP グループを自動的に同期する


LDAP グループと OpenShift Container Platform を自動的に同期するように cron ジョブを設定し、手動同期コマンドを実行せずにグループメンバーシップを最新の状態に維持できるようにします。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • LDAP アイデンティティープロバイダー(IDP)を設定しました。
  • ldap-secret という名前の LDAP シークレットと ca-config-map という名前の設定マップを作成している。

手順

  1. 次のコマンドを実行して、cron ジョブが実行されるプロジェクトを作成します。

    $ oc new-project ldap-sync

    この手順では、ldap-sync というプロジェクトを使用します。

  2. LDAP ID プロバイダーの設定時に作成したシークレットマップと設定マップを見つけて、この新しいプロジェクトにコピーします。

    シークレットマップと設定マップは openshift-config プロジェクトに存在し、新しい ldap-sync プロジェクトにコピーする必要があります。

  3. サービスアカウントを定義します。

    kind: ServiceAccount
    apiVersion: v1
    metadata:
      name: ldap-group-syncer
      namespace: ldap-sync
  4. 次のコマンドを実行してサービスアカウントを作成します。

    $ oc create -f ldap-sync-service-account.yaml
  5. クラスターのロールを定義します。

    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. クラスターロールバインディングを定義して、クラスターロールをサービスアカウントにバインドします。

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

    各項目の説明:

    subjects.name
    この手順の前半で作成したサービスアカウントを指定します。
    roleRef.name
    この手順の前半で作成したクラスターロールを指定します。
  8. 次のコマンドを実行して、クラスターロールバインディングを作成します。

    $ oc create -f ldap-sync-cluster-role-binding.yaml
  9. 同期設定ファイルを指定する設定マップを定義します。

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

    各項目の説明:

    data.sync.yaml
    同期設定ファイルを指定します。
    data.sync.yaml.url
    URL を指定します。
    data.sync.yaml.bindDN
    bindDN を指定します。
    data.sync.yaml.rfc2307
    RFC 2307 スキーマを指定します。必要に応じて値を調整します。別のスキーマを使用することもできます。
    data.sync.yaml.rfc2307.groupsQuery.baseDN
    groupsQuery の baseDN を指定します。
    data.sync.yaml.rfc2307.usersQuery.baseDN
    usersQuery の baseDN を指定します。
  10. 以下のコマンドを実行して config map を作成します。

    $ oc create -f ldap-sync-config-map.yaml
  11. cron ジョブを定義します。

    kind: CronJob
    apiVersion: batch/v1
    metadata:
      name: ldap-group-syncer
      namespace: ldap-sync
    spec:
      schedule: "*/30 * * * *"
      concurrencyPolicy: Forbid
      jobTemplate:
        spec:
          backoffLimit: 0
          ttlSecondsAfterFinished: 1800
          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"
                  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"
                - name: "ldap-ca"
                  configMap:
                    name: "ca-config-map"
              restartPolicy: "Never"
              terminationGracePeriodSeconds: 30
              activeDeadlineSeconds: 500
              dnsPolicy: "ClusterFirst"
              serviceAccountName: "ldap-group-syncer"

    各項目の説明:

    spec
    cron ジョブの設定を指定します。cron ジョブ設定の詳細は、「cron ジョブの作成」を参照してください。
    spec.schedule
    cron 形式 で指定されるジョブのスケジュールを指定します。この例の cron ジョブは 30 分ごとに実行されます。同期の実行にかかる時間を考慮して、必要に応じて周波数を調整します。
    spec.jobTemplate.spec.ttlSecondsAfterFinished
    完了したジョブを保持する期間を秒単位で指定します。これは、失敗した以前のジョブを消去して不要なアラートを発生させないように、ジョブスケジュールの期間と同じにする必要があります。詳細は、Kubernetes ドキュメント(Finished Jobs)の自動クリーンアップ を参照してください。
    spec.jobTemplate.spec.template.spec.containers.command
    cron ジョブを実行する LDAP 同期コマンドを指定します。設定マップで定義された同期設定ファイルを渡します。
    spec.jobTemplate.spec.template.spec.volumes.secret.secretName
    LDAP IDP の設定時に作成したシークレットの名前を指定します。
    spec.jobTemplate.spec.template.spec.volumes.configMap.name
    LDAP IDP の設定時に作成した設定マップの名前を指定します。
  12. 次のコマンドを実行して cron ジョブを作成します。

    $ oc create -f ldap-sync-cron-job.yaml
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る