第13章 グループと LDAP の同期


13.1. 概要

OpenShift Container Platform 管理者として、グループを使用してユーザーを管理し、権限を変更し、連携を強化できます。組織ではユーザーグループをすでに作成し、それらを LDAP サーバーに保存している場合があります。OpenShift Container Platform はそれらの LDAP レコードを内部 OpenShift Container Platform レコードと同期できるので、グループを 1 つの場所で管理できます。現時点で OpenShift Container Platform はグループメンバーシップを定義するための 3 つの共通スキーマ (RFC 2307、Active Directory、拡張された Active Directory) を使用してグループと LDAP サーバーの同期をサポートしています。

注記

グループを同期するには cluster-admin 権限を持っている必要があります。

13.2. LDAP 同期の設定

LDAP 同期を実行するには、同期設定ファイルが必要です。このファイルには LDAP クライアント設定の詳細が含まれます。

  • LDAP サーバーへの接続の設定。
  • LDAP サーバーで使用されるスキーマに依存する同期設定オプション。

同期設定ファイルには、OpenShift Container Platform Group 名を LDAP サーバーのグループにマップする管理者が定義した名前マッピングの一覧も含まれます。

13.2.1. LDAP クライアント設定

例13.1 LDAP クライアント設定

url: ldap://10.0.0.0:389 1
bindDN: cn=admin,dc=example,dc=com 2
bindPassword: password 3
insecure: false 4
ca: my-ldap-ca-bundle.crt 5
1
データベースをホストする LDAP サーバーの接続プロトコル、 IP アドレス、および scheme://host:port としてフォーマットされる接続先のポートです。
2
バインド DN として使用する任意の識別名 (DN) です。同期操作のエントリーを取得するために昇格した権限が必要となる場合、OpenShift Container Platform はこれを使用します。
3
バインドに使用する任意のパスワードです。同期操作のエントリーを取得するために昇格した権限が必要となる場合、OpenShift Container Platform はこれを使用します。この値は環境変数、外部ファイル、または暗号化ファイルでも指定できます。
4
true の場合、サーバーへの TLS 接続は行われません。false の場合、セキュアな LDAP (ldaps://) URL は TLS を使用して接続し、非セキュアな LDAP (ldap://) URL は TLS にアップグレードされます。
5
設定された URL のサーバー証明書を検証するために使用する証明書バンドルです。空の場合、OpenShift Container Platform はシステムで信頼されるルートを使用します。insecurefalse に設定されている場合にのみ、これが適用されます。

13.2.2. LDAP クエリー定義

同期設定は、同期に必要となるエントリーの LDAP クエリー定義で構成されています。LDAP クエリーの特定の定義は、LDAP サーバーにメンバーシップ情報を保存するために使用されるスキーマに依存します。

例13.2 LDAP クエリー定義

baseDN: ou=users,dc=example,dc=com 1
scope: sub 2
derefAliases: never 3
timeout: 0 4
filter: (objectClass=inetOrgPerson) 5
pageSize: 0 6
1
すべての検索が開始されるディレクトリーのブランチの識別名 (DN) です。ディレクトリーツリーの上部を指定する必要がありますが、ディレクトリーのサブツリーを指定することもできます。
2
検索の範囲です。有効な値は baseone、または sub です。これを定義しない場合、sub の範囲が使用されます。範囲オプションについては、以下の表で説明されています。
3
LDAP ツリーのエイリアスに関連する検索の動作です。有効な値は neversearchbase、または always です。これを定義しない場合、デフォルトは always となり、エイリアスを逆参照します。逆参照の動作については以下の表で説明されています。
4
クライアントによって検索に許可される時間制限です。秒単位で表示されます。0 の値はクライアント側の制限がないことを意味します。
5
有効な LDAP 検索フィルターです。これを定義しない場合、デフォルトは (objectClass=*) になります。
6
LDAP エントリーで測定される、サーバーからの応答ページの任意の最大サイズです。0 に設定すると、応答ページのサイズ制限はなくなります。クライアントまたはサーバーがデフォルトで許可しているエントリー数より多いエントリーをクエリーが返す場合、ページングサイズの設定が必要となります。
表13.1 LDAP 検索範囲オプション
LDAP 検索範囲説明

base

クエリーに対して指定されるベース DN で指定するオブジェクトのみを考慮します。

one

クエリーについてベース DN とツリー内の同じレベルにあるすべてのオブジェクト考慮します。

sub

クエリーに指定されるベース DN のサブツリー全体を考慮します。

表13.2 LDAP 逆参照動作
逆参照動作説明

never

LDAP ツリーにあるエイリアスを逆参照しません。

search

検索中に見つかったエイリアスのみを逆参照します。

base

ベースオブジェクトを検索中にエイリアスのみを逆参照します。

always

LDAP ツリーにあるすべてのエイリアスを常に逆参照します。

13.2.3. ユーザー定義の名前マッピング

ユーザー定義の名前マッピングは、OpenShift Container Platform Groups の名前を LDAP サーバーでグループを検出する固有の識別子に明示的にマップします。マッピングは通常の YAML 構文を使用します。ユーザー定義のマッピングには LDAP サーバーのすべてのグループのエントリーを含めることも、それらのグループのサブセットのみを含めることもできます。ユーザー定義の名前マッピングを持たないグループが LDAP サーバーにある場合、同期時のデフォルト動作では Group の名前として指定される属性が使用されます。

例13.3 ユーザー定義の名前マッピング

groupUIDNameMapping:
  "cn=group1,ou=groups,dc=example,dc=com": firstgroup
  "cn=group2,ou=groups,dc=example,dc=com": secondgroup
  "cn=group3,ou=groups,dc=example,dc=com": thirdgroup

13.3. LDAP 同期の実行

同期設定ファイルを作成すると、同期を開始できます。OpenShift Container Platform では、管理者は同じサーバーを使用して多数の異なる同期タイプを実行できます。

注記

デフォルトでは、すべてのグループ同期またはプルーニング操作がドライランされるので、OpenShift Container Platform Group レコードを変更するために sync-groups コマンドで --confirm フラグを設定する必要があります。

OpenShift Container Platform を使用して LDAP サーバーからすべてのグループを同期するには、以下を実行します。

$ oc adm groups sync --sync-config=config.yaml --confirm

設定ファイルで指定された LDAP サーバーのグループに対応する OpenShift Container Platform の Group をすべて同期するには、以下を実行します。

$ oc adm groups sync --type=openshift --sync-config=config.yaml --confirm

LDAP グループのサブセットと OpenShift Container Platform を同期するには、ホワイトリストファイル、ブラックリストファイル、またはその両方を使用します。

注記

ブラックリストファイル、ホワイトリストファイル、またはホワイトリストのリテラルの組み合わせを使用できます。ホワイトリストのリテラルはコマンド自体に直接含めることができます。これは LDAP サーバーにあるグループと OpenShift Container Platform にすでにあるグループに適用されます。ファイルには 1 行ごとの 1 つの固有のグループ識別子を含める必要があります。

$ oc adm groups sync --whitelist=<whitelist_file> \
                   --sync-config=config.yaml    \
                   --confirm
$ oc adm groups sync --blacklist=<blacklist_file> \
                   --sync-config=config.yaml    \
                   --confirm
$ oc adm groups sync <group_unique_identifier>    \
                   --sync-config=config.yaml    \
                   --confirm
$ oc adm groups sync <group_unique_identifier>    \
                   --whitelist=<whitelist_file> \
                   --blacklist=<blacklist_file> \
                   --sync-config=config.yaml    \
                   --confirm
$ oc adm groups sync --type=openshift             \
                   --whitelist=<whitelist_file> \
                   --sync-config=config.yaml    \
                   --confirm

13.4. グループのプルーニングジョブの実行

グループを作成した LDAP サーバーのレコードが存在しなくなった場合、管理者は OpenShift Container Platform レコードからグループを削除することを選択できます。プルーニングジョブは、同期ジョブに使用されるものと同じ同期設定ファイルとホワイトまたはブラックリストを受け入れます。

たとえば、グループが config.yaml ファイルを使用して LDAP から同期されており、その一部のグループが LDAP サーバーに存在しなくなっている場合、以下のコマンドを使用して、どの OpenShift Container Platform の Group が LDAP で削除されたグループに対応するかを判断し、それらを OpenShift Container Platform から削除できます。

$ oc adm groups prune --sync-config=config.yaml --confirm

13.5. 同期の例

このセクションでは、RFC 2307Active Directory拡張された Active Directory スキーマの例を紹介しています。以下のすべての例では 2 名のメンバー (JaneJim) を持つ admins というグループを同期しています。それぞれの例では以下について説明しています。

  • グループとユーザーが LDAP サーバーに追加される方法。
  • LDAP 同期設定ファイルの概観。
  • 同期後に生成される OpenShift Container Platform の Group レコード。
注記

これらの例では、すべてのユーザーがそれぞれのグループの直接的なメンバーであることを想定しています。とくに、グループには他のグループがメンバーとして含まれません。ネスト化されたグループを同期する方法の詳細については、「ネスト化されたメンバーシップ同期の例」を参照してください。

13.5.1. RFC 2307

RFC 2307 スキーマでは、ユーザー (Jane と Jim) とグループの両方がファーストクラスエントリーとして LDAP サーバーに存在し、グループメンバーシップはグループの属性に保存されます。以下の ldif のスニペットでは、このスキーマのユーザーとグループを定義しています。

例13.4 RFC 2307 スキーマを使用する LDAP エントリー: rfc2307.ldif

  dn: ou=users,dc=example,dc=com
  objectClass: organizationalUnit
  ou: users

  dn: cn=Jane,ou=users,dc=example,dc=com
  objectClass: person
  objectClass: organizationalPerson
  objectClass: inetOrgPerson
  cn: Jane
  sn: Smith
  displayName: Jane Smith
  mail: jane.smith@example.com

  dn: cn=Jim,ou=users,dc=example,dc=com
  objectClass: person
  objectClass: organizationalPerson
  objectClass: inetOrgPerson
  cn: Jim
  sn: Adams
  displayName: Jim Adams
  mail: jim.adams@example.com

  dn: ou=groups,dc=example,dc=com
  objectClass: organizationalUnit
  ou: groups

  dn: cn=admins,ou=groups,dc=example,dc=com 1
  objectClass: groupOfNames
  cn: admins
  owner: cn=admin,dc=example,dc=com
  description: System Administrators
  member: cn=Jane,ou=users,dc=example,dc=com 2
  member: cn=Jim,ou=users,dc=example,dc=com
1
このグループは LDAP サーバーのファーストクラスエントリーです。
2
グループのメンバーは、グループの属性としての識別参照と共に一覧表示されます。

このグループを同期するには、まず設定ファイルを作成する必要があります。RFC 2307 スキーマでは、ユーザーとグループエントリー両方の LDAP クエリー定義と内部 OpenShift Container Platform レコードでそれらを表すのに使用する属性を指定する必要があります。

明確にするために、OpenShift Container Platform で作成するグループは (可能な場合) ユーザーまたは管理者に表示されるフィールドに識別名以外の属性を使用する必要があります。たとえば、メールによってグループのユーザーを識別し、一般名としてグループの名前を使用します。以下の設定ファイルでは、このような関係を作成しています。

注記

ユーザー定義の名前マッピングを使用する場合は、設定ファイルが異なります。

例13.5 RFC 2307 スキーマを使用する LDAP 同期設定: rfc2307_config.yaml

kind: LDAPSyncConfig
apiVersion: v1
url: ldap://LDAP_SERVICE_IP:389 1
insecure: false 2
rfc2307:
    groupsQuery:
        baseDN: "ou=groups,dc=example,dc=com"
        scope: sub
        derefAliases: never
        pageSize: 0
    groupUIDAttribute: dn 3
    groupNameAttributes: [ cn ] 4
    groupMembershipAttributes: [ member ] 5
    usersQuery:
        baseDN: "ou=users,dc=example,dc=com"
        scope: sub
        derefAliases: never
        pageSize: 0
    userUIDAttribute: dn 6
    userNameAttributes: [ mail ] 7
    tolerateMemberNotFoundErrors: false
    tolerateMemberOutOfScopeErrors: false
1
このグループのレコードが保存される LDAP サーバーの IP アドレスとホストです。
2
true の場合、サーバーへの TLS 接続は行われません。false の場合、セキュアな LDAP (ldaps://) URL は TLS を使用して接続し、非セキュアな LDAP (ldap://) URL は TLS にアップグレードされます。
3
LDAP サーバーのグループを一意に識別する属性です。groupUIDAttribute に DN を使用している場合、groupsQuery フィルターを指定できません。詳細なフィルターを実行するには、ホワイトリスト/ブラックリスト方法を使用します。
4
Group の名前として使用する属性です。
5
メンバーシップ情報を保存するグループの属性です。
6
LDAP サーバーでユーザーを一意に識別する属性です。userUIDAttribute に DN を使用している場合は、usersQuery フィルターを指定できません。詳細のフィルターを実行するには、ホワイトリスト/ブラックリスト方法を使用します。
7
OpenShift Container Platform Group レコードでユーザー名として使用される属性です。

rfc2307_config.yaml ファイルと同期するには、以下を実行します。

$ oc adm groups sync --sync-config=rfc2307_config.yaml --confirm

OpenShift Container Platform は、上記の同期操作の結果として以下のグループレコードを作成します。

例13.6 rfc2307_config.yaml を使用して作成される OpenShift Container Platform Group

apiVersion: user.openshift.io/v1
kind: Group
metadata:
  annotations:
    openshift.io/ldap.sync-time: 2015-10-13T10:08:38-0400 1
    openshift.io/ldap.uid: cn=admins,ou=groups,dc=example,dc=com 2
    openshift.io/ldap.url: LDAP_SERVER_IP:389 3
  creationTimestamp:
  name: admins 4
users: 5
- jane.smith@example.com
- jim.adams@example.com
1
このグループと LDAP サーバーが最後に同期された時間です。ISO 6801 形式を使用します。
2
LDAP サーバーのグループの固有識別子です。
3
このグループのレコードが保存される LDAP サーバーの IP アドレスとホストです。
4
同期ファイルが指定するグループ名です。
5
グループのメンバーのユーザーです。同期ファイルで指定される名前が使用されます。

13.5.1.1. ユーザー定義の名前マッピングに関する RFC2307

グループとユーザー定義の名前マッピングを同期する場合、設定ファイルは、以下に示すこれらのマッピングが含まれるように変更されます。

例13.7 ユーザー定義の名前マッピングに関する RFC 2307 スキーマを使用する LDAP 同期設定: rfc2307_config_user_defined.yaml

kind: LDAPSyncConfig
apiVersion: v1
groupUIDNameMapping:
  "cn=admins,ou=groups,dc=example,dc=com": Administrators 1
rfc2307:
    groupsQuery:
        baseDN: "ou=groups,dc=example,dc=com"
        scope: sub
        derefAliases: never
        pageSize: 0
    groupUIDAttribute: dn 2
    groupNameAttributes: [ cn ] 3
    groupMembershipAttributes: [ member ]
    usersQuery:
        baseDN: "ou=users,dc=example,dc=com"
        scope: sub
        derefAliases: never
        pageSize: 0
    userUIDAttribute: dn 4
    userNameAttributes: [ mail ]
    tolerateMemberNotFoundErrors: false
    tolerateMemberOutOfScopeErrors: false
1
ユーザー定義の名前マッピングです。
2
ユーザー定義の名前マッピングでキーに使用される固有の識別属性です。groupUIDAttribute に DN を使用している場合は groupsQuery フィルターを指定できません。詳細なフィルターを実行するには、ホワイトリスト/ブラックリスト方法を使用します。
3
固有の識別子がユーザー定義の名前マッピングに存在しない場合に OpenShift Container Platform Group に名前を付けるための属性です。
4
LDAP サーバーでユーザーを一意に識別する属性です。userUIDAttribute に DN を使用している場合は、usersQuery フィルターを指定できません。詳細のフィルターを実行するには、ホワイトリスト/ブラックリスト方法を使用します。

rfc2307_config_user_defined.yaml ファイルと同期するには、以下を実行します。

$ oc adm groups sync --sync-config=rfc2307_config_user_defined.yaml --confirm

OpenShift Container Platform は、上記の同期操作の結果として以下のグループレコードを作成します。

例13.8 rfc2307_config_user_defined.yaml を使用して作成される OpenShift Container Platform Group

apiVersion: user.openshift.io/v1
kind: Group
metadata:
  annotations:
    openshift.io/ldap.sync-time: 2015-10-13T10:08:38-0400
    openshift.io/ldap.uid: cn=admins,ou=groups,dc=example,dc=com
    openshift.io/ldap.url: LDAP_SERVER_IP:389
  creationTimestamp:
  name: Administrators 1
users:
- jane.smith@example.com
- jim.adams@example.com
1
ユーザー定義の名前マッピングが指定するグループ名です。

13.5.2. ユーザー定義のエラートレランスに関する RFC 2307

デフォルトでは、同期されるグループにメンバークエリーで定義された範囲外にあるエントリーを持つメンバーが含まれる場合、グループ同期は以下のエラーを出して失敗します。

Error determining LDAP group membership for "<group>": membership lookup for user "<user>" in group "<group>" failed because of "search for entry with dn="<user-dn>" would search outside of the base dn specified (dn="<base-dn>")".

これは usersQuery フィールドの baseDN が間違って設定されていることを示していることがよくあります。ただし、baseDN にグループの一部のメンバーが意図的に含まれていない場合、tolerateMemberOutOfScopeErrors: true を設定することでグループ同期が継続されます。範囲外のメンバーは無視されます。

同様に、グループ同期プロセスでグループのメンバーの検出に失敗した場合、同期はエラーを出して失敗します。

Error determining LDAP group membership for "<group>": membership lookup for user "<user>" in group "<group>" failed because of "search for entry with base dn="<user-dn>" refers to a non-existent entry".

Error determining LDAP group membership for "<group>": membership lookup for user "<user>" in group "<group>" failed because of "search for entry with base dn="<user-dn>" and filter "<filter>" did not return any results".

これは、usersQuery フィールドが間違って設定されていることを示していることがよくあります。ただし、グループに欠落していると認識されているメンバーエントリーが含まれる場合、tolerateMemberNotFoundErrors: true を設定することでグループ同期が継続されます。問題のあるメンバーは無視されます。

警告

LDAP グループ同期のエラートレランスを有効にすると、同期プロセスは問題のあるメンバーエントリーを無視します。LDAP グループ同期が正しく設定されていない場合、同期された OpenShift Container Platform グループにメンバーが欠落する可能性があります。

例13.9 問題のあるグループメンバーシップに関する RFC 2307 スキーマを使用する LDAP エントリー: rfc2307_problematic_users.ldif

  dn: ou=users,dc=example,dc=com
  objectClass: organizationalUnit
  ou: users

  dn: cn=Jane,ou=users,dc=example,dc=com
  objectClass: person
  objectClass: organizationalPerson
  objectClass: inetOrgPerson
  cn: Jane
  sn: Smith
  displayName: Jane Smith
  mail: jane.smith@example.com

  dn: cn=Jim,ou=users,dc=example,dc=com
  objectClass: person
  objectClass: organizationalPerson
  objectClass: inetOrgPerson
  cn: Jim
  sn: Adams
  displayName: Jim Adams
  mail: jim.adams@example.com

  dn: ou=groups,dc=example,dc=com
  objectClass: organizationalUnit
  ou: groups

  dn: cn=admins,ou=groups,dc=example,dc=com
  objectClass: groupOfNames
  cn: admins
  owner: cn=admin,dc=example,dc=com
  description: System Administrators
  member: cn=Jane,ou=users,dc=example,dc=com
  member: cn=Jim,ou=users,dc=example,dc=com
  member: cn=INVALID,ou=users,dc=example,dc=com 1
  member: cn=Jim,ou=OUTOFSCOPE,dc=example,dc=com 2
1
LDAP サーバーに存在しないメンバーです。
2
存在する可能性はあるが、同期ジョブのユーザークエリーでは baseDN に存在しないメンバーです。

上記の例でエラーを許容するには、以下を同期設定ファイルに追加する必要があります。

例13.10 エラーを許容する RFC 2307 スキーマを使用した LDAP 同期設定: rfc2307_config_tolerating.yaml

kind: LDAPSyncConfig
apiVersion: v1
url: ldap://LDAP_SERVICE_IP:389
rfc2307:
    groupsQuery:
        baseDN: "ou=groups,dc=example,dc=com"
        scope: sub
        derefAliases: never
    groupUIDAttribute: dn
    groupNameAttributes: [ cn ]
    groupMembershipAttributes: [ member ]
    usersQuery:
        baseDN: "ou=users,dc=example,dc=com"
        scope: sub
        derefAliases: never
    userUIDAttribute: dn 1
    userNameAttributes: [ mail ]
    tolerateMemberNotFoundErrors: true 2
    tolerateMemberOutOfScopeErrors: true 3
2
true の場合、同期ジョブは一部のメンバーが見つからなかったグループを許容し、LDAP エントリーが見つからなかったメンバーは無視されます。グループのメンバーが見つからない場合、同期ジョブのデフォルト動作は失敗します。
3
true の場合、同期ジョブは、一部のメンバーが usersQuery ベース DN で指定されるユーザー範囲外にいるグループを許容し、メンバークエリー範囲外のメンバーは無視されます。グループのメンバーが範囲外の場合、同期ジョブのデフォルト動作は失敗します。
1
LDAP サーバーでユーザーを一意に識別する属性です。userUIDAttribute に DN を使用している場合は、usersQuery フィルターを指定できません。詳細のフィルターを実行するには、ホワイトリスト/ブラックリスト方法を使用します。

rfc2307_config_tolerating.yaml ファイルを使用して同期するには、以下を実行します。

$ oc adm groups sync --sync-config=rfc2307_config_tolerating.yaml --confirm

OpenShift Container Platform は、上記の同期操作の結果として以下のグループレコードを作成します。

例13.11 rfc2307_config.yaml を使用して作成される OpenShift Container Platform Group

apiVersion: user.openshift.io/v1
kind: Group
metadata:
  annotations:
    openshift.io/ldap.sync-time: 2015-10-13T10:08:38-0400
    openshift.io/ldap.uid: cn=admins,ou=groups,dc=example,dc=com
    openshift.io/ldap.url: LDAP_SERVER_IP:389
  creationTimestamp:
  name: admins
users: 1
- jane.smith@example.com
- jim.adams@example.com
1
同期ファイルで指定されるグループのメンバーのユーザーです。検索中に許容されるエラーがないメンバーです。

13.5.3. Active Directory

Active Directory スキーマでは、両方のユーザー (Jane と Jim) がファーストクラスエントリーとして LDAP サーバーに存在し、グループメンバーシップはユーザーの属性に保存されます。以下の ldif のスニペットでは、このスキーマのユーザーとグループを定義しています。

例13.12 Active Directory スキーマを使用する LDAP エントリー: active_directory.ldif

dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users

dn: cn=Jane,ou=users,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: testPerson
cn: Jane
sn: Smith
displayName: Jane Smith
mail: jane.smith@example.com
memberOf: admins 1

dn: cn=Jim,ou=users,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: testPerson
cn: Jim
sn: Adams
displayName: Jim Adams
mail: jim.adams@example.com
memberOf: admins
1
ユーザーのグループメンバーシップはユーザーの属性として一覧表示され、グループはサーバー上にエントリーとして存在しません。memberOf 属性はユーザーのリテラル属性である必要はありません。一部の LDAP サーバーでは、これは検索中に作成され、クライアントに返されますが、データベースにコミットされません。

このグループを同期するには、まず設定ファイルを作成する必要があります。Active Directory スキーマでは、ユーザーエントリーの LDAP クエリー定義と内部 OpenShift Container Platform Group レコードでそれらを表すのに使用する属性を指定する必要があります。

明確にするために、OpenShift Container Platform で作成したグループは (可能な場合) ユーザーまたは管理者に表示されるフィールドに識別名以外の属性を使用する必要があります。たとえば、メールによってグループのユーザーを識別しますが、LDAP サーバーのグループ名でグループの名前を定義します。以下の設定ファイルでは、このような関係を作成しています。

例13.13 Active Directory スキーマを使用する LDAP 同期設定: active_directory_config.yaml

kind: LDAPSyncConfig
apiVersion: v1
url: ldap://LDAP_SERVICE_IP:389
activeDirectory:
    usersQuery:
        baseDN: "ou=users,dc=example,dc=com"
        scope: sub
        derefAliases: never
        filter: (objectclass=inetOrgPerson)
        pageSize: 0
    userNameAttributes: [ mail ] 1
    groupMembershipAttributes: [ memberOf ] 2
1
OpenShift Container Platform Group レコードでユーザー名として使用される属性です。
2
メンバーシップ情報を保存するユーザーの属性です。

active_directory_config.yaml ファイルを使用して同期するには、以下を実行します。

$ oc adm groups sync --sync-config=active_directory_config.yaml --confirm

OpenShift Container Platform は、上記の同期操作の結果として以下のグループレコードを作成します。

例13.14 active_directory_config.yaml を使用して作成される OpenShift Container Platform Group

apiVersion: user.openshift.io/v1
kind: Group
metadata:
  annotations:
    openshift.io/ldap.sync-time: 2015-10-13T10:08:38-0400 1
    openshift.io/ldap.uid: admins 2
    openshift.io/ldap.url: LDAP_SERVER_IP:389 3
  creationTimestamp:
  name: admins 4
users: 5
- jane.smith@example.com
- jim.adams@example.com
1
このグループと LDAP サーバーが最後に同期された時間です。ISO 6801 形式を使用します。
2
LDAP サーバーのグループの固有識別子です。
3
このグループのレコードが保存される LDAP サーバーの IP アドレスとホストです。
4
LDAP サーバーに一覧表示されるグループ名です。
5
グループのメンバーのユーザーです。同期ファイルで指定される名前が使用されます。

13.5.4. 拡張された Active Directory

拡張された Active Directory スキーマでは、両方のユーザー (Jane と Jim) とグループがファーストクラスエントリーとして LDAP サーバーに存在し、グループメンバーシップはユーザーの属性に保存されます。以下の ldif のスニペットではこのスキーマのユーザーとグループを定義しています。

例13.15 拡張された Active Directory スキーマを使用する LDAP エントリー: augmented_active_directory.ldif

dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users

dn: cn=Jane,ou=users,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: testPerson
cn: Jane
sn: Smith
displayName: Jane Smith
mail: jane.smith@example.com
memberOf: cn=admins,ou=groups,dc=example,dc=com 1

dn: cn=Jim,ou=users,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: testPerson
cn: Jim
sn: Adams
displayName: Jim Adams
mail: jim.adams@example.com
memberOf: cn=admins,ou=groups,dc=example,dc=com

dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
ou: groups

dn: cn=admins,ou=groups,dc=example,dc=com 2
objectClass: groupOfNames
cn: admins
owner: cn=admin,dc=example,dc=com
description: System Administrators
member: cn=Jane,ou=users,dc=example,dc=com
member: cn=Jim,ou=users,dc=example,dc=com
1
ユーザーのグループメンバーシップはユーザーの属性として一覧表示されます。
2
このグループは LDAP サーバーのファーストクラスエントリーです。

このグループを同期するには、まず設定ファイルを作成する必要があります。拡張された Active Directory スキーマでは、ユーザーエントリーとグループエントリーの両方の LDAP クエリー定義と内部 OpenShift Container Platform Group レコードでそれらを表すのに使用する属性を指定する必要があります。

明確にするために、OpenShift Container Platform で作成するグループは (可能な場合) ユーザーまたは管理者に表示されるフィールドに識別名以外の属性を使用する必要があります。たとえば、メールによってグループのユーザーを識別し、一般名としてグループの名前を使用します。以下の設定ファイルではこのような関係を作成しています。

例13.16 拡張された Active Directory スキーマを使用する LDAP 同期設定: augmented_active_directory_config.yaml

kind: LDAPSyncConfig
apiVersion: v1
url: ldap://LDAP_SERVICE_IP:389
augmentedActiveDirectory:
    groupsQuery:
        baseDN: "ou=groups,dc=example,dc=com"
        scope: sub
        derefAliases: never
        pageSize: 0
    groupUIDAttribute: dn 1
    groupNameAttributes: [ cn ] 2
    usersQuery:
        baseDN: "ou=users,dc=example,dc=com"
        scope: sub
        derefAliases: never
        filter: (objectclass=inetOrgPerson)
        pageSize: 0
    userNameAttributes: [ mail ] 3
    groupMembershipAttributes: [ memberOf ] 4
1
LDAP サーバーのグループを一意に識別する属性です。groupUIDAttribute に DN を使用している場合、groupsQuery フィルターを指定できません。詳細なフィルターを実行するには、ホワイトリスト/ブラックリスト方法を使用します。
2
Group の名前として使用する属性です。
3
OpenShift Container Platform Group レコードでユーザー名として使用される属性です。
4
メンバーシップ情報を保存するユーザーの属性です。

augmented_active_directory_config.yaml ファイルを使用して同期するには、以下を実行します。

$ oc adm groups sync --sync-config=augmented_active_directory_config.yaml --confirm

OpenShift Container Platform は、上記の同期操作の結果として以下のグループレコードを作成します。

例13.17 augmented_active_directory_config.yaml を使用して作成される OpenShift Group

apiVersion: user.openshift.io/v1
kind: Group
metadata:
  annotations:
    openshift.io/ldap.sync-time: 2015-10-13T10:08:38-0400 1
    openshift.io/ldap.uid: cn=admins,ou=groups,dc=example,dc=com 2
    openshift.io/ldap.url: LDAP_SERVER_IP:389 3
  creationTimestamp:
  name: admins 4
users: 5
- jane.smith@example.com
- jim.adams@example.com
1
このグループと LDAP サーバーが最後に同期された時間です。ISO 6801 形式を使用します。
2
LDAP サーバーのグループの固有識別子です。
3
このグループのレコードが保存される LDAP サーバーの IP アドレスとホストです。
4
同期ファイルが指定するグループ名です。
5
グループのメンバーのユーザーです。同期ファイルで指定される名前が使用されます。

13.6. ネスト化されたメンバーシップ同期の例

OpenShift Container Platform の Group はネスト化しません。LDAP サーバーはデータが使用される前にグループメンバーシップを平坦化する必要があります。Microsoft の Active Directory Server は、LDAP_MATCHING_RULE_IN_CHAIN ルールによりこの機能をサポートしており、これには OID 1.2.840.113556.1.4.1941 が設定されています。さらに、このマッチングルールを使用すると、明示的にホワイトリスト化されたグループのみを同期できます。

このセクションでは、拡張された Active Directory スキーマの例を取り上げ、1 名のユーザー Jane と 1 つのグループ otheradmins をメンバーとして持つ admins というグループを同期します。otheradmins グループには 1 名のユーザーメンバー Jim が含まれます。この例では以下のことを説明しています。

  • グループとユーザーが LDAP サーバーに追加される方法。
  • LDAP 同期設定ファイルの概観。
  • 同期後に生成される OpenShift Container Platform の Group レコード。

拡張された Active Directory スキーマでは、ユーザー (JaneJim) とグループの両方がファーストクラスエントリーとして LDAP サーバーに存在し、グループメンバーシップはユーザーまたはグループの属性に保存されます。以下の ldif のスニペットはこのスキーマのユーザーとグループを定義します。

ネスト化されたメンバーを持つ拡張された Active Directory スキーマを使用する LDAP エントリー: augmented_active_directory_nested.ldif

dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users

dn: cn=Jane,ou=users,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: testPerson
cn: Jane
sn: Smith
displayName: Jane Smith
mail: jane.smith@example.com
memberOf: cn=admins,ou=groups,dc=example,dc=com 1

dn: cn=Jim,ou=users,dc=example,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: testPerson
cn: Jim
sn: Adams
displayName: Jim Adams
mail: jim.adams@example.com
memberOf: cn=otheradmins,ou=groups,dc=example,dc=com 2

dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
ou: groups

dn: cn=admins,ou=groups,dc=example,dc=com 3
objectClass: group
cn: admins
owner: cn=admin,dc=example,dc=com
description: System Administrators
member: cn=Jane,ou=users,dc=example,dc=com
member: cn=otheradmins,ou=groups,dc=example,dc=com

dn: cn=otheradmins,ou=groups,dc=example,dc=com 4
objectClass: group
cn: otheradmins
owner: cn=admin,dc=example,dc=com
description: Other System Administrators
memberOf: cn=admins,ou=groups,dc=example,dc=com 5 6
member: cn=Jim,ou=users,dc=example,dc=com

1 2 5
ユーザーとグループのメンバーシップはオブジェクトの属性として一覧表示されます。
3 4
このグループは LDAP サーバーのファーストクラスエントリーです。
6
otheradmins グループは admins グループのメンバーです。

Active Directory を使用してネスト化されたグループを同期するには、ユーザーエントリーとグループエントリーの両方の LDAP クエリー定義と内部 OpenShift Container Platform Group レコードでそれらを表すのに使用する属性を指定する必要があります。さらに、この設定では特定の変更が必要となります。

  • oc adm groups sync コマンドはグループを明示的にホワイトリスト化する必要があります。
  • ユーザーの groupMembershipAttributes には "memberOf:1.2.840.113556.1.4.1941:" を含め、LDAP_MATCHING_RULE_IN_CHAIN ルールに従う必要があります。
  • groupUIDAttributedn に設定される必要があります。
  • groupsQuery:

    • filter を設定しないでください。
    • 有効な derefAliases を設定する必要があります。
    • baseDN を設定しないでください。この値は無視されます。
    • scope を設定しないでください。この値は無視されます。

明確にするために、OpenShift Container Platform で作成するグループは (可能な場合) ユーザーまたは管理者に表示されるフィールドに識別名以外の属性を使用する必要があります。たとえば、メールによってグループのユーザーを識別し、一般名としてグループの名前を使用します。以下の設定ファイルではこれらの関係を作成しています。

ネスト化されたメンバーを持つ拡張された Active Directory スキーマを使用する LDAP 同期設定: augmented_active_directory_config_nested.yaml

kind: LDAPSyncConfig
apiVersion: v1
url: ldap://LDAP_SERVICE_IP:389
augmentedActiveDirectory:
    groupsQuery: 1
        derefAliases: never
        pageSize: 0
    groupUIDAttribute: dn 2
    groupNameAttributes: [ cn ] 3
    usersQuery:
        baseDN: "ou=users,dc=example,dc=com"
        scope: sub
        derefAliases: never
        filter: (objectclass=inetOrgPerson)
        pageSize: 0
    userNameAttributes: [ mail ] 4
    groupMembershipAttributes: [ "memberOf:1.2.840.113556.1.4.1941:" ] 5

1
groupsQuery フィルターは指定できません。groupsQuery ベース DN とスコープ値は無視されます。groupsQuery は有効な derefAliases を設定する必要があります。
2
LDAP サーバーのグループを一意に識別する属性です。dn に設定される必要があります。
3
Group の名前として使用する属性です。
4
OpenShift Container Platform Group レコードでユーザー名として使用される属性です。mail または sAMAccountName がほとんどのインストールで推奨されます。
5
メンバーシップ情報を保存するユーザーの属性です。LDAP_MATCHING_RULE_IN_CHAIN を使用することに注意してください。

augmented_active_directory_config_nested.yaml ファイルを使用して同期するには、以下を実行します。

$ oc adm groups sync \
    'cn=admins,ou=groups,dc=example,dc=com' \
    --sync-config=augmented_active_directory_config_nested.yaml \
    --confirm
注記

cn=admins,ou=groups,dc=example,dc=com グループを明示的にホワイトリスト化する必要があります。

OpenShift Container Platform は、上記の同期操作の結果として以下のグループレコードを作成します。

augmented_active_directory_config_nested.yaml を使用して作成される OpenShift Group

apiVersion: user.openshift.io/v1
kind: Group
metadata:
  annotations:
    openshift.io/ldap.sync-time: 2015-10-13T10:08:38-0400 1
    openshift.io/ldap.uid: cn=admins,ou=groups,dc=example,dc=com 2
    openshift.io/ldap.url: LDAP_SERVER_IP:389 3
  creationTimestamp:
  name: admins 4
users: 5
- jane.smith@example.com
- jim.adams@example.com

1
このグループと LDAP サーバーが最後に同期された時間です。ISO 6801 形式を使用します。
2
LDAP サーバーのグループの固有識別子です。
3
このグループのレコードが保存される LDAP サーバーの IP アドレスとホストです。
4
同期ファイルが指定するグループ名です。
5
同期ファイルで指定されるように名前が付けられる Group のメンバーのユーザーです。グループメンバーシップは Microsoft Active Directory Server によって平坦化されているため、ネスト化されたグループのメンバーが含まれることに注意してください。

13.7. LDAP 同期設定の仕様

設定ファイルのオブジェクト仕様は以下で説明されています。スキーマオブジェクトにはそれぞれのフィールドがあることに注意してください。たとえば、v1.ActiveDirectoryConfiggroupsQuery フィールドを持ちませんが、v1.RFC2307Configv1.AugmentedActiveDirectoryConfig の両方にこのフィールドがあります。

重要

バイナリー属性はサポートされていません。LDAP サーバーの全属性データは、UTF-8 エンコード文字列の形式である必要があります。たとえば、ID 属性として、バイナリー属性を使用することはできません (例: objectGUID)。代わりに sAMAccountName または userPrincipalName などの文字列属性を使用する必要があります。

13.7.1. v1.LDAPSyncConfig

LDAPSyncConfig は、LDAP グループ同期を定義するために必要な設定オプションを保持します。

名前説明スキーマ

kind

このオブジェクトが表す REST リソースを表す文字列の値です。サーバーはクライアントが要求を送信するエンドポイントからこれを推測できることがあります。これを更新することはできません。CamelCase。詳細については、https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#types-kinds を参照してください。

文字列

apiVersion

オブジェクトのこの表現のバージョンスキーマを定義します。サーバーは認識されたスキーマを最新の内部値に変換し、認識されない値は拒否することがあります。詳細については、https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#resources を参照してください。

文字列

url

ホストは接続先の LDAP サーバーのスキーム、ホストおよびポートになります。 scheme://host:port

文字列

bindDN

LDAP サーバーをバインドする任意の DN です。

文字列

bindPassword

検索フェーズでバインドする任意のパスワードです。

v1.StringSource

insecure

true の場合、接続に TLS を使用しないでください。ldaps:// の URL スキームで true に設定することはできません。false の場合、ldaps:// URL は TLS を使用して接続し、ldap:// URL は、https://tools.ietf.org/html/rfc2830 で指定されるように StartTLS を使用して TLS 接続にアップグレードされます。

ブール値

ca

サーバーへ要求を行う際に使用する任意の信頼された認証局バンドルです。空の場合は、デフォルトのシステムルートが使用されます。

文字列

groupUIDNameMapping

LDAP グループ UID の OpenShift Container Platform Group 名への任意の直接マッピングです。

object

rfc2307

RFC2307 と同じ方法でセットアップされた LDAP サーバーからデータを抽出するための設定を保持します。ファーストクラスグループとユーザーエントリーを抽出し、グループメンバーシップはメンバーを一覧表示するグループエントリーの複数値の属性によって決定されます。

v1.RFC2307Config

activeDirectory

Active Directory に使用されるのと同じ方法でセットアップされた LDAP サーバーからデータを抽出するための設定を保持します。ファーストクラスユーザーエントリーを抽出し、グループメンバーシップはメンバーが属するグループを一覧表示するメンバーの複数値の属性によって決定されます。

v1.ActiveDirectoryConfig

augmentedActiveDirectory

上記の Active Directory で使用されるのと同じ方法でセットアップされた LDAP サーバーからデータを抽出するための設定を保持します。1 つの追加として、ファーストクラスグループエントリーが存在し、それらはメタデータを保持するために使用されますが、グループメンバーシップは設定されません。

v1.AugmentedActiveDirectoryConfig

13.7.2. v1.StringSource

StringSource によって文字列インラインを指定できます。または環境変数またはファイルを使用して外部から指定することもできます。文字列の値のみを含む場合、単純な JSON 文字列にマーシャルします。

名前説明スキーマ

value

クリアテキスト値、または keyFile が指定されている場合は暗号化された値を指定します。

文字列

env

クリアテキスト値、または keyFile が指定されている場合は暗号化された値を含む環境変数を指定します。

文字列

file

クリアテキスト値、または keyFile が指定されている場合は暗号化された値を含むファイルを参照します。

文字列

keyFile

値を復号化するために使用するキーを含むファイルを参照します。

文字列

13.7.3. v1.LDAPQuery

LDAPQuery は LDAP クエリーの作成に必要なオプションを保持します。

名前説明スキーマ

baseDN

すべての検索が開始されるディレクトリーのブランチの DN です。

文字列

scope

検索の (任意の) 範囲です。base (ベースオブジェクトのみ)、one (ベースレベルのすべてのオブジェクト)、sub (サブツリー全体) のいずれかになります。設定されていない場合は、デフォルトで sub になります。

文字列

derefAliases

エイリアスに関する検索の (任意の) 動作です。never (エイリアスを逆参照しない)、search (検索中の逆参照のみ)、base (ベースオブジェクト検索時の逆参照のみ)、always (常に逆参照を行う) のいずれかになります。設定されていない場合、デフォルトで always になります。

文字列

timeout

応答の待機を中止するまでにサーバーへの要求を未処理のままにする時間制限 (秒単位) を保持します。これが 0 の場合、クライアント側の制限が設定されないことになります。

整数

filter

ベース DN を持つ LDAP サーバーから関連するすべてのエントリーを取得する有効な LDAP 検索フィルターです。

文字列

pageSize

LDAP エントリーで測定される、推奨される最大ページサイズです。ページサイズ 0 はページングが実行されないことを意味します。

整数

13.7.4. v1.RFC2307Config

RFC2307Config は、RFC2307 スキーマを使用してどのように LDAP グループ同期が LDAP サーバーに相互作用するかを定義するために必要な設定オプションを保持します。

名前説明スキーマ

groupsQuery

グループエントリーを返す LDAP クエリーのテンプレートを保持します。

v1.LDAPQuery

groupUIDAttribute

LDAP グループエントリーのどの属性が固有の識別子として解釈されるかを定義します。(ldapGroupUID)

文字列

groupNameAttributes

LDAP グループエントリーのどの属性が OpenShift Container Platform グループに使用する名前として解釈されるかを定義します。

文字列の配列

groupMembershipAttributes

LDAP グループエントリーのどの属性がメンバーとして解釈されるかを定義します。それらの属性に含まれる値は UserUIDAttribute でクエリーできる必要があります。

文字列の配列

usersQuery

ユーザーエントリーを返す LDAP クエリーのテンプレートを保持します。

v1.LDAPQuery

userUIDAttribute

LDAP ユーザーエントリーのどの属性が固有の識別子として解釈されるかを定義します。GroupMembershipAttributes で検出される値に対応している必要があります。

文字列

userNameAttributes

LDAP ユーザーエントリーのどの属性が順番に OpenShift Container Platform ユーザー名として使われるかを定義します。空でない値を持つ最初の属性が使用されます。これは LDAPPasswordIdentityProviderPreferredUsername 設定と一致している必要があります。OpenShift Container Platform Group レコードでユーザーの名前として使用する属性です。ほとんどのインストールで、mail または sAMAccountName を選択することが推奨されます。

文字列の配列

tolerateMemberNotFoundErrors

ユーザーエントリーがない場合の LDAP 同期ジョブの動作を決定します。true の場合、何も検出しない ユーザーの LDAP クエリーは許容され、エラーのみがログに記録されます。false の場合、ユーザーのクエリーが何も検出しないと、LDAP 同期ジョブは失敗します。デフォルトの値は「false」です。「true」に設定されたこのフラグを持つ LDAP 同期ジョブの設定が間違っていると、グループメンバーシップが削除されることがあるため、注意してこのフラグを使用してください。

ブール値

tolerateMemberOutOfScopeErrors

範囲外のユーザーエントリーが検出される場合の LDAP 同期ジョブの動作を決定します。true の場合、すべてのユーザークエリーに指定されるベース DN 外のユーザーの LDAP クエリーは許容され、エラーのみがログに記録されます。false の場合、ユーザークエリーですべてのユーザークエリーで指定されるベース DN 外を検索すると LDAP 同期ジョブは失敗します。このフラグを true に設定した LDAP 同期ジョブの設定が間違っていると、ユーザーのいないグループが発生することがあるため、注意してこのフラグを使用してください。

ブール値

13.7.5. v1.ActiveDirectoryConfig

ActiveDirectoryConfig は必要な設定オプションを保持し、どのように LDAP グループ同期が Active Directory スキーマを使用して LDAP サーバーと相互作用するかを定義します。

名前説明スキーマ

usersQuery

ユーザーエントリーを返す LDAP クエリーのテンプレートを保持します。

v1.LDAPQuery

userNameAttributes

LDAP ユーザーエントリーのどの属性が OpenShift Container Platform ユーザー名として解釈されるかを定義します。OpenShift Container Platform Group レコードでユーザーの名前として使用する属性。ほとんどのインストールで、mail または sAMAccountName を選択することが推奨されています。

文字列の配列

groupMembershipAttributes

LDAP ユーザーのどの属性がメンバーの属するグループとして解釈されるかを定義します。

文字列の配列

13.7.6. v1.AugmentedActiveDirectoryConfig

AugmentedActiveDirectoryConfig は必要な設定オプションを保持し、どのように LDAP グループ同期が拡張された Active Directory スキーマを使用して LDAP サーバーに相互作用するかを定義します。

名前説明スキーマ

usersQuery

ユーザーエントリーを返す LDAP クエリーのテンプレートを保持します。

v1.LDAPQuery

userNameAttributes

LDAP ユーザーエントリーのどの属性が OpenShift Container Platform ユーザー名として解釈されるかを定義します。OpenShift Container Platform Group レコードでユーザーの名前として使用する属性。ほとんどのインストールで、mail または sAMAccountName を選択することが推奨されています。

文字列の配列

groupMembershipAttributes

LDAP ユーザーのどの属性がメンバーの属するグループとして解釈されるかを定義します。

文字列の配列

groupsQuery

グループエントリーを返す LDAP クエリーのテンプレートを保持します。

v1.LDAPQuery

groupUIDAttribute

LDAP グループエントリーのどの属性が固有の識別子として解釈されるかを定義します。(ldapGroupUID)

文字列

groupNameAttributes

LDAP グループエントリーのどの属性が OpenShift Container Platform グループに使用する名前として解釈されるかを定義します。

文字列の配列

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

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

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

会社概要

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

© 2024 Red Hat, Inc.