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

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

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

この項では、Oracle GoldenGateでデータベース接続を確立する際に、Oracle GoldenGateでデータベース・パスワード・プラグインをアクティブ化し、それを使用してシークレット・パスワードを取得するためのワークフローについて説明します。要件に応じて、次のトピックに示されているステップに従います:

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

または

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

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

このプラグインには少なくとも2つの関数APIが必要です。これらのAPIを次に示します:

getManifest()

各プラグインは、次のようなプラグインを表すJSONスタイルの文字列を返すgetmanifest関数を公開する必要があります:

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

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

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

この関数は、USERIDALIASのパスワードを取得するためにOracle GoldenGateによってコールされます。

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

oggDomainoggAliasおよび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資格証明ストアに格納され、シークレット・パスワードはサードパーティ・ボールトに格納されます。


この図は、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コマンドを実行して、サービス・マネージャでプラグインを新しいサービスとしてアクティブ化します。サービス・マネージャがポート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証明書パスを使用する必要があります。

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

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

  8. 管理クライアントを実行し、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にデータベース・パスワード・プラグインを設定するためのワークフローを示しています:


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

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

  2. このデータベース・ユーザーggeastadminのパスワードを保持するシークレットがOCI Vaultに作成されていることを確認します。シークレット名が、domain_name.alias_nameという形式のOracleGoldenGate.ggeastadminなど、想定される命名規則に適合していることを確認します。


    OCI Vaultでは、シークレット名は想定される命名規則(domain_name.alias_name形式のOracleGoldenGate.ggeastadminなど)に適合している必要があります。

  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.soService_Manager_Home/var/lib/plugins/ディレクトリにコピーします。

  8. 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証明書パスを使用する必要があります。

  9. サービス・マネージャ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から導出されます。

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


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

    ノート:

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

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

  11. Oracle GoldenGateのサービス・マネージャが実行されているVMインスタンスを識別します。

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

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

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


    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.