18.4. LDAP グループを自動的に同期する
cron ジョブを設定することにより、LDAP グループを定期的に自動的に同期できます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 LDAP ID プロバイダー (IDP) を設定しました。
この手順は、
ldap-secret
という名前の LDAP シークレットとca-config-map
という名前の設定マップを作成したことを前提としています。
手順
cron ジョブを実行するプロジェクトを作成します。
$ oc new-project ldap-sync 1
- 1
- この手順では、
ldap-sync
というプロジェクトを使用します。
LDAP ID プロバイダーの設定時に作成したシークレットマップと設定マップを見つけて、この新しいプロジェクトにコピーします。
シークレットマップと設定マップは
openshift-config
プロジェクトに存在し、新しいldap-sync
プロジェクトにコピーする必要があります。サービスアカウントを定義します。
例:
ldap-sync-service-account.yaml
kind: ServiceAccount apiVersion: v1 metadata: name: ldap-group-syncer namespace: ldap-sync
サービスアカウントを作成します。
$ oc create -f ldap-sync-service-account.yaml
クラスターのロールを定義します。
例:
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
クラスターロールを作成します。
$ oc create -f ldap-sync-cluster-role.yaml
クラスターロールバインディングを定義して、クラスターロールをサービスアカウントにバインドします。
例:
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
クラスターロールバインディングを作成します。
$ oc create -f ldap-sync-cluster-role-binding.yaml
同期設定ファイルを指定する設定マップを定義します。
例:
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
設定マップを作成します。
$ oc create -f ldap-sync-config-map.yaml
cron ジョブを定義します。
例:
ldap-sync-cron-job.yaml
kind: CronJob apiVersion: batch/v1 metadata: name: ldap-group-syncer namespace: ldap-sync spec: 1 schedule: "*/30 * * * *" 2 concurrencyPolicy: Forbid jobTemplate: spec: backoffLimit: 0 ttlSecondsAfterFinished: 1800 3 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" 4 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" 5 - name: "ldap-ca" configMap: name: "ca-config-map" 6 restartPolicy: "Never" terminationGracePeriodSeconds: 30 activeDeadlineSeconds: 500 dnsPolicy: "ClusterFirst" serviceAccountName: "ldap-group-syncer"
- 1
- cron ジョブの設定を設定します。cron ジョブ設定の詳細は、「cron ジョブの作成」を参照してください。
- 2
- cron 形式 で指定されるジョブのスケジュール。この例の cron ジョブは 30 分ごとに実行されます。同期の実行にかかる時間を考慮して、必要に応じて周波数を調整します。
- 3
- 完了したジョブを保持する時間 (秒単位)。これは、失敗した以前のジョブを消去して不要なアラートを発生させないように、ジョブスケジュールの期間と同じにする必要があります。詳細は、Kubernetes ドキュメントの TTL-after-finished Controller を参照してください。
- 4
- cron ジョブを実行するための LDAP 同期コマンド。設定マップで定義された同期設定ファイルを渡します。
- 5
- このシークレットは、LDAP IDP が設定されたときに作成されました。
- 6
- この設定マップは、LDAP IDP が設定されたときに作成されました。
cron ジョブを作成します。
$ oc create -f ldap-sync-cron-job.yaml