18.4. LDAP グループを自動的に同期する
cron ジョブを設定することにより、LDAP グループを定期的に自動的に同期できます。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 LDAP ID プロバイダー (IDP) を設定しました。
この手順は、
ldap-secret
という名前の LDAP シークレットとca-config-map
という名前の設定マップを作成したことを前提としています。
手順
cron ジョブを実行するプロジェクトを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-project ldap-sync
$ oc new-project ldap-sync
1 - 1
- この手順では、
ldap-sync
というプロジェクトを使用します。
LDAP ID プロバイダーの設定時に作成したシークレットマップと設定マップを見つけて、この新しいプロジェクトにコピーします。
シークレットマップと設定マップは
openshift-config
プロジェクトに存在し、新しいldap-sync
プロジェクトにコピーする必要があります。サービスアカウントを定義します。
例:
ldap-sync-service-account.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kind: ServiceAccount apiVersion: v1 metadata: name: ldap-group-syncer namespace: ldap-sync
kind: ServiceAccount apiVersion: v1 metadata: name: ldap-group-syncer namespace: ldap-sync
サービスアカウントを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f ldap-sync-service-account.yaml
$ oc create -f ldap-sync-service-account.yaml
クラスターのロールを定義します。
例:
ldap-sync-cluster-role.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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
クラスターロールを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f ldap-sync-cluster-role.yaml
$ oc create -f ldap-sync-cluster-role.yaml
クラスターロールバインディングを定義して、クラスターロールをサービスアカウントにバインドします。
例:
ldap-sync-cluster-role-binding.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 クラスターロールバインディングを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f ldap-sync-cluster-role-binding.yaml
$ oc create -f ldap-sync-cluster-role-binding.yaml
同期設定ファイルを指定する設定マップを定義します。
例:
ldap-sync-config-map.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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:389 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
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
設定マップを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f ldap-sync-config-map.yaml
$ oc create -f ldap-sync-config-map.yaml
cron ジョブを定義します。
例:
ldap-sync-cron-job.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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"
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 ジョブを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f ldap-sync-cron-job.yaml
$ oc create -f ldap-sync-cron-job.yaml