データベース・パスワード・プラグインを使用したデータベース接続認証

Oracle GoldenGate 23.5以上には、カスタム・コードを記述してサード・パーティ・ボールトからデータベース資格証明を取得してから、事前定義済のAPIでOracle GoldenGateに戻すことができる、使いやすいプラグインが含まれています。

組織によるベスト・プラクティスとして含まれるセキュリティ・ルールの増加により、組織によっては、パスワードなどのデータベース資格証明をOracle GoldenGateのローカル・ウォレット(資格証明ストア)に格納できない場合があります。パスワードは、Oracle GoldenGateの外部のボールトに格納する必要があります。この認証方法を実装するために、データベース・パスワード・プラグインが導入されました。これにより、Oracle GoldenGateは、データベース・インスタンスに接続する必要がある場合に、任意のサード・パーティ・ボールトまたはOCI Vaultからパスワードを取得できます。

Oracle GoldenGateからデータベース接続を確立するときに、Oracle GoldenGateでデータベース・パスワード・プラグインを有効にし、それを使用してシークレット・パスワードを取得するワークフローについて学習します。

次のオプションのいずれかを使用して、Oracle GoldenGateのデータベース・パスワード・プラグイン・サービスを設定します。

データベース・パスワード・プラグインに必要なAPI

このプラグインには、少なくとも2つの関数APIが必要です。これらのAPIについて、次のように説明します。

getManifest()

各プラグインは、次に示すように、プラグインを記述するJSONスタイル文字列を返すgetmanifestファンクションを公開する必要があります。

{"$schema": "ogg:plugin", "version": "23.4" }

バージョン番号は、Oracle GoldenGateのバージョン番号以下にできます。たとえば、Oracle GoldenGateバージョン23.6を実行している場合、JSON文字列のバージョン番号は23.4、23.5または23.6になります。

getUseridAliasPassword(oggDomain *C.char、oggAlias *C.char、oggUserid *C.char、oggPassword *C.char)

このファンクションは、Oracle GoldenGateによってコールされ、USERIDALIASのパスワードを取得します。

整数値を返します。0は成功を意味し、0以外の値は失敗です。

oggDomain、oggAliasおよびoggUseridは、データベース・ユーザー資格証明を識別するための入力パラメータです。oggPasswordは、ボールトからフェッチされたパスワードを返す出力パラメータです。

サード・パーティVaultからデータベース・パスワードを格納およびアクセスするためのデータベース・パスワード・プラグインの構成

選択したサード・パーティ・ボールトからシークレット・パスワードを作成、格納および取得するには、独自のカスタム・コードを記述する必要があります。このコードでは、Oracle GoldenGate Service Managerからプラグインをサービスとしてアクティブ化するために使用される共有ユーザー・ライブラリを生成する必要があります。プラグインがアクティブ化されると、Oracle GoldenGateからデータベース接続を確立するときに、サード・パーティのボールトにアクセスして、格納されたシークレット・パスワードを取得できます。Oracle GoldenGateは、そのUSERIDを別名としてdomain_name.alias_nameの資格証明ストアに格納します。domain_nameおよびalias_nameは、プラグインをコールするための入力パラメータとして使用されます。たとえば、ドメイン名がOracleGoldenGateで、別名がggeastadminの場合、シークレット名はOracleGoldenGate.ggeastadminになります。プラグインは、ボールトからシークレット(パスワード)を取得するシークレット名を識別します。

カスタム・コードは、共有ユーザー・ライブラリにコンパイルできるかぎり、任意の言語で記述できます。使用できる最も一般的な言語は、GoLang、C/C++およびPythonです。

次の図は、データベース・パスワード・プラグインをOracle GoldenGateとともに使用してサード・パーティ・ボールトからのデータベース接続を設定する場合のワークフローを示しています。USERIDALIASはOracle GoldenGate資格証明ストアに格納され、シークレット・パスワードはサード・パーティのボールトに格納されます。

この図は、Oracle GoldenGateパスワード・プラグイン・コンポーネントが、データベースにログインするためのパスワードを格納するサード・パーティ・ボールトを含む新しいワークフローでどのように機能するかのステップバイステップのプロセスを示しています。

次のステップを使用して、サード・パーティ・ボールトにデータベース・パスワードを格納し、Oracle GoldenGateからデータベース接続を認証するために取得するためのデータベース・パスワード・プラグインを構成します。

  1. GG Service Manager Home/var/lib/plugins/ディレクトリにあるデータベース・パスワード・プラグインを見つけます。デフォルトでは、このディレクトリの下にライブラリはありません。

    ノート:ライブラリ・ファイル名には制限はありませんが、この場所に存在する最初のライブラリ・ファイルのみがプラグインによって選択されます。

  2. プラグインで使用される関数APIを確認します。詳細は、データベース・パスワード・プラグインに必要なAPIを参照してください。

  3. コードを記述してコンパイルし、データベース・パスワード・プラグインのアクティブ化に使用する共有ユーザー・ライブラリを作成します。データベース・パスワード・プラグインの設定に使用しているサード・パーティ・ボールトに基づいて、コードを記述してコンパイルする必要があります。

  4. コンパイルされたユーザー・ライブラリをService_Manager_Home/var/lib/plugins/ディレクトリにコピーします。

  5. REST APIコマンドを実行して、Service Managerで新しいサービスとしてプラグインをアクティブ化します。Service Managerがポート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"}'

    プラグインのステータスは、次の図に示すように、アクティブ化後にService Managerから表示できます。サービスは、「サービス」で「プラグイン・サービス」として表示できます。

    データベース・パスワード・プラグインは、有効にすると「サービス・マネージャ・サービス」画面から表示されます。

    ノート: NGINXまたはセキュア・デプロイメントを使用している場合は、httpのかわりにhttpsを使用し、コマンドラインで適切なCA証明書パスを使用する必要があります。

  6. 必要に応じて、サード・パーティ・ボールトの環境変数を設定し、サービス・マネージャを再起動します。

  7. サード・パーティ・ボールトを構成し、その中にパスワードを格納します。

  8. 管理クライアントを実行し、PLUGINオプションまたは以前に使用したNOPASSWORDオプションを使用してデータベース・ログイン資格証明を設定し、データベースへの接続が成功したことをテストします。次の例は、この構成を示しています。

    a. デプロイメントに接続します。

     OGG (not connected) 1> CONNECT http://127.0.0.1:9011 AS oggadmin

    b. 資格情報を追加します。

    • Pluginオプションを使用すると、次のようになります。

      OGG (http://127.0.0.1:9011 Deployment) 2> ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 PLUGIN ALIAS ggeastadmin

      出力:

      2026-04-02T18:34:14Z  INFO OGG-15114  Credential store altered.
      Credential Type: Plugin
    • PLUGIN SECRETオプションを使用すると、次のようになります。

      OGG (http://127.0.0.1:9011 Deployment) 2> ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 PLUGIN SECRET abc ALIAS ggeastadmin

      出力:

      2026-04-02T18:34:14Z  INFO OGG-15114  Credential store altered.
      Credential Type: Plugin Secret
    • 次のコマンドを使用して、従来の NOPASSWORDオプションを使用します。

      ALTER CREDENTIALSTORE ADD USER ggeastadmin@//dbms:1521/ORCLPDB1 NOPASSWORD ALIAS u1alias;

    c. 資格証明別名を使用してデータベースにログインします。

     OGG (http://127.0.0.1:9011 Deployment) 3> DBLOGIN USERIDALIAS ggadmin

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を使用してDatabase Password Pluginを設定するためのワークフローを示しています。

Oracle GoldenGateからデータベースに接続するためにOCI Vaultを使用してデータベース・パスワード・プラグインを構成するためのワークフロー。

  1. OCIボールトにパスワードを作成します。

  2. このデータベース・ユーザー`ggeastadmin`のパスワードを保持するシークレットがOCI Vaultに作成されていることを確認します。シークレット名が予期されるネーミング規則(たとえば、`domain_name.alias_name`の形式の`OracleGoldenGate.ggeastadmin`)と一致していることを確認してください。![OCI Vaultでは、シークレット名が予期されるネーミング規則(たとえば、domain_name.alias_nameの形式のOracleGoldenGate.ggeastadmin)と一致する必要があります。](images/vault-1.png " ")
  3. GG Service Manager Home/var/lib/plugins/ディレクトリにあるデータベース・パスワード・プラグインを見つけます。デフォルトでは、このディレクトリの下にライブラリはありません。

    ノート:ライブラリ・ファイル名には制限はありませんが、この場所に存在する最初のライブラリ・ファイルのみがプラグインによって選択されます。

  4. プラグインで使用する必要がある関数APIを確認します。詳細は、データベース・パスワード・プラグインに必要なAPIを参照してください。

  5. OGG_HOME/src/PluginExamples/OCIVault/OCIVault.goからサンプル・コードにアクセスし、共有ユーザー・ライブラリを生成します。

  6. OGG_HOME/src/PluginExamples/OCIVault/OCIVault.goからmakeコマンドを実行して、コードをコンパイルします。これにより、libOCIVault.soという名前のユーザー・ライブラリが生成されます。

  7. ユーザー・ライブラリlibOCIVault.soをService_Manager_Home/var/lib/plugins/ディレクトリにコピーします。

  8. REST APIコマンドを発行して、このプラグインをサービス・マネージャの新しいサービスとしてアクティブ化します。Service Managerがポート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"}'

    プラグインのステータスは、次の図に示すように、アクティブ化後にService Managerから表示できます。サービスは、「サービス」で「プラグイン・サービス」として表示できます。

    データベース・パスワード・プラグインは、有効にすると「サービス・マネージャ・サービス」画面から表示されます。

    ノート: NGINXまたはセキュア・デプロイメントを使用している場合は、httpのかわりにhttpsを使用し、コマンドラインで適切なCA証明書パスを使用する必要があります。

  9. Service Manager Webインタフェースで、OCI_AUTHおよびOCID_VAULT_OCID環境変数を次の値に設定します。

    • OCI_AUTH = instance_principal: この例では、instance_principal認証メソッドが使用されています。ただし、Database Password Pluginでは、OCI Vaultの次の認証方法がサポートされます。

      • instance_pricinpal: Instance Principal認証。

      • DEFAULT: OCI構成ファイルのデフォルト・プロファイル。

      • カスタマイズ名: OCI構成ファイル内のカスタマイズされたプロファイル。

      • OCID_VAULT_OCID = ocid1.vault.oc1-us-sanjose-1.exxxxxxxxxxxxxxxxxx42upinp4mfxwta: この値はステップ2から導出されます。

        これらの環境変数は両方とも、サービス・マネージャの構成の環境変数セクションで正しく設定されている必要があります。

        環境変数OCI_AUTHおよびOCI_VAULT_OCIDを設定します。

        ノート: NGINXまたはセキュア・デプロイメントを使用している場合は、httpのかわりにhttpsを使用し、コマンドラインで適切なCA証明書パスを使用する必要があります。

  10. サービス・マネージャを再起動して、設定をアクティブ化します。

  11. Oracle GoldenGate Service Managerが実行されているVMインスタンスを識別します。

  12. VMインスタンスを動的グループに追加して、instance_principal認証を機能させます。

  13. VMインスタンスのタグ(EASTVaultTestなど)を割り当てます。これにより、動的グループの作成が容易になります。詳細は、動的グループの管理を参照してください。動的グループには、そのボールトのシークレットを使用するポリシーが必要です。

  14. この動的グループがシークレット・リソース(シークレット・パスワード)を使用できるようにするポリシーを作成します。ボールト・サービスへのアクセスを制御するポリシーの作成の詳細は、Vaultサービスの詳細を参照してください。

    OCI Vaultからシークレット・パスワードにアクセスするためのポリシー

  15. 次の例に示すように、管理クライアントを実行して、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.

Oracle Key Vaultからデータベース・パスワードを格納およびアクセスするためのデータベース・パスワード・プラグインの構成

Oracle GoldenGate 23.5以降のリリースには、サードパーティ・ボールトからデータベース資格証明を取得するためのカスタム・コードを記述し、事前定義済APIの資格証明をOracle GoldenGateに返すことができるプラグイン・サービスが含まれています(「サード・パーティVaultからデータベース・パスワードを格納およびアクセスするためのデータベース・パスワード・プラグインの構成」を参照)。この機能には、Oracle Key Vaultからパスワードを管理するためにOracle GoldenGateで構成できるlibokvoggdbpwd.soライブラリが含まれています。

次の図は、プラグイン・サービスを構成し、OKVプラグイン・ライブラリを使用してOracle Key Vaultサーバーからデータベース・パスワードをリクエストおよび取得するための、Oracle GoldenGateとOracle Key Vaultの間のワークフローを示しています。

Oracle GoldenGateプロセスのOKVからデータベース・パスワードを取得するようにプラグイン・サービスを構成するプロセスを示すワークフロー。

Oracle Key Vaultからデータベース・パスワードを格納および取得するプロセスは、次のようにまとめることができます。

  1. Oracle GoldenGate管理者は、RESTfulサービス・ユーティリティを使用して、Oracle GoldenGateパスワードをOracle Key Vaultにアップロードします。

  2. Oracle GoldenGateは、libokvoggdbpwd.soプラグイン・ライブラリを使用して、Oracle Key Vaultサーバーからデータベース資格証明をリクエストします。このパスワードは、バックエンド検証の成功後にOKVサーバーからフェッチされます。

  3. パスワードの取得後、Oracle GoldenGateプロセスはリモートで格納されたパスワードを使用してデータベースに接続できます。

Oracle GoldenGateデータベースのパスワードの格納および取得のためのこの機能を実装する方法の詳細は、『Oracle Key Vault管理者ガイド』のOracle GoldenGateパスワードの管理の集中化に関する項を参照してください。