18.4. Synchronisation automatique des groupes LDAP
Vous pouvez synchroniser automatiquement les groupes LDAP sur une base périodique en configurant un travail cron.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. Vous avez configuré un fournisseur d'identité LDAP (IDP).
Cette procédure suppose que vous avez créé un secret LDAP nommé
ldap-secret
et une carte de configuration nomméeca-config-map
.
Procédure
Créez un projet dans lequel la tâche cron sera exécutée :
oc new-project ldap-sync 1
- 1
- Cette procédure utilise un projet appelé
ldap-sync
.
Localisez le secret et la carte de configuration que vous avez créés lors de la configuration du fournisseur d'identité LDAP et copiez-les dans ce nouveau projet.
Le secret et la carte de configuration existent dans le projet
openshift-config
et doivent être copiés dans le nouveau projetldap-sync
.Définir un compte de service :
Exemple
ldap-sync-service-account.yaml
kind: ServiceAccount apiVersion: v1 metadata: name: ldap-group-syncer namespace: ldap-sync
Créer le compte de service :
$ oc create -f ldap-sync-service-account.yaml
Définir un rôle de cluster :
Exemple
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
Créer le rôle de cluster :
$ oc create -f ldap-sync-cluster-role.yaml
Définir une liaison de rôle de cluster pour lier le rôle de cluster au compte de service :
Exemple
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
Créez la liaison de rôle de cluster :
$ oc create -f ldap-sync-cluster-role-binding.yaml
Définir une carte de configuration qui spécifie le fichier de configuration de la synchronisation :
Exemple
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
- Définir le fichier de configuration de la synchronisation.
- 2
- Spécifiez l'URL.
- 3
- Spécifiez le site
bindDN
. - 4
- Cet exemple utilise le schéma RFC2307 ; adaptez les valeurs si nécessaire. Vous pouvez également utiliser un schéma différent.
- 5
- Spécifiez le
baseDN
pour legroupsQuery
. - 6
- Spécifiez le
baseDN
pour leusersQuery
.
Créer la carte de configuration :
$ oc create -f ldap-sync-config-map.yaml
Définir une tâche cron :
Exemple
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
- Configurez les paramètres de la tâche cron. Voir "Création de tâches cron" pour plus d'informations sur les paramètres des tâches cron.
- 2
- L'horaire du travail spécifié au format cron. Dans cet exemple, la tâche cron s'exécute toutes les 30 minutes. Ajustez la fréquence si nécessaire, en veillant à prendre en compte le temps nécessaire à l'exécution de la synchronisation.
- 3
- Durée, en secondes, pendant laquelle les travaux terminés doivent être conservés. Cette durée doit correspondre à celle de la planification des tâches afin de nettoyer les anciennes tâches qui ont échoué et d'éviter les alertes inutiles. Pour plus d'informations, voir TTL-after-finished Controller dans la documentation Kubernetes.
- 4
- La commande de synchronisation LDAP pour le job cron à exécuter. Transmet le fichier de configuration de la synchronisation qui a été défini dans la carte de configuration.
- 5
- Ce secret a été créé lors de la configuration de l'IDP LDAP.
- 6
- Cette carte de configuration a été créée lors de la configuration de l'IDP LDAP.
Créez la tâche cron :
$ oc create -f ldap-sync-cron-job.yaml
Ressources complémentaires