データベース・パスワード・プラグインを使用したデータベース接続の認証
Oracle GoldenGate 23ai (23.5以上)には、サードパーティ・ボールトからデータベース資格証明を取得し、事前定義されたAPIでOracle GoldenGateにそれを返すカスタム・コードを記述できる、使いやすいプラグインが含まれています。
組織のベスト・プラクティスとして含まれるセキュリティ・ルールが強化されているため、パスワードなどのデータベース資格証明をOracle GoldenGateのローカル・ウォレット(資格証明ストア)に格納できない組織もあります。パスワードは、Oracle GoldenGateの外部のボールトに格納する必要があります。この認証方法を実装するために、データベース・パスワード・プラグインが導入されました。これにより、Oracle GoldenGateでは、データベース・インスタンスに接続する必要がある場合に、選択したサードパーティ・ボールトまたはOCI Vaultからパスワードを取得できます。
この項では、Oracle GoldenGateでデータベース接続を確立する際に、Oracle GoldenGateでデータベース・パスワード・プラグインをアクティブ化し、それを使用してシークレット・パスワードを取得するためのワークフローについて説明します。要件に応じて、次のトピックに示されているステップに従います:
サードパーティ・ボールトにデータベース・パスワードを格納およびアクセスするためのデータベース・パスワード・プラグインの構成
または
データベース・パスワード・プラグインに必要なAPI
このプラグインには少なくとも2つの関数APIが必要です。これらのAPIを次に示します:
-
getManifest()
-
各プラグインは、次のようなプラグインを表すJSONスタイルの文字列を返す
getmanifest
関数を公開する必要があります:{"$schema": "ogg:plugin", "version": "23.4" }
バージョン番号は、Oracle GoldenGateのバージョン番号以下にできます。たとえば、Oracle GoldenGate 23ai (バージョン23.6)を実行している場合、JSON文字列のバージョン番号は、
23.4
、23.5
または23.6
になります。
-
getUseridAliasPassword(oggDomain *C.char, oggAlias *C.char, oggUserid *C.char, oggPassword *C.char)
-
この関数は、USERIDALIASのパスワードを取得するためにOracle GoldenGateによってコールされます。
整数値を返します。0は成功を意味し、0以外の値は失敗です。
oggDomain
、oggAlias
およびoggUserid
は、データベース・ユーザー資格証明を識別するための入力パラメータです。oggPassword
は、ボールトからフェッチされたパスワードを返す出力パラメータです。
サードパーティ・ボールトにデータベース・パスワードを格納およびアクセスするためのデータベース・パスワード・プラグインの構成
選択したサードパーティ・ボールトにシークレット・パスワードを作成、格納および取得するには、独自のカスタム・コードを記述する必要があります。このコードでは、Oracle GoldenGateサービス・マネージャからプラグインをサービスとしてアクティブ化するために使用される共有ユーザー・ライブラリを生成する必要があります。プラグインをアクティブ化した後、Oracle GoldenGateからデータベース接続を確立するときに、サードパーティ・ボールトにアクセスして、格納されたシークレット・パスワードを取得できます。Oracle GoldenGateは、そのUSERID
を別名としてdomain_name.alias_name
の資格証明ストアに格納します。domain_name
およびalias_name
は、プラグインをコールするための入力パラメータとして使用されます。たとえば、ドメイン名がOracleGoldenGateで、別名がggeastadminの場合、シークレット名はOracleGoldenGate.ggeastadminになります。プラグインは、ボールトからシークレット(パスワード)を取得するためのシークレット名を識別します。
カスタム・コードは、共有ユーザー・ライブラリにコンパイルできるかぎり、任意の言語で記述できます。使用できる最も一般的な言語は、GoLang、C/C++およびPythonです。
次の図は、Oracle GoldenGateでデータベース・パスワード・プラグインを使用して、サードパーティ・ボールトからデータベース接続を設定する場合のワークフローを示しています。USERID
はOracle GoldenGate資格証明ストアに格納され、シークレット・パスワードはサードパーティ・ボールトに格納されます。
-
GG Service Manager Home/var/lib/plugins/
ディレクトリにあるデータベース・パスワード・プラグインを見つけます。デフォルトでは、このディレクトリの下にライブラリはありません。ノート:
ライブラリのファイル名に制限はありませんが、プラグインは、この場所に存在する最初のライブラリ・ファイルのみを取得します。
-
プラグインで使用される関数APIを確認します。詳細は、「データベース・パスワード・プラグインに必要なAPI」を参照してください。
-
データベース・パスワード・プラグインのアクティブ化に使用される共有ユーザー・ライブラリを作成するコードを記述およびコンパイルします。データベース・パスワード・プラグインの設定に使用しているサードパーティ・ボールトに基づいて、コードを記述およびコンパイルする必要があります。
-
コンパイル済のユーザー・ライブラリを
Service_Manager_Home/var/lib/plugins/
ディレクトリにコピーします。 -
REST APIコマンドを実行して、サービス・マネージャでプラグインを新しいサービスとしてアクティブ化します。サービス・マネージャがポート9011でローカルで実行されている場合、コマンドは次のようになります:
shell>OGG_ADMIN_PASSWORD="xxxx" shell>curl -svu "oggadmin:${OGG_ADMIN_PASSWORD}" http://127.0.0.1:9011/services/v2/deployments/ServiceManager/services/pluginsrvr \ -XPOST --data '{"$schema":"ogg:service", "config":"external", "enabled":true, "critical":true, "status":"running"}'
アクティブ化後は、次の図に示すようにサービス・マネージャでプラグインのステータスを表示できます。サービスは、「サービス」の下にプラグイン・サービスとして表示できます。
ノート:
NGINXまたはセキュア・デプロイメントを使用している場合は、httpのかわりにhttpsを使用し、コマンドラインで適切なCA証明書パスを使用する必要があります。
-
必要に応じて、サードパーティ・ボールトの環境変数を設定し、サービス・マネージャを再起動します。
-
サードパーティ・ボールトを構成し、それにパスワードを格納します。
-
管理クライアントを実行し、
NOPASSWORD
オプションを使用してデータベース・ログイン資格証明を設定し、データベースへの接続が成功することをテストします。次の例は、この構成について説明しています:OGG (not connected) 1> CONNECT http://127.0.0.1:9011 AS oggadmin Using default deployment 'Deployment'
OGG (http://127.0.0.1:9011 Deployment) 2> ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 ALIAS ggeastadmin NOPASSWORD 2024-04-02T18:34:14Z INFO OGG-15114 Credential store altered.
OGG (http://127.0.0.1:9011 Deployment) 3> DBLOGIN USERIDALIAS ggadmin Successfully logged into database.
OCI Vaultにデータベース・パスワードを格納およびアクセスするためのデータベース・パスワード・プラグインの構成
OCI Vaultにシークレット・パスワードを作成、格納および取得するには、OCI Vaultからシークレット・パスワードを取得する方法を示すコード例を使用できます。Oracle GoldenGateは、USERID
を別名としてdomain_name.alias_name
の資格証明ストアに格納します。パスワードは、シークレット名domain_name.alias_name
でシークレットとしてOCI Vaultに格納されます。たとえば、ドメイン名がOracleGoldenGateで、別名がggeastadminの場合、シークレット名はOracleGoldenGate.ggeastadminになります。プラグインは、ボールトからシークレット(パスワード)を取得するためのシークレット名を識別します。
図のステップは、OCI Vaultにデータベース・パスワード・プラグインを設定するためのワークフローを示しています:
-
OCIボールトにパスワードを作成します。
-
このデータベース・ユーザー
ggeastadmin
のパスワードを保持するシークレットがOCI Vaultに作成されていることを確認します。シークレット名が、domain_name.alias_name
という形式のOracleGoldenGate.ggeastadminなど、想定される命名規則に適合していることを確認します。
-
GG Service Manager Home/var/lib/plugins/
ディレクトリにあるデータベース・パスワード・プラグインを見つけます。デフォルトでは、このディレクトリの下にライブラリはありません。ノート:
ライブラリのファイル名に制限はありませんが、プラグインは、この場所に存在する最初のライブラリ・ファイルのみを取得します。
-
プラグインで使用する必要がある関数APIを確認します。詳細は、「データベース・パスワード・プラグインに必要なAPI」を参照してください。
-
OGG_HOME/src/PluginExamples/OCIVault/OCIVault.go
からコード例にアクセスして、共有ユーザー・ライブラリを生成します。 -
OGG_HOME/src/PluginExamples/OCIVault/OCIVault.go
からmake
コマンドを実行して、コードをコンパイルします。これにより、libOCIVault.so
という名前のユーザー・ライブラリが生成されます。 -
ユーザー・ライブラリ
libOCIVault.so
をService_Manager_Home/var/lib/plugins/
ディレクトリにコピーします。 -
REST APIコマンドを発行して、このプラグインをサービス・マネージャの新しいサービスとしてアクティブ化します。サービス・マネージャがポート9011でローカルで実行されている場合、コマンドは次のようになります:
shell>OGG_ADMIN_PASSWORD="xxxx" shell>curl -svu "oggadmin:${OGG_ADMIN_PASSWORD}" http://127.0.0.1:9011/services/v2/deployments/ServiceManager/services/pluginsrvr \ -XPOST --data '{"$schema":"ogg:service", "config":"external", "enabled":true, "critical":true, "status":"running"}'
アクティブ化後は、次の図に示すようにサービス・マネージャでプラグインのステータスを表示できます。サービスは、「サービス」の下にプラグイン・サービスとして表示できます。
ノート:
NGINXまたはセキュア・デプロイメントを使用している場合は、
http
のかわりにhttps
を使用し、コマンドラインで適切なCA証明書パスを使用する必要があります。 -
サービス・マネージャWebインタフェースで、
OCI_AUTH
およびOCID_VAULT_OCID
環境変数を次の値に設定します:-
OCI_AUTH = instance_principal
: この例では、instance_principal
認証メソッドが使用されています。ただし、データベース・パスワード・プラグインでは、次のようなOCI Vaultの認証方法がサポートされています:-
instance_pricinpal
: インスタンス・プリンシパル認証。 -
DEFAULT
: OCI構成ファイルのデフォルト・プロファイル。 -
カスタマイズされた名前: OCI構成ファイル内のカスタマイズされたプロファイル。
-
-
OCID_VAULT_OCID = ocid1.vault.oc1-us-sanjose-1.exxxxxxxxxxxxxxxxxx42upinp4mfxwta
: この値はステップ2から導出されます。
これらの両方の環境変数は、サービス・マネージャの構成の環境変数セクションで正しく設定されている必要があります。
ノート:
NGINXまたはセキュア・デプロイメントを使用している場合は、
http
のかわりにhttps
を使用し、コマンドラインで適切なCA証明書パスを使用する必要があります。 -
-
サービス・マネージャを再起動して設定をアクティブ化します。
-
Oracle GoldenGateのサービス・マネージャが実行されているVMインスタンスを識別します。
-
VMインスタンスを動的グループに追加して、
instance_principal
認証を機能させます。 -
VMインスタンスのタグ(EASTVaultTestなど)を割り当てます。これにより、動的グループの作成が容易になります。詳細は、動的グループの管理を参照してください。動的グループには、そのボールト内のシークレットを使用するためのポリシーが必要です。
-
この動的グループにシークレット・リソース(シークレット・パスワード)の使用を許可するポリシーを作成します。ボールト・サービスへのアクセスを制御するポリシーの作成の詳細は、ボールト・サービスの詳細を参照してください。
-
管理クライアントを実行して、次の例に示すように
NOPASSWORD
オプションを指定してデータベース・ログイン別名を作成し、接続が成功することをテストします:OGG (not connected) 1> CONNECT http://127.0.0.1:9011 AS oggadmin Using default deployment 'Deployment'
OGG (http://127.0.0.1:9011 Deployment) 2> ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 ALIAS ggeastadmin NOPASSWORD 2024-04-02T18:34:14Z INFO OGG-15114 Credential store altered.
OGG (http://127.0.0.1:9011 Deployment) 3> DBLOGIN USERIDALIAS ggadmin Successfully logged into database.