ldap2pgはLDAP構成のシステムにおいて、LDAPサーバ上にあるユーザーなどの管理情報をデータベースサーバに反映し、データベースロールを管理します。ldap2pgにより、LDAPディレクトリとFEPのユーザーアカウントとの同期を自動的に行うことができます。同期はldap2pgによって定期的に行われます。同期の頻度は、cronジョブのようなエントリとして定義できます。ldap2pgからLDAPディレクトリへの接続およびFEPからLDAPディレクトリへの接続するには、LDAP、LDAPSおよびLDAP over TLSをサポートする必要があります。
postgres、repluser、rewind_user、mydbuserなどの組み込みOperatorユーザーは、通常のFEPオペレーターおよびFEPClusterの動作を妨げる可能性があるため、ldap2pgによって作成、削除、変更しないでください。FEPオペレーターによって提供されるデフォルトのldap2pg.ymlでは、これらのユーザーは除外されます。
ldap2pgを利用するためには、以下が必要です。
LDAP接続情報
ldapuri、basedn、binddnを含むLDAPディレクトリの詳細を定義し、ldap2pgで利用できるようにする必要があります。ldap.confは、このような情報を格納するために使用されます。これは、ldap2pgやFEPなど、LDAPディレクトリへの接続情報を必要とするすべてのソフトウェアで使用できます。
ldap.confの詳細はsecretに格納され、/etc/openldap/ldap.conf配下のfep-patroniにマウントされます。ユーザーは、ldap2pg同期を有効にする前に、このシークレットを事前に作成する必要があります。ldap2pgが有効なときにこのシークレットが存在しない場合、オペレーターは接続情報をコメントアウトしたサンプルldap.confを作成します。ユーザーは、対応するLDAP接続情報でシークレットを更新できます。この更新された情報は、kubeletがsyncPod関数を実行したときにfep-patroniに反映されます。
シークレットには、任意の名前を付けることができます (例: <fep-cluster>-ldapconf)。キーは“ldap.conf”であり、その値には LDAP設定が含まれている必要があります。
LDAPディレクトリ用の信頼できるCAバンドル
LDAPディレクトリがプライベートCAによって署名された証明書を使用して接続を保護している場合、ルートCAまでの証明書のチェーンは、LDAPまたはTLS経由のLDAPのどちらであっても、安全な接続のための信頼できる証明書として ldap2pgおよびFEPに提供される必要があります。この一連の証明書はConfigMapに格納され、/tls/ldap/ca.crt配下のfep-patroniにマウントされます。このような信頼できる証明書の使用はオプションですが、LDAPサーバの信頼性を認証するために証明書の使用を推奨します。
ConfigMap には、任意の名前を付けることができます (例: <fep-cluster>-cacrt)。キーは“ca.crt”であり、その値にはユーザーが提供するLDAP サーバ証明書が含まれている必要があります。
ldap2pg.yml
ldap2pgがLDAPディレクトリおよびFEPと対話するための設定ファイルです。
ldap2pg.ymlの詳細はConfigMapに格納され、/tmp/.config/ldap2pg.yml配下のfep-patroniにマウントされます。ユーザーは、ldap2pg同期を有効にする前に、このConfigMapを事前に作成する必要があります。ldap2pgが有効な場合にConfigMapが存在しないときには、オペレーターがサンプルのldap2pg.ymlを作成します。ユーザーは、このConfigMapを更新できます。更新された情報は、kubeletがsyncPod関数を実行したときにfep-patroniに反映されます。
ConfigMap には、任意の名前を付けることができます (例: <fep-cluster>-ldap2pgyml)。キーは“ldap2pg.yml”であり、その値にはldap2pgの設定が含まれている必要があります。
ldap2pgを利用するには、FEPClusterカスタムリソースを更新する必要があります。更新手順について説明します。
まず、LDAP構成とldap2pg 構成の両方に対して以下のリソースを作成します。
LDAP設定のシークレット(ldap.conf)
LDAPサーバ証明書用のConfigMap(ca.crt)
ldap2pg構成用のConfigMap(ldap2pg.yml)
次に、spec.ldapおよび spec.ldap2pgエントリを以下のFEPClusterカスタムリソースに追加します(下図を参照)。
ldap2pgが有効に設定されているFEPCluster(fepcluster.yaml)
以下の手順に従って、ldap2pg の FEPClusterカスタムリソースを更新します。
各手順では、OpenShiftコンソールおよびコマンドラインを使用した方法を説明しています。
LDAP構成 (ldap.conf)のシークレットを作成します。
LDAP構成にはLDAP接続情報が含まれます。
この例では、LDAP サーバが ldap-server.testprj.svc で実行され、ポート636でLDAPS接続をlistenしていると仮定します。ベースDNはdc=example,dc=org です。LDAP サーバへの接続にはLDAPユーザー cn=admin,dc=example,dc=orgが使用され、パスワードは“mypassword”です。
LDAP構成の例 (ldap.conf)
$ cat ldap.conf # # LDAP Defaults # #Refer to https://www.openldap.org/software/man.cgi?query=ldap.conf for full configuration details # This file should be world readable but not world writable. #BINDDN: This is the user to bind to LDAP server BINDDN cn=admin,dc=example,dc=org #BASE: Set it to the base DN where search will begin BASE dc=example,dc=org #PASSWORD: Password of user as defined in BINDDN PASSWORD mypassword #URI: Specify the URI of LDAP server URI ldaps://ldap-server.testprj.svc:636 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never TIMEOUT 15 # TLS certificates (needed for GnuTLS) # TLS_CACERT /tls/ldap/ca.crt # Specifies what checks to perform on server certificates in a TLS session. We are # being relax here even if server certificate cannot be verified. TLS_REQCERT allow
OpenShift でシークレットを作成
コマンドラインでシークレットを作成
$ kubectl -n ldap-ss create secret generic ldap-ss-ldapconf --from-file=ldap.conf secret/mysecret created
LDAP サーバ証明書に署名する証明書チェーン(ca.crt)を含むConfigMapを作成します。
LDAP サーバ証明書の例(ca.crt)
$ cat ca.crt -----BEGIN CERTIFICATE----- xxx root cert xxx -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- yyy intermediate cert yyy -----END CERTIFICATE-----
OpenShiftでConfigMapを作成
コマンドラインでConfigMapを作成
$ kubectl -n ldap-ss create configmap ldap-ss-cacrt --from-file=ca.crt configmap/ldap-ss-cacrt created
ldap2pg.ymlファイルのConfigMapを作成します。
下記のユーザーはオペレーターで管理されているため、ldap2pgの管理対象から外すためにpostgresセクションのroles_blacklist_queryに指定してください。
postgresユーザー
FEPClusterカスタムリソースのspec.fepChildCrVal.sysUsersに指定されているユーザー
その他のldap2pg.ymlの設定は“Fujitsu Enterprise Postgres 導入ガイド(クライアント編)”の“ldap2pg”を参照してください。
ldap2pg 構成 (ldap2pg.yml の postgres セクション)の例
postgres: roles_blacklist_query: [postgres, repluser, rewind_user, pwsyncuser, pg_*, pgx_*, ] databases_query: [postgres]
OpenShiftでConfigMapを作成
コマンドラインでConfigMapを作成
$ kubectl -n ldap-ss create configmap ldap-ss-ldap2pgyml --from-file=ldap2pg.yml configmap/ldap-ss-ldap2pgyml created
spec.ldap および spec.ldap2pg エントリを FEPClusterカスタムリソース (fepcluster.yaml) に追加します。
FEPClusterの作成および更新中に、以下のエントリをFEPClusterカスタムリソース に追加する必要があります。
キー | 値 | 説明 |
---|---|---|
spec.ldap.caConfigMapRef | ldap-ss-cacrt | 手順1を参照 |
spec.ldap.ldapconfSecretRef | ldap-ss-ldapconf | 手順2を参照 |
spec.ldap2pg.ldap2pgymlConfigMapRef | ldap-ss-ldap2pgyml | 手順3を参照 |
spec.ldap2pg.mode | 省略値: check | |
spec.ldap2pg.schedule | 省略値:‘*/5 * * * *’ | |
spec.ldap2pg.enable | 省略値: true |
spec.ldap2pg.enableをfalseに設定すると、ldap2pg機能を無効にできます。
ldap2pgを有効にする場合のFEPClusterカスタムリソースの例(fepcluster.yaml)
$ cat fepcluster.yaml apiVersion: fep.fujitsu.io/v2 kind: FEPCluster metadata: name: ldap-ss namespace: ldap-ss spec: ldap: caConfigMapRef: ldap-ss-cacrt ldapconfSecretRef: ldap-ss-ldapconf ldap2pg: ldap2pgymlConfigMapRef: ldap-ss-ldap2pgyml mode: check schedule: '*/5 * * * *' enable: true
OpenShiftでFEPClusterカスタムリソースを更新
コマンドラインでFEPClusterカスタムリソースを更新
$ kubectl apply -f fepcluster.yaml