14 Oracle Unified Directoryのインストールおよび構成

Kubernetesクラスタ内に、可用性の高い新しいOracle Unified Directory (OUD)デプロイメントを作成します。

この章の内容は次のとおりです。

Oracle Unified Directoryの構成

Oracle Unified DirectoryはLDAP準拠ディレクトリで、スタンドアロン・エンティティとして使用することも、他のOracle Identity and Access Managementコンポーネントとともに使用することもできます。

この章では、Oracle Unified DirectoryをKubernetesクラスタ内にインストールする方法について説明します。また、他のOracle Identity and Access Managerコンポーネントに必要なデータをディレクトリにシードする方法についても説明します。

OUDをデプロイした後で、OUDポッドが実行されているKubernetesノードがポッド退避タイムアウト後に停止した場合、ポッドは退避されずに「終了中」状態に移行します。その後、ポッドはいつまでもその状態のままになります。この問題を回避するために、OUDデプロイメント・プロセス中に、「終了中」状態のポッドがないか確認し、それらを削除してからポッドを再起動するcronジョブが作成されます。cronジョブは、hub.docker.com上のイメージにアクセスできる必要があります。したがって、これらのイメージにアクセスできるようにするためのKubernetesシークレットを作成する必要があります。

このジョブによって、helm構成ファイルで指定した数のOUDインスタンスが常に実行されるようになります。

ノート:

  • コンテナをアップグレードする場合は、helmチャートを永続ボリュームに再コピーする必要があります。
  • Helm/Kubernetesバージョンを変更する場合は、helmファイルを改訂バージョンで更新する必要があります。

サイズ設定のガイドライン

OUDをデプロイする際は、次の情報を参照して、初期のシステム・サイズを設定できます。サイズ設定の詳細は、Oracle Unified Directory 12.2.1.4.0のパフォーマンスの詳細を参照してください。

システム・サイズ ユーザー数 メモリー JVMヒープ・サイズ(最小) JVMヒープ・サイズ(最大)
開発 - 2GB 1GB 2GB
小規模 5000 8GB 4GB 8GB
中規模 50000 16GB 8GB 16GB
大規模 200万 64GB 16GB 64GB

Kubernetes/イングレス・サービス

OUDを構成すると、各ワーカー・ノードで次のOUDサービスが使用可能になります:

表14-1 各ワーカー・ノードのOUDサービス

サービス タイプ サービス・ポート マップ済ポート

OUD LDAP

NodePort

31389

1389

OUD LDAPS

NodePort

31636

636

OUD ADMIN

NodePort

30777

80

ノート:

OUDは、独自のKubernetesサービス・ポートをランダムに選択します。この表に示されている番号は、単なる例です。

この章で使用される変数

この章の以降の項では、多数のファイルを作成する手順について説明します。これらのサンプル・ファイルには、デプロイメントに適用可能な値に置換する必要がある変数が含まれています。

変数の形式は<VARIABLE_NAME>です。次の表に、これらの各変数に設定する必要がある値を示します。

表14-2 変更する必要がある変数

変数 サンプル値 説明

<WORKDIR>

/workdir/OUD

OUDの作業ディレクトリを作成する場所。

<REGISTRY_ADDRESS>

iad.ocir.io/<mytenancy>

レジストリの場所。Oracleコンテナ・レジストリを使用する場合、値はcontainer-registry.oracle.com/middleware/oud_cpuになります。

<REG_USER>

mytenancy/oracleidentitycloudservice/myemail@email.com

レジストリへのログインに使用するユーザーID。Oracleコンテナ・レジストリを使用する場合、この値はOracleシングル・サインオン・ユーザー名になります。

<REG_PWD>

<password>

レジストリ・ユーザー・パスワード。

<OUD_REPOSITORY>

oracle/oud

local/oracle/oud

container-registry.oracle.com/middleware/oud_cpu

<REGISTRY_ADDRESS>/oracle/oud

OUDソフトウェア・リポジトリの名前。

コンテナ・イメージをダウンロードしてステージングした場合、この値はoracle/oudになります。OLCNEを使用している場合、値はlocal/oracle/oudになります。

Oracleコンテナ・レジストリを使用している場合、値はcontainer-registry.oracle.com/middleware/oud_cpuになります。

コンテナ・レジストリを使用している場合、値は製品名を含むレジストリの名前になります: <REGISTRY_ADDRESS>/oracle/oud

<OUD_VER>

12.2.1.4-jdk8-ol7-220411.1613または最新のもの

使用するイメージのバージョン。これは、ダウンロードしてローカルまたはコンテナ・レジストリにステージングしたバージョンです。

<DH_USER>

username

hub.docker.comのDockerユーザー名。CronJobイメージに使用されます。

<DH_PWD>

mypassword

hub.docker.comのDockerパスワード。CronJobイメージに使用されます。

<OUDNS>

oudns

OUDネームスペースの名前。

<PVSERVER>

mynfsserver.example.com

NFSサーバーの名前。

ノート: この名前は、Kubernetesクラスタ内で解決可能である必要があります。

<OUD_SHARE>

/exports/IAMPVS/oudpv

OUD永続ボリュームのNFSマウント・ポイント。

<OUD_CONFIG_SHARE>

/exports/IAMPVS/oudconfigpv

OUD構成永続ボリュームのNFSマウント・ポイント。

<OUD_LOCAL_SHARE>

/nfs_volumes/oudconfigpv

<OUD_CONFIG_SHARE>がマウントされるローカル・ディレクトリ。シード・ファイルを保持するために使用されます。

<LDAP_SEARCHBASE>

dc=example,dc=com

組織のディレクトリ・ツリー。これは、すべてのデータが格納される場所です。

<LDAP_GROUP_SEARCHBASE>

cn=Groups,dc=example,dc=com

グループ/ロールが格納されるディレクトリ内の場所。

<LDAP_USER_SEARCHBASE>

cn=Users,dc=example,dc=com

ユーザーの名前が格納されるディレクトリ内の場所。

<LDAP_RESERVE_SEARCHBASE>

cn=Reserve,dc=example,dc=com

これをOIGの予約コンテナの名前に設定します。レガシー用に維持されています。

<LDAP_ADMIN_USER>

cn=oudadmin

ディレクトリ管理者のユーザー名。

<LDAP_ADMIN_PWD>

password

ディレクトリ管理者のパスワード。

<LDAP_OAMLDAP_USER>

oamLDAP

OAMがディレクトリに接続してログインを検証するために使用するユーザーの名前。

<LDAP_OIGLDAP_USER>

oimLDAP

OIGがディレクトリに接続してユーザーを管理するために使用するユーザーの名前。

<LDAP_OAMADMIN_USER>

oamadmin

OAMの管理に使用するユーザーの名前。

<LDAP_WLSADMIN_USER>

weblogic_iam

ドメインの管理に使用するユーザーの名前。

<LDAP_XELSYSADM_USER>

xelsysadm

OIGの管理のために作成するユーザーの名前。

<LDAP_USER_PWD>

<password>

作成するユーザー名に割り当てるパスワード。Kubernetes上のIDMは、これをアカウントごとに同じであると想定します。これは、デプロイメント後、必要に応じて別の値に変更できます。

<LDAP_OIGADMIN_GRP>

OIMAdministrators

OIGの管理者の名前で構成されているグループの名前。

<LDAP_WLSADMIN_GRP>

WLSAdministrators

このロールに割り当てられたユーザーは、WebLogic管理コンソールおよびFMW Controlにログインできます。

<LDAP_OAMADMIN_GRP>

OAMAdministrators

このロールに割り当てられたユーザーは、OAM管理コンソールにログインしてOAMを構成できます。

<LDAP_SYSTEMIDS>

systemids

システムIDを格納するコンテナの名前。このコンテナに配置されたユーザー名は、OIMリコンシリエーションまたはパスワード・エージングの対象ではありません。このコンテナは、<LDAP_OAMLDAP_USER>や<LDAP_OIGLDAP_USER>などのユーザー用に予約されています。

<OUD_PWD_EXPIRY>

2024-01-02

ユーザー・アカウントのパスワードの期限が切れる日付。日付はYYYY-MM-DD形式にする必要があります。

<OUD_LDAP_K8>

31389

OUD LDAPリクエストに使用するポート。

ノート: この値は、Kubernetesサービス・ポートの範囲内である必要があります。

<OUD_LDAPS_K8>

31636

OUD LDAPSリクエストに使用するポート。

ノート: この値は、Kubernetesサービス・ポートの範囲内である必要があります。

<OUD_PREFIX>

edg

<OUD_REPLICAS>

1

作成するOUDレプリカ・インスタンスの数。

<REGION>

example

これは、トップ・レベル・リージョンで、通常は検索ベースの最初の部分です。

<HELM_VER>

-

実行しているHelmのバージョン。これは、コマンドhelm version --shortを使用して取得できます

最初の3つの索引のみが必要です。例: 3.5.4

<KUBERNETES_VER>

-

実行しているKubernetesのバージョン。これは、コマンドkubectl version --short=true | grep Serverを使用して取得できます。

最初の3つの索引のみが必要です。例: 1.20.6

<ELK_HOST>

https://elasticsearch-es-http.elkns.svc:9200

集中管理型のElasticsearchデプロイメントのホストおよびポート。このホストは、Kubernetesクラスタの中と外のどちらでもかまいません。このホストは、Elasticsearchが使用されている場合にのみ使用されます。

<ELK_VER>

8.11.0

使用するElasticsearchのバージョン。

<ELK_USER_PWD>

<password>

ELKユーザーに割り当てられたパスワード。「Logstash用のロールおよびユーザーの作成」を参照してください。

製品固有の作業ディレクトリの設定

インストールを開始する前に、Oracle Unified Directory Service Managerコンテナ・イメージをダウンロードしてステージングしておくか、Oracle Container Registryおよびコード・リポジトリを使用している必要があります。

「エンタープライズ・デプロイメント用のソフトウェア・ディストリビューションの特定と取得」を参照してください。この項では、ダウンロードしたサンプル・デプロイメント・スクリプトをOUDの一時作業ディレクトリにコピーする手順について説明します。

  1. インストール・ユーザーとして一時作業ディレクトリを作成します。インストール・ユーザーには、Kubernetesクラスタへのkubectlアクセス権が必要です。
    mkdir <WORKDIR>
    たとえば:
    mkdir /workdir/OUD
  2. ディレクトリをこの場所に変更します:
    cd /workdir/OUD

    ノート:

    このガイドでは、複数の製品で同じサンプル・ファイル・セットが使用されています。毎回ダウンロードする必要がないように、ファイルは製品固有でない作業ディレクトリにステージングされます。
  3. サンプル・スクリプトを作業ディレクトリにコピーします。
    cp -R <work_dir>/fmw-kubernetes/OracleUnifiedDirectory /<WORKDIR>/samples
    たとえば:
    cp -R /workdir/fmw-kubernetes/OracleUnifiedDirectory /workdir/OUD/samples

Oracle Unified Directoryのデプロイについて

Helmを使用してOracle Unified Directory (OUD)を作成および構成することをお薦めします。

OUDをデプロイするには:
  • 複数のOUDサーバーをデプロイし、それらのコンテナ間のレプリケーションを設定します(高可用性を実現するには複数のコンテナを用意する必要があります)。
  • Kubernetesクラスタ外部のOUDディレクトリへのアクセスが必要な場合は、NodePortサービスまたはイングレス・サービスを作成します。
  • Oracle Identity and Access ManagementをサポートするようにOUDを構成します。

従来、Oracle Identity and Access ManagementをサポートするようにOUDを構成するプロセスは、Oracle Identity and Access Managementツール'idmConfigTool'を使用して実行されていました。このツールは、OUDをインストールおよび構成して、OAMまたはOIGをデプロイした後に使用されます。ディレクトリを準備およびシードする従来の方法を使用する場合、このオプションを使用できますが、このガイドでは説明しません。

idmConfigToolを使用してOUDを構成する方法の詳細は、「既存LDAPディレクトリの準備」を参照してください。

OUDを構成する従来の方法には、次のステップが含まれます:

  • OUDをデプロイします。
  • OAMまたはOIGをデプロイします。
  • OAM/OIGコンテナにログインします。
  • idmConfigToolコマンドを実行します。「既存LDAPディレクトリの準備」を参照してください。

このガイドで説明する方法は、シード・データ・ファイルを作成し、それをOUD作成プロセスへの入力として提供することです。

Kubernetesネームスペースの作成

Oracle Unified Directoryのすべてのオブジェクトを含むネームスペースを作成する必要があります。

ネームスペースを作成するには、次のコマンドを実行します:
kubectl create namespace oudns
出力が次のように表示されます。
namespace/oudns created

コンテナ・レジストリ・シークレットの作成

コンテナ・レジストリを使用することをお薦めします。コンテナ・レジストリを使用して、オンデマンドでOracleコンテナ・イメージをプルする場合は、コンテナ・レジストリのログイン詳細を含むシークレットを作成する必要があります。

コンテナ・イメージをローカルにステージングした場合は、このステップを実行する必要はありません。

コンテナ・レジストリ・シークレットを作成するには、次のコマンドを使用します:
kubectl create secret -n <OUDNS> docker-registry regcred --docker-server=<REGISTRY_ADDRESS> --docker-username=<REG_USER> --docker-password=<REG_PWD>
たとえば:
kubectl create secret -n oudns docker-registry regcred --docker-server=iad.ocir.io/mytenancy --docker-username=mytenancy/oracleidentitycloudservice/myemail@email.com --docker-password=<password>

Docker HubイメージのKubernetesシークレットの作成

このシークレットを使用すると、Kubernetesはhelmkubectllogstashなど、サードパーティのイメージを含むhub.docker.comからイメージをプルできます。これらのコマンドは、OUD cronジョブで、「終了中」状態から動かないポッドをテストし、必要に応じて再起動するために使用されます。

ノート:

独自のコンテナ・レジストリからイメージをプルする場合、このステップは必要ありません。

hub.docker.comにアカウントが必要です。イメージを独自のリポジトリにステージングする場合は、それを実行し、helmオーバーライド・ファイルを適宜変更できます。

hub.docker.comにKubernetesシークレットを作成するには、次のコマンドを使用します:

$ kubectl create secret docker-registry dockercred --docker-server="https://index.docker.io/v1/" --docker-username="<DH_USER>" --docker-password="<DH_PWD>" --namespace=<OUDNS>
たとえば:
$ kubectl create secret docker-registry dockercred --docker-server="https://index.docker.io/v1/" --docker-username="username" --docker-password="<mypassword>" --namespace=oudns

構成ファイルの作成

OUDのデプロイメントを開始する前に、一連の構成ファイルを作成する必要があります。これらのファイルは、OAMとOIGで必要なデータを構成およびシードするために使用されます。

ファイルのエントリは、エンタープライズ・デプロイメント・ガイドの標準の命名規則に基づいています。これらのエントリに代替名を使用する場合は、組織の要件に従ってファイルを編集します。

スキーマ拡張ファイルの作成

このファイルは、Oracle Access Managerオブジェクト・クラスでOUDスキーマを拡張するために使用されます。Oracle Access Managerをデプロイしない場合は、この項をスキップできます。

「スキーマ拡張ファイルのサンプル」に示されている内容を含む99-user.ldifファイルを作成します。

すべての情報は同じままにする必要があります。Oracle Access Managerを使用する予定がない場合、このファイルは必要ありません。

シード・ファイルの作成

このファイルは、Oracle Access ManagerとOracle Identity Governanceで必要とされるユーザーおよびグループの名前でOUDをシードするために使用されます。

「シード・ファイルのサンプル」に示されている内容を含むbase.ldifというファイルを作成します。

このファイルでグローバル検索および置換を実行して、組織に固有のものにする必要があります。作業を容易にするため、サンプル・ファイルには、変更する必要があるエントリを識別できるようにいくつかの変数が挿入されています。各変数は'<>'で囲まれています。使用される変数のリストは、「この章で使用される変数」を参照してください。

ノート:

このファイルには、Oracle Access ManagerとOracle Identity Governanceのすべてのエントリが含まれています。これらの製品をデプロイしない場合は、要件に従ってこのファイルを修正できます。ここでは、一例として、完全なスイートのデプロイメントをより単純なものにしています。

グローバル検索および置換を実行して、これらのエントリを変更してください。

ノート:

次の変数の値は変更しないでください:
  • <DenySSORead ACI>
  • <AllowSSORead ACI>
  • <AllowSSOAll ACI>

パスワードの設定

LDAP属性userPasswordの値を指定して、ファイルにユーザー・パスワードを設定できます。

プレーン・テキストとして入力されたパスワードは、ロード時に暗号化されます。作業を容易にするため、指定する必要のあるエントリとして、ファイルで<PASSWORD>という用語を検索できます。

OUDコンテナの作成

最初にサーバー・オーバーライド・ファイルを作成し、次にHelmコマンドを使用してOUDコンテナを作成します。

サーバー・オーバーライド・ファイルの作成

OUDコンテナは、Helmを使用してデプロイされます。デプロイメントのニーズに基づいてデプロイメントをカスタマイズするには、helmオーバーライド・ファイルを作成する必要があります。このファイルは、OUDポッドの作成方法の決定に使用されます。このファイルには、次の詳細を指定できます:
  • 使用するコンテナ・イメージ。
  • 作成するレプリカの数。
  • 各ポッドに割り当てるリソースの数。
  • 作成するベースDN。
  • OUDデータをシードするためにロードするldifファイル。
  • スキーマ拡張を作成するためのldifファイル。
  • 作成するアクセス制御リスト(ACL)。
  • 各ポッド(ベースおよびレプリカ)に作成する必要がある索引。
  • ポッドをインスタンス化する際に実行する特定のds_configコマンド。

表14-2の値を代入して、このファイルを作成します。

次に、OUDのサンプル・オーバーライド・ファイルを示します。

/workdir/OUD/override_oud.yaml

ノート:

このファイルのサンプルと、GitHubからダウンロードしたサンプル・ファイルがあります。これらは、/workdir/fmw-kubernetes/FMWKubernetesMAA/OracleEnterpriseDeploymentAutomation/OracleIdentityManagement/templates/oudにあります。
リソース制限は、各ポッドに許可される最大リソースとして定義されます:
  • cpuは、CPUコアで測定されます。値が1の場合は、1CPUコアまたは1仮想コアです。
  • memoryは、標準単位1G = 1GBで測定されます。
resourcesは、ポッドに追加される初期起動値です:
  • cpuは、CPUサイクルで測定されます。値が1000mの場合は、1CPUコアまたは1仮想コアです。
  • memoryは、標準単位1G = 1GBで測定されます。

サーバーのチューニング値が、これらの値と競合しないようにする必要があります。

image:
  repository: <OUD_REPOSITORY>
  tag: <OUD_VER>
  pullPolicy: IfNotPresent

busybox: 
  image: docker.io/busybox

imagePullSecrets:
  - name: regcred
oudConfig:
  baseDN: <LDAP_SEARCHBASE>
  rootUserDN: <LDAP_ADMIN_USER>
  rootUserPassword: <LDAP_ADMIN_PWD>
  sleepBeforeConfig: 1300
  resources:
    limits:
      cpu: 1
      memory: 2Gi
    requests:
      cpu: 500m
      memory: 1Gi

persistence:
  type: networkstorage
  networkstorage:
    nfs:
      server: <PVSERVER>
      path: <OUD_SHARE>
  size: 30Gi

configVolume:
  enabled: true
  type: networkstorage
  networkstorage:
    nfs:
      server: <PVSERVER>
      path: <OUD_CONFIG_SHARE>
  mountPath: /u01/oracle/config-input

replicaCount: <OUD_REPLICAS>

ingress:
  enabled: false
  type: nginx
  tlsEnabled: true

cronJob:
  kubectlImage:
    repository: bitnami/kubectl
    tag: <KUBERNETES_VER>
    pullPolicy: IfNotPresent
  imagePullSecrets:
    - name: dockercred

baseOUD:
  envVars:
    - name: schemaConfigFile_1
      value: /u01/oracle/config-input/99-user.ldif
    - name: restartAfterSchemaConfig
      value: "true"
    - name: importLdif_1
      value: --append --replaceExisting --includeBranch ${baseDN} --backendID userRoot --ldifFile /u01/oracle/config-input/base.ldif --rejectFile /u01/oracle/config-input/rejects.ldif --skipFile /u01/oracle/config-input/skip.ldif
    - name: serverTuning
      value: -Xms1024m -Xmx2048m -d64 -XX:+UseCompressedOops -server -Xmn1g -XX:MaxTenuringThreshold=1 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60
    - name: dsconfig_1
      value: set-global-configuration-prop --set lookthrough-limit:75000
    - name: dsconfig_2
      value: set-access-control-handler-prop --remove global-aci:"(target=\"ldap:///cn=changelog\")(targetattr=\"*\")(version 3.0; acl \"External changelog access\"; deny (all) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_3
      value: set-access-control-handler-prop --add global-aci:"(target=\"ldap:///cn=changelog\")(targetattr=\"*\")(version 3.0; acl \"External changelog access\"; allow (read,search,compare,add,write,delete,export) groupdn=\"ldap:///cn=<LDAP_OIGADMIN_GRP>,cn=groups,${baseDN}\";)" 
    - name: dsconfig_4
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"1.3.6.1.4.1.26027.1.5.4 || 1.3.6.1.4.1.26027.2.3.4\")(version 3.0; acl \"<LDAP_OIGADMIN_GRP> control access\"; allow(read)  groupdn=\"ldap:///cn=<LDAP_OIGADMIN_GRP>,cn=groups,${baseDN}\";)"
    - name: dsconfig_5
      value: set-access-control-handler-prop --add global-aci:"(target=\"ldap:///\")(targetscope=\"base\")(targetattr=\"lastExternalChangelogCookie\")(version 3.0; acl \"User-Visible lastExternalChangelog\"; allow (read,search,compare) groupdn=\"ldap:///cn=<LDAP_OIGADMIN_GRP>,cn=groups,${baseDN}\";)"
    - name: dsconfig_6
      value: set-access-control-handler-prop --remove global-aci:"(targetcontrol=\"1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.840.113556.1.4.319 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9\") (version 3.0; acl \"Authenticated users control access\"; allow(read) userdn=\"ldap:///all\";)"
    - name: dsconfig_7
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9 || 1.3.6.1.4.1.26027.1.5.4 || 1.3.6.1.4.1.26027.2.3.4\") (version 3.0; acl \"Authenticated users control access\"; allow(read) userdn=\"ldap:///all\";)"
    - name: dsconfig_8
      value: set-access-control-handler-prop --remove global-aci:"(targetcontrol=\"2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31\") (version 3.0; acl \"Anonymous control access\"; allow(read) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_9
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31 || 1.2.840.113556.1.4.319\") (version 3.0; acl \"Anonymous control access\"; allow(read) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_10
      value: create-local-db-index --element-name userRoot --index-name orclImpersonationGranter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_11
      value: create-local-db-index --element-name userRoot --index-name orclImpersonationGrantee --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_12
      value: create-local-db-index --element-name userRoot --index-name obid --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_13
      value: create-local-db-index --element-name userRoot --index-name oblocationdn --set index-type:equality  
    - name: dsconfig_14
      value: create-local-db-index --element-name userRoot --index-name oblocationname --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_15
      value: create-local-db-index --element-name userRoot --index-name oblocationtitle --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_16
      value: create-local-db-index --element-name userRoot --index-name obrectangle --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_17
      value: create-local-db-index --element-name userRoot --index-name obdirectreports --set index-type:equality 
    - name: dsconfig_18
      value: create-local-db-index --element-name userRoot --index-name obindirectmanager --set index-type:equality 
    - name: dsconfig_19
      value: create-local-db-index --element-name userRoot --index-name obuseraccountcontrol --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_20
      value: create-local-db-index --element-name userRoot --index-name obobjectclass --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_21
      value: create-local-db-index --element-name userRoot --index-name obparentlocationdn --set index-type:equality 
    - name: dsconfig_22
      value: create-local-db-index --element-name userRoot --index-name obgroupcreator --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_23
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscriptiontype --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_24
      value: create-local-db-index --element-name userRoot --index-name obgroupdynamicfilter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_25
      value: create-local-db-index --element-name userRoot --index-name obgroupexpandeddynamic --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_26
      value: create-local-db-index --element-name userRoot --index-name obgroupadministrator --set index-type:equality 
    - name: dsconfig_27
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscriptionfilter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_28
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscribemessage --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_29
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscribenotification --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_30
      value: create-local-db-index --element-name userRoot --index-name obgrouppuredynamic --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_31
      value: list-local-db-indexes --element-name userRoot 
    - name: rebuildIndex_1
      value: --rebuildAll 
    - name: restartAfterRebuildIndex
      value: "true"

replOUD:
  envVars:
    - name: serverTuning
      value: -Xms1024m -Xmx2048m -d64 -XX:+UseCompressedOops -server -Xmn1g -XX:MaxTenuringThreshold=1 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60
    - name: dsconfig_1
      value: set-global-configuration-prop --set lookthrough-limit:75000
    - name: dsconfig_2
      value: set-access-control-handler-prop --remove global-aci:"(target=\"ldap:///cn=changelog\")(targetattr=\"*\")(version 3.0; acl \"External changelog access\"; deny (all) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_3
      value: set-access-control-handler-prop --add global-aci:"(target=\"ldap:///cn=changelog\")(targetattr=\"*\")(version 3.0; acl \"External changelog access\"; allow (read,search,compare,add,write,delete,export) groupdn=\"ldap:///cn=<LDAP_OIGADMIN_GRP>,cn=groups,${baseDN}\";)"
    - name: dsconfig_4
      value: set-access-control-handler-prop --remove global-aci:"(targetcontrol=\"1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.840.113556.1.4.319 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9\") (version 3.0; acl \"Authenticated users control access\"; allow(read) userdn=\"ldap:///all\";)"
    - name: dsconfig_5
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9 || 1.3.6.1.4.1.26027.1.5.4 || 1.3.6.1.4.1.26027.2.3.4\") (version 3.0; acl \"Authenticated users control access\"; allow(read) userdn=\"ldap:///all\";)"
    - name: dsconfig_6
      value: set-access-control-handler-prop --remove global-aci:"(targetcontrol=\"2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31\") (version 3.0; acl \"Anonymous control access\"; allow(read) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_7
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31 || 1.2.840.113556.1.4.319\") (version 3.0; acl \"Anonymous control access\"; allow(read) userdn=\"ldap:///anyone\";)"
    - name: post_dsreplication_dsconfig_2
      value: create-local-db-index --element-name userRoot --index-name orclImpersonationGranter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_3
      value: create-local-db-index --element-name userRoot --index-name orclImpersonationGrantee --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_4
      value: create-local-db-index --element-name userRoot --index-name obid --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_5
      value: create-local-db-index --element-name userRoot --index-name oblocationdn --set index-type:equality
    - name: post_dsreplication_dsconfig_6
      value: create-local-db-index --element-name userRoot --index-name oblocationname --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_7
      value: create-local-db-index --element-name userRoot --index-name oblocationtitle --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_8
      value: create-local-db-index --element-name userRoot --index-name obrectangle --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_9
      value: create-local-db-index --element-name userRoot --index-name obdirectreports --set index-type:equality
    - name: post_dsreplication_dsconfig_10
      value: create-local-db-index --element-name userRoot --index-name obindirectmanager --set index-type:equality
    - name: post_dsreplication_dsconfig_11
      value: create-local-db-index --element-name userRoot --index-name obuseraccountcontrol --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_12
      value: create-local-db-index --element-name userRoot --index-name obobjectclass --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_13
      value: create-local-db-index --element-name userRoot --index-name obparentlocationdn --set index-type:equality
    - name: post_dsreplication_dsconfig_14
      value: create-local-db-index --element-name userRoot --index-name obgroupcreator --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_15
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscriptiontype --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_16
      value: create-local-db-index --element-name userRoot --index-name obgroupdynamicfilter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_17
      value: create-local-db-index --element-name userRoot --index-name obgroupexpandeddynamic --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_18
      value: create-local-db-index --element-name userRoot --index-name obgroupadministrator --set index-type:equality
    - name: post_dsreplication_dsconfig_19
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscriptionfilter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_20
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscribemessage --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_21
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscribenotification --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_22
      value: create-local-db-index --element-name userRoot --index-name obgrouppuredynamic --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_23
      value: list-local-db-indexes --element-name userRoot
    - name: rebuildIndex_1
      value: --rebuildAll
    - name: restartAfterRebuildIndex
      value: "true"
たとえば:
image:
  repository: oracle/oud
  tag: 12.2.1.4-jdk8-ol7-220411.1613
  pullPolicy: IfNotPresent

busybox: 
  image: docker.io/busybox

imagePullSecrets:
  - name: regcred
oudConfig:
  baseDN: dc=example,dc=com
  rootUserDN: cn=oudadmin
  rootUserPassword: password
  sleepBeforeConfig: 1300

persistence:
  type: networkstorage
  networkstorage:
    nfs:
      server: mynfsserver.example.com
      path: /exports/IAMPVS/oudpv
  size: 30Gi

configVolume:
  enabled: true
  type: networkstorage
  networkstorage:
    nfs:
      server: mynfsserver.example.com
      path: /exports/IAMPVS/oudconfigpv
  mountPath: /u01/oracle/config-input

replicaCount: 1

ingress:
  enabled: false
  type: nginx
  tlsEnabled: true

cronJob:
  kubectlImage:
    repository: bitnami/kubectl
    tag: <KUBERNETES_VER>
    pullPolicy: IfNotPresent
  imagePullSecrets:
    - name: dockercred

baseOUD:
  envVars:
    - name: schemaConfigFile_1
      value: /u01/oracle/config-input/99-user.ldif
    - name: restartAfterSchemaConfig
      value: "true"
    - name: importLdif_1
      value: --append --replaceExisting --includeBranch ${baseDN} --backendID userRoot --ldifFile /u01/oracle/config-input/base.ldif --rejectFile /u01/oracle/config-input/rejects.ldif --skipFile /u01/oracle/config-input/skip.ldif
    - name: serverTuning
      value: -Xms1024m -Xmx2048m -d64 -XX:+UseCompressedOops -server -Xmn1g -XX:MaxTenuringThreshold=1 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60
    - name: dsconfig_1
      value: set-global-configuration-prop --set lookthrough-limit:75000
    - name: dsconfig_2
      value: set-access-control-handler-prop --remove global-aci:"(target=\"ldap:///cn=changelog\")(targetattr=\"*\")(version 3.0; acl \"External changelog access\"; deny (all) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_3
      value: set-access-control-handler-prop --add global-aci:"(target=\"ldap:///cn=changelog\")(targetattr=\"*\")(version 3.0; acl \"External changelog access\"; allow (read,search,compare,add,write,delete,export) groupdn=\"ldap:///cn=<LDAP_OIGADMIN_GRP>,cn=groups,${baseDN}\";)" 
    - name: dsconfig_4
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"1.3.6.1.4.1.26027.1.5.4 || 1.3.6.1.4.1.26027.2.3.4\")(version 3.0; acl \"<LDAP_OIGADMIN_GRP> control access\"; allow(read)  groupdn=\"ldap:///cn=<LDAP_OIGADMIN_GRP>,cn=groups,${baseDN}\";)"
    - name: dsconfig_5
      value: set-access-control-handler-prop --add global-aci:"(target=\"ldap:///\")(targetscope=\"base\")(targetattr=\"lastExternalChangelogCookie\")(version 3.0; acl \"User-Visible lastExternalChangelog\"; allow (read,search,compare) groupdn=\"ldap:///cn=<LDAP_OIGADMIN_GRP>,cn=groups,${baseDN}\";)"
    - name: dsconfig_6
      value: set-access-control-handler-prop --remove global-aci:"(targetcontrol=\"1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.840.113556.1.4.319 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9\") (version 3.0; acl \"Authenticated users control access\"; allow(read) userdn=\"ldap:///all\";)"
    - name: dsconfig_7
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9 || 1.3.6.1.4.1.26027.1.5.4 || 1.3.6.1.4.1.26027.2.3.4\") (version 3.0; acl \"Authenticated users control access\"; allow(read) userdn=\"ldap:///all\";)"
    - name: dsconfig_8
      value: set-access-control-handler-prop --remove global-aci:"(targetcontrol=\"2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31\") (version 3.0; acl \"Anonymous control access\"; allow(read) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_9
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31 || 1.2.840.113556.1.4.319\") (version 3.0; acl \"Anonymous control access\"; allow(read) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_10
      value: create-local-db-index --element-name userRoot --index-name orclImpersonationGranter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_11
      value: create-local-db-index --element-name userRoot --index-name orclImpersonationGrantee --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_12
      value: create-local-db-index --element-name userRoot --index-name obid --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_13
      value: create-local-db-index --element-name userRoot --index-name oblocationdn --set index-type:equality  
    - name: dsconfig_14
      value: create-local-db-index --element-name userRoot --index-name oblocationname --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_15
      value: create-local-db-index --element-name userRoot --index-name oblocationtitle --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_16
      value: create-local-db-index --element-name userRoot --index-name obrectangle --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_17
      value: create-local-db-index --element-name userRoot --index-name obdirectreports --set index-type:equality 
    - name: dsconfig_18
      value: create-local-db-index --element-name userRoot --index-name obindirectmanager --set index-type:equality 
    - name: dsconfig_19
      value: create-local-db-index --element-name userRoot --index-name obuseraccountcontrol --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_20
      value: create-local-db-index --element-name userRoot --index-name obobjectclass --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_21
      value: create-local-db-index --element-name userRoot --index-name obparentlocationdn --set index-type:equality 
    - name: dsconfig_22
      value: create-local-db-index --element-name userRoot --index-name obgroupcreator --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_23
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscriptiontype --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_24
      value: create-local-db-index --element-name userRoot --index-name obgroupdynamicfilter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_25
      value: create-local-db-index --element-name userRoot --index-name obgroupexpandeddynamic --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_26
      value: create-local-db-index --element-name userRoot --index-name obgroupadministrator --set index-type:equality 
    - name: dsconfig_27
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscriptionfilter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_28
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscribemessage --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_29
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscribenotification --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_30
      value: create-local-db-index --element-name userRoot --index-name obgrouppuredynamic --set index-type:equality --set index-type:presence --set index-type:substring
    - name: dsconfig_31
      value: list-local-db-indexes --element-name userRoot 
    - name: rebuildIndex_1
      value: --rebuildAll 
    - name: restartAfterRebuildIndex
      value: "true"

replOUD:
  envVars:
    - name: serverTuning
      value: -Xms1024m -Xmx2048m -d64 -XX:+UseCompressedOops -server -Xmn1g -XX:MaxTenuringThreshold=1 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60
    - name: dsconfig_1
      value: set-global-configuration-prop --set lookthrough-limit:75000
    - name: dsconfig_2
      value: set-access-control-handler-prop --remove global-aci:"(target=\"ldap:///cn=changelog\")(targetattr=\"*\")(version 3.0; acl \"External changelog access\"; deny (all) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_3
      value: set-access-control-handler-prop --add global-aci:"(target=\"ldap:///cn=changelog\")(targetattr=\"*\")(version 3.0; acl \"External changelog access\"; allow (read,search,compare,add,write,delete,export) groupdn=\"ldap:///cn=<LDAP_OIGADMIN_GRP>,cn=groups,${baseDN}\";)"
    - name: dsconfig_4
      value: set-access-control-handler-prop --remove global-aci:"(targetcontrol=\"1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.840.113556.1.4.319 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9\") (version 3.0; acl \"Authenticated users control access\"; allow(read) userdn=\"ldap:///all\";)"
    - name: dsconfig_5
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9 || 1.3.6.1.4.1.26027.1.5.4 || 1.3.6.1.4.1.26027.2.3.4\") (version 3.0; acl \"Authenticated users control access\"; allow(read) userdn=\"ldap:///all\";)"
    - name: dsconfig_6
      value: set-access-control-handler-prop --remove global-aci:"(targetcontrol=\"2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31\") (version 3.0; acl \"Anonymous control access\"; allow(read) userdn=\"ldap:///anyone\";)"
    - name: dsconfig_7
      value: set-access-control-handler-prop --add global-aci:"(targetcontrol=\"2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16 || 2.16.840.1.113894.1.8.31 || 1.2.840.113556.1.4.319\") (version 3.0; acl \"Anonymous control access\"; allow(read) userdn=\"ldap:///anyone\";)"
    - name: post_dsreplication_dsconfig_2
      value: create-local-db-index --element-name userRoot --index-name orclImpersonationGranter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_3
      value: create-local-db-index --element-name userRoot --index-name orclImpersonationGrantee --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_4
      value: create-local-db-index --element-name userRoot --index-name obid --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_5
      value: create-local-db-index --element-name userRoot --index-name oblocationdn --set index-type:equality
    - name: post_dsreplication_dsconfig_6
      value: create-local-db-index --element-name userRoot --index-name oblocationname --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_7
      value: create-local-db-index --element-name userRoot --index-name oblocationtitle --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_8
      value: create-local-db-index --element-name userRoot --index-name obrectangle --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_9
      value: create-local-db-index --element-name userRoot --index-name obdirectreports --set index-type:equality
    - name: post_dsreplication_dsconfig_10
      value: create-local-db-index --element-name userRoot --index-name obindirectmanager --set index-type:equality
    - name: post_dsreplication_dsconfig_11
      value: create-local-db-index --element-name userRoot --index-name obuseraccountcontrol --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_12
      value: create-local-db-index --element-name userRoot --index-name obobjectclass --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_13
      value: create-local-db-index --element-name userRoot --index-name obparentlocationdn --set index-type:equality
    - name: post_dsreplication_dsconfig_14
      value: create-local-db-index --element-name userRoot --index-name obgroupcreator --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_15
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscriptiontype --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_16
      value: create-local-db-index --element-name userRoot --index-name obgroupdynamicfilter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_17
      value: create-local-db-index --element-name userRoot --index-name obgroupexpandeddynamic --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_18
      value: create-local-db-index --element-name userRoot --index-name obgroupadministrator --set index-type:equality
    - name: post_dsreplication_dsconfig_19
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscriptionfilter --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_20
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscribemessage --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_21
      value: create-local-db-index --element-name userRoot --index-name obgroupsubscribenotification --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_22
      value: create-local-db-index --element-name userRoot --index-name obgrouppuredynamic --set index-type:equality --set index-type:presence --set index-type:substring
    - name: post_dsreplication_dsconfig_23
      value: list-local-db-indexes --element-name userRoot
    - name: rebuildIndex_1
      value: --rebuildAll
    - name: restartAfterRebuildIndex
      value: "true"

<KUBERNETES_VER>には、最初の3つの索引のみが必要です。例: 1.20.6

組織でパブリック・イメージのインターネットへのアクセスを禁止している場合は、独自のレジストリでkubectlイメージをホストし、この値と一致するように前述のファイル内のリポジトリ値を更新できます。

ノート:

OUDでエンタープライズ・ユーザー・セキュリティ(EUS)統合を有効にする場合は、oudConfigセクションに次の行を追加します:
oudConfig:
  integration: eus
OAMを使用しない場合は、次を削除できます:
  • ファイルのbaseOUDセクションの行dsconfig_1からdsconfig_30
  • ファイルのreplOUDセクションの行post_dsreplication_dsconfig_2からpost_dsreplication_dsconfig_22
  • Oracle Access Managerのスキーマ定義を拡張しない場合は、サーバー・オーバーライド・ファイルから<schemaConfigFile_1>を実行します。

OUDのヒープ・サイズの変更

OUDのチューニング手順は、このガイドの対象外です。OUDで推奨される最大および最小のヒープ・サイズは、「サイズ設定のガイドライン」を参照してください。

OUDインスタンスのヒープ・サイズを変更するには、サーバー・オーバーライド・ファイルのserverTuningセクションで、最小ヒープ・サイズにXmsを、最大ヒープ・サイズにXmxを設定します。

たとえば、小規模なシステムの値を設定する場合、エントリは次のようになります:

- name: serverTuning
value: -Xms4096m -Xmx8192m -d64 -XX:+UseCompressedOops -server -Xmn1g -XX:MaxTenuringThreshold=1 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60

パフォーマンス・チューニングの推奨事項の詳細は、Oracle Unified Directory 12.2.1.4.0のパフォーマンスの詳細を参照してください。

保証レプリケーションの有効化

OUDインスタンス間で保証レプリケーションを有効にする場合は、override_oud.yamlファイルのreplOUDセクションに次の内容を追加します:

replOUD:
  envVars:
    - name: post_dsreplication_dsconfig_1
      value: set-replication-domain-prop --domain-name ${baseDN} --advanced --set assured-type:safe-read
    - name: execCmd_1
      value: /u01/oracle/user_projects/${OUD_INSTANCE_NAME}/OUD/bin/dsconfig --no-prompt --hostname ${sourceHost} --port ${adminConnectorPort} --bindDN "${rootUserDN}" --bindPasswordFile /u01/oracle/user_projects/${OUD_INSTANCE_NAME}/admin/rootPwdFile.txt --trustAll set-replication-domain-prop --domain-name ${baseDN} --advanced --set assured-type:safe-read --set assured-sd-level:2 --set assured-timeout:5s --provider-name "Multimaster Synchronization"

コンテナの作成

Helmオーバーライド・ファイルを作成したら、helmコマンドを使用して、OUDコンテナを作成する必要があります。

helmコマンドは:
  • OUDインスタンスを作成します
  • OAMスキーマ拡張を追加します
  • OAM/OIGユーザーおよびグループをシードします
  • OUD変更ログの権限を更新します
  • 追加のOUD索引を作成します
  • OUD索引を再構築します
  • OUD用のKubernetesサービスを作成します
コンテナを作成するには、次のコマンドを使用します:
cd /workdir/OUD/samples/kubernetes/helm
helm install --namespace <OUDNS> --values /workdir/OUD/override_oud.yaml <OUD_PREFIX> oud-ds-rs
たとえば:
helm install --namespace oudns --values /workdir/OUD/override_oud.yaml edg oud-ds-rs

ノート:

edgは、各OUDインスタンスの接頭辞として使用されます。これは任意の値を指定できます。

OUDインスタンスのトラブルシューティング

次のコマンドを使用して、各OUDインスタンスの作成をモニターできます:

ネームスペースに作成されるオブジェクト:
kubectl -n oudns get all -o wide

各コンテナのステータスがREADY 1/1およびStatus = Runningと表示された場合のみ、インストールおよび構成が完了します。

作成中のオブジェクトが表示されない場合は、次のコマンドを使用して問題を確認します:
kubectl get pod -n oudns
詳細な説明は、次を使用します:
kubectl describe pod -n oudns

コンテナ・ログ

作成中の各コンテナの進行状況を表示するには、次のようなコマンドを使用します:
kubectl logs edg-oud-ds-rs-0 -n oudns

OUDサーバーの初期化後に作成されたskips.ldifおよびrejects.ldifファイルを確認します。これらのファイルは、base.ldifおよび99-user.ldifファイルがロードされるときに作成されます。OUDサーバーは、エラーがあっても起動しますが、すべてのデータがロードされていないと、他の製品を統合する際に問題が発生します。OUDログのみを確認しても、エラーに気付かない場合があります。

OUDへの外部アクセスの作成

デフォルトでは、OUDデプロイメントは、ClusterIPサービスとして構成されたすべてのコンポーネントを使用して作成されます。つまり、Oracle Unified Directoryコンポーネントは、Kubernetesクラスタ内でのみ認識されます。

Kubernetes内からのみクラスタにアクセスする場合は、これで十分です。ただし、Kubernetesの外部からOracle Unified Directoryと対話する場合は、イングレス・コントローラ・サービスまたは個々のNodePortサービスを作成する必要があります。

Kubernetes NodePortサービスの作成

ネイティブKubernetes NodePortサービスを作成するには、この項のステップを実行する必要があります。イングレス・コントローラを使用してOUDサービスを公開する場合は、「イングレス・コントローラのインストールと構成」を参照してください。

LDAP NodePortサービスの作成
LDAP NodePortサービスを作成するには:
  1. 次の内容を含む/workdir/OUD/oud_nodeport.yamlというテキスト・ファイルを作成します:
    kind: Service
    apiVersion: v1
    metadata:
      name: <OUD_PREFIX>-oud-ds-rs-lbr-ldap-nodeport
      namespace: <OUDNS>
    spec:
      type: NodePort
      selector:
        app.kubernetes.io/instance: <OUD_PREFIX>
        app.kubernetes.io/name: oud-ds-rs
      ports:
        - name: ldap
          targetPort: 1389
          port: 1389
          nodePort: <OUD_LDAP_K8>
          protocol: TCP
        - name: ldaps
          targetPort: 1636
          port: 1636
          nodePort: <OUD_LDAPS_K8>
          protocol: TCP
    たとえば:
    kind: Service
    apiVersion: v1
    metadata:
      name: oud-edg-oud-ds-rs-lbr-ldap-nodeport
      namespace: oudns
    spec:
      type: NodePort
      selector:
        app.kubernetes.io/instance: oud-edg
        app.kubernetes.io/name: oud-ds-rs
      ports:
        - name: ldap
          targetPort: 1389
          port: 1389
          nodePort: 31389
          protocol: TCP
        - name: ldaps
          targetPort: 1636
          port: 1636
          nodePort: 31636
          protocol: TCP
  2. 次のコマンドを使用して、サービスを作成します:
    kubectl create -f /workdir/OUD/oud_nodeport.yaml
    出力が次のように表示されます。
    service/edg--oud-ds-rs-lbr-ldap-nodeport created

GrafanaとPrometheusによる集中管理型の監視

OUD用に固有に収集されるメトリックはありません。ただし、Kibanaの標準のKubernetesダッシュボードを使用して、OUDポッドをモニターできます。

ElasticsearchおよびKibanaを使用した集中管理型のログ・ファイル監視

ElasticsearchとKibanaを使用している場合は、集中管理型のElasticearch/Kibanaコンソールにログ・ファイルを送信するようLogstashポッドを構成できます。Logstashポッドを構成する前に、集中管理型のElasticsearchデプロイメントにアクセスできることを確認してください。
  • OUD永続ボリューム(Logstashポッドによってロードされ、ログ・ファイルの検索が可能になります)。
  • 永続ボリューム内のログ・ファイルの場所。
  • 集中管理型のElasticsearchの場所。

Logstashポッドを構成するには、次のステップを実行します。Kubernetesクラスタ内のelknsというネームスペースで、Elasticsearchが実行されていることを前提としています。

Elasticsearchのシークレットの作成

Logstashでは、Elasticsearchデプロイメントに接続するための資格証明が必要です。これらの資格証明は、シークレットとしてKubernetesに格納されます。

Elasticsearchで認証にAPIキーを使用する場合は、次のコマンドを使用します:
kubectl create secret generic elasticsearch-pw-elastic -n <OUDNS> --from-literal password=<ELK_APIKEY>
たとえば:
kubectl create secret generic elasticsearch-pw-elastic -n oudns --from-literal password=afshfashfkahf5f
Elasticsearchで認証にユーザー名とパスワードを使用する場合は、次のコマンドを使用します:
kubectl create secret generic elasticsearch-pw-elastic -n <OUDNS> --from-literal password=<ELK_PWD>
たとえば:
kubectl create secret generic elasticsearch-pw-elastic -n oudns --from-literal password=mypassword
Elasticsearchパスワードを見つけるには、次のコマンドを使用します:
kubectl get secret elasticsearch-es-elastic-user -n <ELKNS> -o go-template='{{.data.elastic | base64decode}}'

ELK証明書の構成マップの作成

本番環境に対応したElasticsearchデプロイメントを構成した場合は、SSLが構成されています。Elasticsearchと通信できるよう、LogstashでElasticsearch証明書を信頼する必要があります。信頼を有効にするには、Elasticsearch証明書の内容で、構成マップを作成する必要があります。

Elasticsearchの自己署名証明書は、すでに保存されています。「Elasticsearch証明書のコピー」を参照してください。本番証明書がある場合は、かわりにそれを使用できます。

証明書を使用して構成マップを作成し、次のコマンドを実行します:

kubectl create configmap elk-cert --from-file=<WORKDIR>/ELK/elk.crt -n <OUDNS>
たとえば:
kubectl create configmap elk-cert --from-file=/workdir/ELK/elk.crt -n oudns

OUDのログ・ファイル監視の構成

ログ・ファイル監視を構成するには、次のステップを実行します:

Logstashの構成マップの作成

Logstashは、OUDインストールのログ・ファイルを検索し、集中管理型のElasticsearchに送信します。ログ・ファイルが存在する場所とその送信先は、構成マップを使用してLogstashに指示されます。

  1. <WORKDIR>/OUD/logstash_cm.yamlというファイルを、次の内容で作成します:
    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: oud-logstash-configmap
     namespace: <OUDNS>
    data:
     logstash.yaml: |
     #http.host: "0.0.0.0"
     logstash-config.conf: |
       input {
          file {
           path => "/u01/oracle/user_projects/oud-ds-rs-*/logs/*.log"
           type => "setup-logs"
           start_position => beginning
           sincedb_path => "/dev/null"
          }
          file {
           path => "/u01/oracle/user_projects/oud-ds-rs-*/OUD/logs/*.log"
           type => "access-logs"
           start_position => beginning
           sincedb_path => "/dev/null"
          }
         }
         filter {
          if [type] == "setup-logs" {
           grok {
            match => [ "message", "<%{DATA:log_timestamp}> <%{WORD:log_level}> <%{WORD:thread}> <%{HOSTNAME:hostname}> <%{HOSTNAME:servername}> <%{DATA:timer}> <<%{DATA:kernel}>> <> <%{DATA:uuid}> <%{NUMBER:timestamp}> <%{DATA:misc}> <%{DATA:log_number}> <%{DATA:log_message}>" ]
            }
           }
          if [type] == "access-logs" {
           grok {
            match => [ "message", "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{DATA:component}\] \[%{LOGLEVEL:loglevel}\] \[%{DATA:misc}\] \[%{DATA:logtype}\] \[%{DATA:host}\] \[%{DATA:nwaddr}\] %{GREEDYDATA:message}" ]
            }
           }
          if "_grokparsefailure" in [tags] {
           mutate {
            remove_tag => [ "_grokparsefailure" ]
            }
           }
          }
       output {
        elasticsearch {
         hosts => ["<ELK_HOST>"]
         cacert => '/usr/share/logstash/config/certs/elk.crt'
         user => "<ELK_USER>"
         password => "<ELK_USER_PWD>"
         index => "oudlogs-000001"
         ssl => true
         ssl_certificate_verification => false
        }
       }
  2. ファイルを保存します。
  3. 次のコマンドを使用して、構成マップを作成します:
    kubectl create -f <WORKDIR>/OUD/logstash_cm.yaml
    たとえば:
    kubectl create -f /workdir/OUD/logstash_cm.yaml
  4. 次のコマンドを使用して、構成マップが作成されたことを確認します:
    kubectl get cm -n <OUDNS>

    構成マップのリストにoud-logstash-configmapが表示されます。

Logstashデプロイメントの作成
構成マップを作成したら、Logstashデプロイメントを作成できます。このデプロイメントは、OUDネームスペースに存在します。
  1. <WORKDIR>/OUD/logstash.yamlというファイルを、次の内容で作成します:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oud-logstash
      namespace: <OUDNS>
    spec:
      selector:
        matchLabels:
          k8s-app: logstash
      template: # create pods using pod definition in this template
        metadata:
          labels:
            k8s-app: logstash
        spec:
          imagePullSecrets:
          - name: dockercred
          containers:
          - command:
            - logstash
            image: logstash:<ELK_VER>
            imagePullPolicy: IfNotPresent
            name: oud-logstash
            env:
            - name: ELASTICSEARCH_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: elasticsearch-pw-elastic
                  key: password
            ports:
            - containerPort: 5044
              name: logstash
            volumeMounts:
            - mountPath: /u01/oracle/user_projects
              name: oud-storage-volume
            - name: shared-logs
              mountPath: /shared-logs
            - mountPath: /usr/share/logstash/pipeline/
              name: oud-logstash-pipeline
            - mountPath: /usr/share/logstash/config/certs
              name: elk-cert
          volumes:
          - configMap:
              defaultMode: 420
              items:
              - key: logstash-config.conf
                path: logstash-config.conf
              name: oud-logstash-configmap
            name: oud-logstash-pipeline
          - configMap:
              defaultMode: 420
              items:
              - key: ca.crt
                path: elk.crt
              name: elk-cert
          - name: oud-storage-volume
            persistentVolumeClaim:
              claimName: <OUD_POD_PREFIX>-oud-ds-rs-pvc
          - name: shared-logs
            emptyDir: {}

    ノート:

    独自のレジストリを使用している場合は、レジストリ名をイメージ・タグに含めます。レジストリのregcredシークレットを作成した場合は、imagePullSecretsの名前を、作成したシークレット名に置き換えます。例: regcred
  2. ファイルを保存します。
  3. 次のコマンドを使用して、Logstashデプロイメントを作成します:
    kubectl create -f <WORKDIR>/OUD/logstash.yaml
    たとえば:
    kubectl create -f /workdir/OUD/logstash.yaml
  4. 次のコマンドを使用して、logstashというポッドを作成できます:
    kubectl get pod -n oudns

    これで、Kibanaコンソールでログを使用できるようになります。