24 Oracle Key Vault統合アクセラレータ

Oracle Key Vaultには、ユースケースとKey Vaultの統合を迅速にスピンアップするためのアクセラレータが用意されています。アクセラレータは、提供されたまま使用することも、アプリケーションのニーズにあわせて拡張して使用することもできます。

統合アクセラレータは、Oracle Key Vault管理コンソールからダウンロードできます。Oracle Key Vaultには、次の統合アクセラレータが用意されています:

Oracle GoldenGateのパスワード管理の一元化

21.11リリース以降のOracle Key VaultにはGoldenGateパスワード・プラグインが用意されています。この機能を使用して、Oracle Key VaultにOracle GoldenGateのパスワードを格納できます。

Oracle GoldenGateのパスワード管理の一元化について

この機能により、Oracle GoldenGateプロセスで使用されるパスワードの管理が一元化されます。

Oracle GoldenGateは、データ・レプリケーション機能で業界をリードしています。レプリケーション・タスクを実行するには、Oracle GoldenGateプロセスがローカル・ウォレット(資格証明ストア)に格納されている資格証明を使用して、データベースにログインする必要があります。しかし、ローカルでのパスワード詳細の格納が許可されておらず、Oracle GoldenGateの外部のボールトにパスワードを格納する必要がある場合があります。そのため、Oracle GoldenGateがパスワードを取得してデータベースに接続できるようにするにための統合方法が必要になります。

バージョン23.5以降のOracle GoldenGateには、お客様がカスタム・コードを記述してサード・パーティのボールトから資格証明を取得して、事前定義済のAPIで資格証明をOracle GoldenGateに戻すことができる、使いやすいプラグイン・ライブラリが含まれています。この機能には、Oracle Key Vaultでパスワードを管理するためにOracle GoldenGateで構成できるライブラリであるlibokvoggdbpwd.soが含まれます。

ノート:

Oracle GoldenGateシステムがOracle Key Vaultからパスワードをフェッチするには、Oracle Key Vaultシステムが稼働している必要があります。

Oracle Key VaultへのOracle GoldenGateパスワードの格納

このトピックでは、Oracle Key VaultにOracle GoldenGateのパスワードを格納するプロセスの概要を示します。

Oracle Key VaultにOracle GoldenGateのパスワードを格納するプロセスの概要は、次のようにまとめることができます:
  1. Oracle GoldenGate管理者が、RESTソフトウェアを使用してOracle GoldenGateのパスワードをOracle Key Vaultにアップロードします。
  2. Oracle Key Vaultがlibokvoggdbpwd.soプラグイン・ライブラリを介してOracle GoldenGateからデータベース資格証明のリクエストを受信すると、バックエンドの検証が成功した後にOracle Key Vaultからパスワードがフェッチされて、リモートに格納されているパスワードを使用してOracle GoldenGateがデータベースに接続できるようになります。

ノート:

Oracle Key Vaultを介したこのパスワード・セキュリティにより、Oracle以外のデータベースをレプリケートするOracle GoldenGateの実装も保護できます。

パスワード・プラグインのダウンロード

Oracle Key Vault管理コンソールからパスワード・プラグインをダウンロードする方法について学習します。

パスワードを構成するには、Oracle Key Vault管理コンソールからパスワード・プラグインをダウンロードします。
  1. Oracle Key Vault管理コンソールに接続します。
    たとえば:
    https://192.0.2.254
    ログイン・ページが表示されます。ログインしないでください
  2. 「Login」の下の右下隅で、「Endpoint Enrollment and Software Download」をクリックします。
    「Enroll Endpoint & Download Software」ページが表示されます。

  3. ページ上部の「Download Integration Accelerator」タブをクリックします。
  4. 「Integration Accelerator」ドロップダウン・メニューから「GoldenGate Password Plugin」パッケージを選択します。
  5. 「Download」をクリックします。
  6. okv_ogg_password_plugin.zipファイルを目的の場所に保存します。このファイルには次のものが含まれます:
    • README.txt: Oracle GoldenGateで libokvoggdbpwd.soファイルをプラグイン・ライブラリとして設定および構成する手順が含まれています。
    • libokvoggdbpwd.so: このファイルがOracle GoldenGate環境でプラグイン・ライブラリとして構成されます。Oracle GoldenGateはデータベースにログインするために、このプラグイン・ライブラリを使用して、Oracle Key Vaultからデータベース・ユーザー・パスワードをフェッチします。

前提条件

Oracle GoldenGateプロセスで使用されるパスワードの管理を一元化するには、次の前提条件が必要です。

  1. Oracle Key Vault 21.11以上にエンドポイントをエンロールします。Oracle Key Vaultパスワード・プラグイン・ライブラリをプロビジョニングするウォレットに対して、少なくとも読取りアクセス権があることを確認します。このプラグインが動作するためには、自動ログイン・エンドポイントを必ずエンロールしてください。

    ノート:

    Oracle Key Vaultのパスワード・プラグイン・ライブラリlibokvoggdbpwd.soは、Linuxプラットフォームでのみ動作します。したがって、エンドポイントの作成時に、プラットフォームとしてLinuxを選択していることを確認してください。また、LinuxプラットフォームにOracle GoldenGateが設定されていることも確認してください。詳細は、「エンドポイントのエンロールとプロビジョニングについて」を参照してください
  2. Java 8以上があることを確認します。
  3. 環境変数OKV_HOMEが適切に設定されていることを確認してください。$OKV_HOMEは、エンドポイントのインストール時に-dオプションで指定されたエンドポイント・ソフトウェアのインストール先ディレクトリです。
  4. okvclient.oraファイルが${OKV_HOME}/conf/パスで使用可能であることを確認します。これはエンドポイント・エンロールの一部として作成されます。
  5. okv_ogg_password_plugin.zipファイルを$OKV_HOMEに解凍します。
    Bash UNIXシェルの場合:
    $ unzip okv_ogg_password_plugin.zip -d $OKV_HOME
    okv_ogg_password_plugin.zipファイルには、次のものが含まれます:
    • goldengate_password_plugin/lib/libokvoggdbpwd.so

      このライブラリは、Oracle Key Vault C-SDKを使用して作成されており、Oracle Key Vaultの自動ログイン・エンドポイントに対してのみ機能します。

      トレースは、$OKV_HOME/conf/okvclient.oraファイルの_TRACE_LEVELパラメータによって異なります:
      • 0に設定すると、libokvoggdbpwd.soからトレース・ファイルは生成されません。
      • 0より大きく設定すると、$OKV_HOME/conf/okvclient.oraファイルの_TRACE_DIRパラメータで指定されたディレクトリにトレース・ファイルが生成されます。ディレクトリが存在しない場合は、$OKV_HOME/logディレクトリにトレース・ファイルが生成されます。トレース・ファイルの名前はokv_csdk_<pid>.trcです。
    • goldengate_password_plugin/README

      共有ライブラリlibokvoggdbpwd.soをOracle GoldenGateのパスワード・プラグインとして設定および構成する手順が含まれています。

Oracle Key VaultへのOracle GoldenGateデータベース・ユーザー・パスワードのアップロード

Oracle GoldenGateデータベース・ユーザー・パスワードをOracle Key Vaultにアップロードするには、次のステップを実行します。

データベース・ユーザー・パスワードのアップロードは、パスワードがアップロードされるウォレットに対する読取り、書込みおよび管理アクセス権限を持つ別のエンドポイントを使用して実行できます。
Oracle GoldenGateプロセスが libokvoggdbpwd.soプラグイン・ライブラリを使用してパスワードをフェッチするエンドポイントには、パスワードがアップロードされたウォレットに対する読取りアクセス権限が少なくとも必要です。
  1. okvrestclipackage.zipのファイルが$OKV_HOMEに解凍されていることを確認します。
    Bash UNIXシェルの場合:
    $ unzip okvrestclipackage.zip -d $OKV_HOME
    $OKV_HOMEは、libokvoggdbpwd.soパスワード・プラグイン・ライブラリを使用してOracle Key Vaultからパスワードをフェッチするエンドポイントと同じエンドポイントにすることも、別のエンドポイントにすることもできます。

    Oracle Key Vault RESTfulサービス・ユーティリティのダウンロードの詳細は、Oracle Key Vault RESTfulサービス管理者ガイドを参照してください。

  2. JAVA_HOME環境変数が、JDK 8があるシステムを指していることを確認します。
  3. データベース・ユーザー・パスワードをシークレット・データとしてOracle Key Vaultにアップロードするために、Oracle Key Vault RESTFulサービス・ユーティリティを設定するすべてのステップが完了していることを確認します。
  4. Oracle GoldenGateで使用されるデータベース・ユーザー・パスワード(シークレット・データ)をOracle Key Vaultにアップロードします。
    Bash UNIXシェルの場合:
    $ cd $OKV_HOME/bin
    $ okv managed-object secret register --type PASSWORD --object 
    <path_to_file_having_db_password> --activation-date now --wallet 
    <wallet_name> --custom-attribute '[ "x-OGG-DBPwd-
    Domain:<db_user_domain>","x-OGG-DBPwd-Alias:<db_user_alias>","x-
    OGG-DBPwd-UserId:<db_user_id>","x-OKV-Obj-
    Version:<object_version#>" ]'
    

    必須入力:

    • <path_to_file_having_db_password>: Oracle GoldenGateデータベース・ユーザー・パスワードを含むオブジェクト・ファイルのパス。

      このファイルは、パスワードがOracle Key Vaultにアップロードされた後に削除できます。

    • <db_user_domain>: データベース・ユーザーのドメイン名。
    • <db_user_alias>: データベース・ユーザーの別名。
    • <db_user_id>: データベース・ユーザーのユーザーID。

    オプション入力:

    • <wallet_name>: エンドポイントが適切なアクセス権限(読取り、書込み、管理)を持つ必要があるウォレットの名前。
    • <object_version#>: オブジェクトのバージョン番号。この値は、ゼロ以外の正の数値である必要があり、データベース・ユーザーごとのパスワードの履歴が管理されます。このプラグインは、version#が最も大きいパスワードのみをフェッチします。したがって、Oracle Key Vaultに登録されている最新のパスワードには、以前のversion#よりも大きい値が必要です。

      データベース・ユーザー・パスワード・シークレットを登録する際にx-OKV-Obj-Version:<object_version#>が指定されていない場合は、次に大きなバージョン値をOracle Key Vaultサーバーが特定して、x-OKV-Obj-Versionカスタム属性の値として割り当てます。

    たとえば、すべてのパラメータに値を含めると、このステップの最初にあるコマンドを次のように指定できます:
    okv managed-object secret register --type PASSWORD --object 
    /tmp/db_user_password.txt --activation-date now --wallet 
    goldengate_wallet --custom-attribute '[ "x-OGG-DBPwd-
    Domain:OracleGoldenGate","x-OGG-DBPwd-Alias:ggadmin","x-OGG-DBPwd-
    UserId:ggadmin@//dbms:1521/ORCLPDB1","x-OKV-Obj-Version:1" ]'
    次のような出力が表示されます:
    {
         "result": "Success",
         "value": {
          "uuid": "EIC34EBE-99D1-4F15-93D8-1B7513DD8634"
          }
    }
    

    Oracle GoldenGateで使用されるすべてのデータベース・ユーザー資格証明に対して、このステップを実行する必要があります。

    前述の出力とは別に、次のような追加の確認をOracle Key Vaultに表示できます:

    「Reports」タブから、左側のペインで「Audit Trail」をクリックすると、「Operation」列に指定された値とともに次のレコードが表示されます。
    • Register: これにより、Oracle GoldenGateデータベース・パスワードがシークレットとして正常に登録されたことを確認します。
    • Locate: エンドポイントが資格証明を見つけようとしたことを示します。
    • Get: 資格証明がエンドポイントによって正常にフェッチされたことを示します。

    ノート:

    libokvoggdbpwd.soプラグイン・ライブラリで発生する可能性のある問題をデバッグするには、okvclient.oraファイルで、Oracle Key Vaultデプロイメント・エンドポイントの次のパラメータの値を構成します:

    • _TRACE_DIR: トレース・ファイルを配置するディレクトリ・パスを指定します。
    • _TRACE_LEVEL: このパラメータの値を16に設定します。

Oracle GoldenGateのパスワード・プラグインとしてのOracle Key Vault共有ライブラリの構成

このトピックでは、Oracle GoldenGateがOracle Key Vaultからデータベース・ユーザー・パスワード(シークレット・データ)をフェッチできるようにするステップについて説明します。

Oracle GoldenGateが共有ライブラリlibokvoggdbpwd.soを使用してOracle Key Vaultからデータベース・ユーザー・パスワード(シークレット・データ)をフェッチできるようにするには、このトピックのステップを実行します。
環境内のSM_USERNAME (サービス・マネージャ・ユーザー名)、SM_PASSWORD (サービス・マネージャ・パスワード)、HOST_SERVER (GoldenGateデプロイメントのURL)およびSM_PORT (サービス・マネージャ・ポート番号)変数を設定して、次のコマンドを実行します。
  1. 共有ライブラリ$OKV_HOME/goldengate_password_plugin/lib/libokvoggdbpwd.soをパス<Oracle GoldenGate Service Manager Home>/var/lib/plugins/に配置します。

    Oracle GoldenGateでは、ライブラリ・ファイル名に制限はありません。ただし、このプラグインはパス内の最初のファイルだけを取得します。したがって、libokvoggdbpwd.soのみが存在し、以前に使用したライブラリは削除されていることを確認します。

  2. プラグイン・サービスを開始します。
    デプロイメントの一部としてPluginsrvrが追加されていない場合は、次のPOSTコマンドによって、実行状態で追加されます。
    Bash UNIXシェルの場合:
    $ curl -k -u $SM_USERNAME:$SM_PASSWORD 
    $HOST_SERVER:$SM_PORT/services/v2/deployments/ServiceManager/services/pluginsrvr 
    -X POST -d '{ "config":"external", "critical":true, "status":"running", "enabled":true }'
    デプロイメントの一部としてPluginsrvrが停止状態で追加されている場合は、次のPATCHコマンドによって起動されます。
    Bash UNIXシェルの場合:
    $ curl -k -u $SM_USERNAME:$SM_PASSWORD 
    $HOST_SERVER:$SM_PORT/services/v2/deployments/ServiceManager/services/pluginsrvr -X PATCH -d '{ "enabled":true, "status":"running" }'
  3. <Oracle GoldenGate Service Manager Home>/var/lib/plugins/にコピーされたプラグインをサービス・マネージャ配下の新しいサービスとしてアクティブ化します。
    Bash UNIXシェルの場合:
    $ curl -ksvu $SM_USERNAME:$SM_PASSWORD 
    $HOST_SERVER:$SM_PORT/services/v2/deployments/ServiceManager/services/pluginsrvr 
    -XPOST --data '{ "$schema":"ogg:service", "config":"external", "enabled":true, "critical":true, "status":"running" }'
  4. サービス・マネージャで、libokvoggdbpwd.soライブラリに必要なOracle Key Vault環境変数を構成します。
    次のコマンドの<value of OKV_HOME env variable>は、OKV_HOME環境変数の値で必ず置き換えてください。OKV_HOMEは、Oracle GoldenGateプロセスがOracle Key Vaultからデータベース・ユーザー・パスワードをフェッチするためにプロビジョニングされたエンドポイント・ソフトウェアの場所です。
    Bash UNIXシェルの場合:
    $ curl -ksvu $SM_USERNAME:$SM_PASSWORD 
    $HOST_SERVER:$SM_PORT/services/v2/deployments/ServiceManager -X 
    PATCH -H 'Accept: application/json' -H 'X-Requested-With: 
    XMLHttpRequest' -H 'Content-Type: application/json' --data-raw '{ 
    "environment":[{"name":"OKV_HOME","value":"<value of OKV_HOME env variable>"}] }' --compressed --insecure
  5. サービス・マネージャを再起動します。
    Bash UNIXシェルの場合:
    $ curl -ksvu $SM_USERNAME:$SM_PASSWORD 
    $HOST_SERVER:$SM_PORT/services/v2/deployments/ServiceManager -X 
    PATCH -H 'Accept: application/json' -H 'X-Requested-With: 
    XMLHttpRequest' -H 'Content-Type: application/json' --data-raw '{ 
    "status":"restart" }' --compressed –insecure
  6. サービス・マネージャが再起動するまで、約20秒間待ちます。
    Oracle Key Vaultの環境変数がサービス・マネージャに構成されていることを確認するには、$SM_USERNAMEおよび$SM_PASSWORDを使用してサービス・マネージャ・デプロイメントのWebインタフェースにログインし、「Deployments」 > 「ServiceManager」 > 「Configuration」に移動して、「Environment Variables」を確認します。環境変数領域が表示されない場合は、「Environment Variables」の横にある「+」をクリックし、環境変数OKV_HOMEとその値を追加します。
  7. libokvoggdbpwd.soが使用可能なプラグインに含まれていることを確認します。
    Bash UNIXシェルの場合:
    $ curl -ksvu $SM_USERNAME:$SM_PASSWORD 
    $HOST_SERVER:$SM_PORT/services/v2/installation/plugins -XGET
  8. Oracle GoldenGateでデータベース・ログイン資格証明を設定するために使用するadminclientコマンドライン・ユーティリティをNOPASSWORDオプションで実行して、データベースに正常に接続されることをテストします。
    次に、この構成の例を示します:
    OGG (not connected) 1> CONNECT http://127.0.0.1:9011 AS oggadmin
    デフォルトのデプロイメント'Deployment'を使用
    OGG (http://127.0.0.1:9011 Deployment) 2> ALTER CREDENTIALSTORE ADD USER ggadmin@//dbms:1521/ORCLPDB1 ALIAS ggadmin 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.
    OGG (http://127.0.0.1:9011 Deployment as ggadmin@ORCLCDB) 4>
    Oracle GoldenGateに必要な詳細または追加のステップについては、Oracle GoldenGateのデータベース・パスワード・プラグインを使用したデータベース接続の認証のドキュメントを参照してください。

Oracle DBMS_CRYPTOのキー管理統合アクセラレータ

リリース21.10以降、Oracle Key Vaultには、Oracle Key VaultでのDBMS_CRYPTO操作で使用される暗号化キーを管理するために、Oracle DBMS_CRYPTOのキー管理統合アクセラレータが用意されています。

Oracle DBMS_CRYPTOパッケージには、暗号化操作と復号化操作を実行するためのPL/SQLインタフェースが用意されています。PL/SQLアプリケーションでは、DBMS_CRYPTO操作で使用される暗号化キーを安全に管理する必要があります。この統合アクセラレータを使用すると、Oracle Key VaultでのOracle DBMS_CRYPTO操作で使用される対称キーを管理できます。この統合アクセラレータ・パッケージには、Oracle Key Vault JAVA SDKプログラム上に構築されたPL/SQLラッパーが用意されています。

Oracle DBMS_CRYPTOのキー管理統合アクセラレータのダウンロード

Oracle DBMS_CRYPTOのキー管理統合アクセラレータは、Oracle Key Vault管理コンソールからダウンロードできます。

  1. Oracle Key Vault管理コンソールに接続します。

    たとえば:

    https://192.0.2.254
    Oracle Key Vault管理コンソールへのログイン・ページが表示されます。ログインしないでください。
  2. ログイン・ページの右下隅にある「Login」で、「Endpoint Enrollment and Software Download」をクリックします。
    「Enroll Endpoint & Download Software」ページが表示されます。

    2110_dbms_crypto.pngの説明が続きます
    図2110_dbms_crypto.pngの説明

  3. ページ上部の「Download Integration Accelerator」タブをクリックします。
  4. 「Download Integration Accelerator」ページで、「Integration Accelerator」ドロップダウン・メニューから「Key Management for DBMS_CRYPTO」パッケージを選択します。
  5. 「Download」をクリックします。
  6. okv_key_management_dbms_crypto.zipファイルを目的の場所に保存します。

Oracle DBMS_CRYPTOのキー管理統合アクセラレータの使用

DBMS_CRYPTOのキー管理統合アクセラレータを使用する方法について学習します。

Oracle DBMS_CRYPTOのキー管理統合アクセラレータを使用するための前提条件

Oracle DBMS_CRYPTOのキー管理統合アクセラレータの使用を開始する前に、次の前提条件を満たしていることを確認します。

  • サンプルOracle DBMS_CRYPTOアプリケーションを実行する予定のOracle Key Vault 21.10以降に、Oracle Databaseをエンドポイントとしてエンロールします。

  • Java 8以降があることを確認します。
  • Oracle Databaseに最新のOracle JVMがパッチ適用されていることを確認します。
  • OKV_HOME環境変数を適切に設定します。

    ノート:

    $OKV_HOMEは、エンドポイントのインストール時に-dオプションで指定したエンドポイント・ソフトウェアの宛先ディレクトリです。
  • okvclient.oraファイルが使用可能であり、エンドポイント・エンロールの一部として作成されているかどうかを確認します。okvclient.oraファイルは通常、$OKV_HOME/conf/okvclient.oraにあります。
  • okv_jsdk.zip$OKV_HOMEに解凍されていることを確認します。

    Bash UNIXシェルの場合:
     $ cd $OKV_HOME
     $ unzip -o okv_jsdk.zip

    ノート:

    Oracle Key Vault Java SDKのダウンロードの詳細は、『Oracle Key Vault開発者ガイド』を参照してください
  • okv_key_management_dbms_crypto.zipの内容を別のフォルダに抽出します。

    okv_key_management_dbms_crypto.zipファイルの内容は、次のとおりです:

    • setup_java_permissions.sql: このSQLスクリプトは、データベース・ユーザーに必要なJavaセキュリティ権限を設定します。
    • KeyManager.java: このプログラムは、Oracle Key Vault Java SDKのAPIを使用して、Oracle Key Vaultサーバーの対称キーを作成、フェッチおよび破棄します。
    • okv_key_mgmt.pkb: Oracle Key Vaultの対称キーの作成、フェッチおよび破棄操作を実行するためにOracle Key Vault Java SDK APIを(KeyManager.javaを介して)起動するPL/SQLラッパー。
    • dbms_crypto_using_okv_keymgmt.sql: Java SDKを使用してOracle Key Vaultでのキー管理を示すためのOracle DBMS_CRYPTOのユースケース。

      このSQLスクリプトは、インストールされているOracle Key Vaultエンドポイント・ソフトウェアの自動ログイン・ウォレットに対してのみ機能します。エンドポイントがパスワードで保護されている場合は、このSQLスクリプトにある'endpt_pswd'変数にエンドポイントのパスワードを設定します。さらに次のように、endpt_pswdが、SQLスクリプトのokv_key_mgmtパッケージ関数への入力として渡されていることを確認します:

      • -- create key : okv_key_mgmt.create_key(key_name, endpt_pswd);
      • -- fetch key : okv_key_mgmt.fetch_key(key_name, endpt_pswd);
      • -- destroy key : okv_key_mgmt.destroy_key(key_id, endpt_pswd);

      Oracle Key Vaultで作成されたキーにカスタム名を指定する場合は、このSQLファイルにある'key_name'変数に名前の値を設定します。デフォルトでは、キー名はdbms_crypto_keyとして、SQLスクリプトのcreate_key()関数およびfetch_key()関数に渡されます。

    • README.txt: サンプルOracle DBMS_CRYPTOアプリケーションを設定および実行する手順。
Oracle DBMS_CRYPTOのキー管理統合アクセラレータを使用するための環境の準備

Oracle DBMS_CRYPTOのキー管理統合アクセラレータの実行に必要な権限でOracle Database環境を準備していることを確認します。

  1. JAVA_HOME環境変数がJava Development Toolkit (JDK)の場所を指していることを確認します。
  2. Oracle Key Vault Java SDK jar $OKV_HOME/jsdk/lib/okvjsdk.jarが含まれるようにCLASSPATHを設定します。
    Bash UNIXでCLASSPATHを設定します:
    $ export CLASSPATH=$CLASSPATH:$OKV_HOME/jsdk/lib/okvjsdk.jar
  3. 現在のディレクトリ'.'もCLASSPATHに含まれていることを確認します。含まれていない場合は、CLASSPATHの先頭に現在のディレクトリを追加します。

    Bash UNIXシェルで、次のように設定します:

    $ export CLASSPATH=.:$CLASSPATH
  4. KeyManager.javaファイルをコンパイルします。
    現在のディレクトリを、okv_key_management_dbms_crypto.zipファイルを抽出したディレクトリに設定します。
    Bash UNIXで KeyManager.javaをコンパイルします:
    $ cd folder_path
    $ javac KeyManager.java
  5. sysユーザーとしてOracle Databaseにログインし、データベース・ユーザーを設定します。
    次の問合せを使用して、データベース・ユーザーdb_usernameのデフォルトの表領域default_tablespaceを確認します:
    SQL> select default_tablespace from dba_users where username = db_username;

    ノート:

    db_usernameは、必ず大文字にします。
    db_usernameに次の権限を付与します:
    SQL> grant execute on sys.dbms_crypto to db_username;
    SQL> grant create session to db_username;
    SQL> grant create procedure, create table to db_username;
    SQL> alter user db_username quota 100M on default_tablespace;
    SQL> commit;
    SQL> exit;
  6. $ORACLE_HOME/binディレクトリをPATH環境変数に必ず追加します。
  7. データベース・ユーザーdb_username、データベース・ユーザー・パスワードdb_pswdおよびデータベース名db_nameとして、Javaクラス・ファイルKeyManager.classおよび依存JARファイルokvjsdk.jarをOracle Databaseにロードします。
    $ loadjava -user db_username/db_pswd@db_name -verbose $OKV_HOME/jsdk/lib/okvjsdk.jar
    $ cd folder_path
    $ loadjava -user db_username/db_pswd@db_name -verbose KeyManager.class
  8. sysユーザーとしてデータベースにログインし、データベース・ユーザーdb_usernameおよびOKV_HOMEの実際の値を引数として渡して、次のSQLファイルを実行します。
     SQL> @folder_path/setup_java_permissions.sql db_username OKV_HOME;
  9. sysユーザーとしてデータベースにログインし、データベース・ユーザーdb_usernameがOracle Key Vaultとのセキュア・ソケット接続を確立できるようにするために必要な権限を付与します。
    SQL> exec dbms_java.grant_permission( db_username, 'SYS:java.net.SocketPermission', 'Oracle Key Vault IP Address:Port#', 'connect,resolve' );
    SQL> commit;
    SQL> exit;

    ノート:

    マルチマスター・クラスタ・デプロイメントでは、IPアドレスおよびポート番号を使用してクラスタ・ノードごとに権限を付与します。これらのコマンドの入力db_usernameは、必ず大文字にします。

    IPアドレスおよびポート番号情報は、$OKV_HOME/conf/okvclient.oraファイルで入手できます。

    たとえば、各ノードのIPアドレスが100.100.100.101、100.100.100.102および100.100.100.103の3ノードOracle Key Vaultクラスタのエンドポイント構成ファイル$OKV_HOME/conf/okvclient.oraは、次のようになります:

    SERVER=100.100.100.101:5696/CN=server_cert,OU=Key_Vault,O=Oracle,L=Redwood_City,ST=California,C=us,100.100.100.102:5696/CN=node_2_cert,OU=Key_Vault,O=Oracle,L=Redwood_City,ST=California,C=us
    READ_SERVER=100.100.100.103:5696/CN=node_3_cert,OU=Key_Vault,O=Oracle,L=Redwood_City,ST=California,C=us
    

    前述の構成ファイルからIPアドレスおよびポートの詳細を抽出し、次のように、前述のクラスタ例に対してSQLコマンドをsysユーザーとして実行します:

    SQL> exec dbms_java.grant_permission( db_username, 'SYS:java.net.SocketPermission', '100.100.100.101:5696', 'connect,resolve' );
    SQL> exec dbms_java.grant_permission( db_username, 'SYS:java.net.SocketPermission', '100.100.100.102:5696', 'connect,resolve' );
    SQL> exec dbms_java.grant_permission( db_username, 'SYS:java.net.SocketPermission', '100.100.100.103:5696', 'connect,resolve' );
    SQL> commit;
    SQL> exit;

    クラスタ・ノードの追加や削除など、Oracle Key Vaultクラスタ・ノード構成に変更がある場合は、必ずこれらの権限を変更します。

    たとえば、新しいクラスタ・ノード100.100.100.104を追加した場合:

    SQL> exec dbms_java.grant_permission( db_username,'SYS:java.net.SocketPermission', '100.100.100.104:5696', 'connect,resolve' ); 
    SQL> commit; 
    SQL> exit; 

    クラスタ・ノード100.100.100.103を削除した場合:

    SQL> exec dbms_java.revoke_permission( db_username, 'SYS:java.net.SocketPermission','100.100.100.103:5696', 'connect,resolve' );
    SQL> commit;
    SQL> exit;
  10. データベース・ユーザー名およびパスワードを使用してデータベースにログインし、データベース・ユーザーdb_usernameに次の権限を付与して、データベース・ユーザーがOracle Key Vaultとのセキュアな接続を確立するときに、$OKV_HOME/sslファイル下にエンドポイント・ウォレットをロードできるようにします。
    SQL> exec dbms_java.grant_policy_permission( db_username, db_username, 'oracle.security.pki.OracleWalletPermission', 'load' );
    SQL> exec dbms_java.grant_permission( db_username, 'db_username:oracle.security.pki.OracleWalletPermission', 'load', '' );
    SQL> commit;
    SQL> exit;

    ノート:

    これらのコマンドの入力db_usernameは、必ず大文字にします。
  11. データベース・ユーザー名およびパスワードを使用してデータベースに接続し、パッケージokv_key_mgmt.pkbをロードします。
    SQL> @folder_path/okv_key_mgmt.pkb;
    SQL> exit;
    
PL/SQLアプリケーションでのOracle DBMS_CRYPTOのキー管理統合アクセラレータの使用

PL/SQLアプリケーションで、統合アクセラレータによって提供されるPL/SQLパッケージokv_key_mgmtを使用できるようになりました。

okv_key_mgmtパッケージには、キー管理をOracle Key Vaultと統合するための次のファンクションが用意されています。
  • create_key: Oracle Key Vaultで対称キーを作成します。これは、Oracle Key Vault Java SDK APIを使用してOracle Key Vaultで対称キーを作成するKeyManager.java:createKey()をコールするラッパー・ファンクションです。
  • fetch_key: Oracle Key Vaultから対称キーをフェッチします。これは、Oracle Key Vault Java SDK APIを使用してOracle Key Vaultの対称キーをフェッチするKeyManager.java:fetchKey()をコールするラッパー・ファンクションです。
  • destroy_key: Oracle Key Vaultの対称キーを破棄します。これは、Oracle Key Vault Java SDK APIを使用してOracle Key Vaultの対称キーを破棄するKeyManager.java:destroyKey()をコールするラッパー関数です。

okv_key_mgmtパッケージを使用してOracle Key Vaultからキーをフェッチして使用するように、DBMS_CRYPTOを使用して対称キー・ベースの暗号化操作を実行するPL/SQLアプリケーションを変更できます。このようにして、PL/SQLアプリケーションのキー管理を簡素化できます。

okv_key_mgmtパッケージのキー管理ファンクションの使用方法を学習するには、統合アクセラレータに付属するサンプル・アプリケーションdbms_crypto_using_okv_keymgmt.sqlを確認します。

DBMS_CRYPTOのキー管理統合アクセラレータ・パッケージに付属するサンプル・アプリケーションdbms_crypto_using_okv_keymgmt.sqlは実行できます。

  1. 構成済データベースに対するユーザー名およびパスワードを使用してデータベースにログインします。
  2. 次のコマンドを使用して、dbms_crypto_using_okv_keymgmt.sqlファイルを実行します:
    SQL> @folder_path/dbms_crypto_using_okv_keymgmt.sql;

    ノート:

    このSQLスクリプトは、インストールされているOracle Key Vaultエンドポイント・ソフトウェアの自動ログイン・ウォレットに対してのみ機能します。エンドポイントがパスワードで保護されている場合は、このSQLスクリプトにある'endpt_pswd'変数にエンドポイントのパスワードを設定します。さらに次のように、endpt_pswdが、SQLスクリプトのokv_key_mgmtパッケージ関数への入力として渡されていることを確認します:

    • -- create key : okv_key_mgmt.create_key(key_name, endpt_pswd);
    • -- fetch key : okv_key_mgmt.fetch_key(key_name, endpt_pswd);
    • -- destroy key : okv_key_mgmt.destroy_key(key_id, endpt_pswd);

    Oracle Key Vaultで作成されたキーにカスタム名を指定する場合は、このSQLファイルにある'key_name'変数に名前の値を設定します。デフォルトでは、キー名はdbms_crypto_keyとして、SQLスクリプトのcreate_key()関数およびfetch_key()関数に渡されます。

DBMS_CRYPTOのキー管理統合アクセラレータには、Oracle Key VaultでのPL/SQLアプリケーションのキー管理を示す基本ファンクションが用意されています。提供されているJava SDKプログラムKeyManager.javaおよびPL/SQLラッパー・パッケージokv_key_mgmt.pkbを変更して、より高度な使用方法に対応するようにその機能を拡張できます。

ノート:

変更されたバージョンのfetch_key()関数および新しいdestroy_key()関数は、Oracle Key Vault 21.11以降のokv_key_mgmtパッケージに含まれています。Oracle Key Vault 21.10を使用していて、locate_key()関数をokv_key_mgmtパッケージに含める必要がある場合は、Oracle DBMS_CRYPTOのキー管理統合アクセラレータの機能拡張のステップを実行します。

Oracle Key Vaultクラスタ間でのオブジェクトの転送

Oracle Key Vault 21.11リリース以降、Oracle Key Vaultクラスタ間でのキー転送の統合アクセラレータのプレビューがOracle Key Vaultに含まれています。この機能を使用して、1つのOracle Key Vaultクラスタから別のクラスタにセキュリティ・オブジェクトを転送できます。

Oracle Key Vaultクラスタ間でのオブジェクトの転送について

Oracle Key Vault管理者が、ソースOracle Key VaultクラスタからターゲットOracle Key Vaultクラスタに、一時リポジトリを介してオブジェクトをシームレスに転送できます。

この機能を使用すると、クラスタのセキュアなバックアップを保持でき、同時にオブジェクトをターゲット・クラスタに定期的に転送できます。

Oracle Key Vaultクラスタ間のオブジェクト転送操作が自動化および簡素化されるため、この機能は組織にメリットをもたらします。

次のオブジェクト・タイプをソース・クラスタからターゲット・クラスタに転送できます:

  • 対称キー
  • 秘密キー
  • 公開キー
  • 不透明オブジェクト
  • 証明書
  • 証明書リクエスト
  • シークレット

KMIPおよびカスタム属性を含む、転送されたオブジェクトのすべての属性は、転送プロセス中にそのまま維持されます。

UUIDを指定して個々のオブジェクトを転送できますが、ウォレットを使用すれば複数のオブジェクトを転送できます。

ノート:

この機能はプレビュー状態であり、将来のリリースで変更される可能性があります。

キー転送パッケージのダウンロード

転送操作を実行するには、Oracle Key Vault管理コンソールからキー転送パッケージをダウンロードします。

  1. Oracle Key Vault管理コンソールに接続します。
    たとえば:
    https://192.0.2.254
    ログイン・ページが表示されます。ログインしないでください
  2. 「Login」の右下隅で、「Endpoint Enrollment and Software Download」をクリックします。

  3. ページ上部の「Download Integration Accelerator」タブをクリックします。
  4. 「Integration Accelerator」ドロップダウン・メニューからokv_key_transfer_across_clusters.zipパッケージを選択します。
  5. 「Download」をクリックします。
  6. okv_key_transfer_across_clusters.zipファイルを目的の場所に保存します。

前提条件

ソースOracle Key VaultクラスタからターゲットOracle Key Vaultクラスタにセキュリティ・オブジェクトを転送するには、次の前提条件が必要です。

  1. ソース・クラスタとターゲット・クラスタが、同じバージョンのOracle Key Vaultで動作している必要があります。
  2. expectがインストールされており、システム・パスで使用可能であることを確認します。次を実行して、これを確認します:
    $ which expect
    expectがインストールされていない場合は、そのスクリプトをインストールします:
    $ sudo yum install expect
    expectスクリプトのパスをPATH環境変数に追加します。
  3. エンドポイントの設定:
    ソース・クラスタとターゲット・クラスタについて、エンドポイントがプロビジョニングされていること、および必要なオブジェクトとウォレットにそのエンドポイントがアクセスできることを確認します。
  4. RESTfulサービス・ユーティリティの設定:
    1. ソース・クラスタとターゲット・クラスタについて、RESTfulサービス・ユーティリティが設定されていることを確認します。設定手順については、RESTfulサービス管理者ガイドを参照してください。
    2. 両方のクラスタのRESTfulサービス・ユーティリティを、それぞれのエンドポイントを使用するように構成します。
    3. RESTfulサービス・ユーティリティ構成ファイルokvrestcli.iniで、次に示すように[Default]プロファイルのokv_client_config設定を設定します:
      okv_client_config=<absolute path of the okvclient.ora file of the endpoint>

      ノート:

      okvrestcli.iniで指定されているすべてのパスが絶対パスであることを確認します。例: log_property okv_client_configなど。
  5. ディレクトリおよびファイルの命名の制限:
    ダウンロードする際には、objectsまたはpvt_keysという名前のディレクトリが、指定したパスに存在しないことをダウンロードする前に確認してください。スクリプトを実行するときには、これらのディレクトリについて次の点に注意してください:
    1. ダウンロードしたセキュリティ・オブジェクト・ファイルの格納に使用されます。ダウンロードしたオブジェクトのキー・マテリアルも、暗号化された状態で格納されます。
    2. object_register_details.jsonという名前のファイルが、指定したパスに存在しないことを確認してください。このデフォルト・ファイルには、一時的な情報が格納されます。
  6. okv_key_transfer_across_clusters.zipファイルをダウンロードし、それに含まれるすべてのファイルを抽出します。
    $ unzip okv_key_transfer_across_clusters.zip
    okv_key_transfer_across_clusters.zipファイルには、次のものが含まれます:
    • okv_key_transfer.ini - 次のパラメータと、指定したファイルまたはインストールの絶対パスが含まれます:
    1. SOURCE_OKV_RESTCLI_CONFIG: ソース・クラスタのokvrestcli.iniファイル。
    2. TARGET_OKV_RESTCLI_CONFIG: ターゲット・クラスタのokvrestcli.iniファイル。
    3. JAVA_HOME: JDK/JREのインストール。
    4. SOURCE_EP: ソース・クラスタ・エンドポイントのokvclient.oraファイル。
    5. TARGET_EP: ターゲット・クラスタ・エンドポイントのokvclient.oraファイル。
    6. LOG_DIR: ログが格納されるディレクトリ。
    • okv_key_transfer.sh: このスクリプト・ファイルは、Oracle Key Vaultクラスタ間でセキュリティ・オブジェクトを転送します。これは、ソース・クラスタからオブジェクトをダウンロードし、それらをターゲット・クラスタにアップロードします。
    • README.txt: キー転送操作を設定および実行する手順。

キー転送パッケージを使用するための環境の準備

このトピックでは、ソースOracle Key VaultクラスタからターゲットOracle Key Vaultクラスタへの転送プロセスのステージについて説明します。

  1. JAVA_HOME環境変数がJava Development Toolkit (JDK)の場所を指していることを確認します。
  2. okv_key_transfer.shスクリプトに実行権限があることを確認します: $ chmod u+x ./okv_key_transfer.sh
    $ chmod u+x ./okv_key_transfer.sh

転送プロセスの実行

このトピックでは、キー転送パッケージを使用するための環境を準備するステップについて説明します。

転送プロセスの実行には、次のステージが含まれます:
  1. ソース・クラスタで転送キーを作成し、ターゲット・クラスタにそのキーをコピーします。転送キーにより、ターゲット・クラスタに転送されるソース・クラスタ内のオブジェクト・タイプをラップ(暗号化)し、ターゲット・クラスタでアンラップ(復号化)します。okv_key_transfer.shファイルで転送キーを作成します。
  2. オブジェクト(それらの値および属性)が、ソース・クラスタのエンドポイント・ソフトウェアを使用して、中間リポジトリにダウンロードされます。次に、ダウンロードされたオブジェクト値が、転送キーによって暗号化されます。このステップを実行できる回数に制限はありません。
  3. オブジェクトはターゲット・クラスタのエンドポイント・ソフトウェアを介して、中間リポジトリからターゲット・クラスタにアップロードされます。また、以前にアップロードされたオブジェクトは、アップロード・プロセスの現在の実行ではアップロードされません。アップロード・プロセスの後、ファイルは中間リポジトリから削除されます。
  4. 転送キーは破棄されます。

ソースからターゲット・クラスタへのキーの転送

ソース・エンドポイントとターゲット・エンドポイントは、次のステップを実行するのと同じコンピュータ上にある必要があります:

ノート:

エンドポイントがパスワードで保護されている場合は、パスワードの入力を求められる場合があります。
  1. RESTfulユーティリティおよびエンドポイント・ユーティリティを使用して、Oracle Key Vaultサーバーに接続します。
  2. 次のコマンドを実行して、ソース・クラスタおよびターゲット・クラスタに転送キーを作成します:
    ./okv_key_transfer.sh init
    転送キーが正常に作成されたことを示す次のテキストが表示されます:
    Created keys in source and target cluster.
  3. ソース・クラスタから中間リポジトリにファイルをダウンロードします:
    ./okv_key_transfer.sh download --path <path> [--uuid <UUID>] [--wallet <wallet_name>]
    オブジェクトの値は、セキュリティ・リスクを回避するために転送キーで暗号化されます。
  4. ダウンロードしたファイルを中間リポジトリからターゲット・クラスタにアップロードします:
    ./okv_key_transfer.sh upload --path <path> [--uuid <UUID>] [--wallet <wallet_name>]
    秘密キーが最初にアップロードされ、その後にオブジェクトがアップロードされます。
  5. 転送プロセスの設定時に作成した転送キーを破棄します:
    ./okv_key_transfer.sh cleanup

ノート:

前述のステップの再実行では、ソース・クラスタから新規ファイルのみがターゲット・クラスタにアップロードされます。このように、前回の実行でアップロードされたオブジェクトがスキップされるため、アップロード時間が短縮されます。

様々なシナリオでのコマンドおよびログの詳細

このトピックでは、様々なシナリオで実行する必要があるコマンドについて説明します。

コマンド

  • UUIDを使用して単一オブジェクトをダウンロードするには:
    $ ./okv_key_transfer.sh download --path <path> --uuid <UUID>
    オブジェクトは、オブジェクト・タイプに基づいて保存されます:
    • 秘密キーは<path>/pvt_keysに保存されます。
    • 他のオブジェクトは<path>/objectsに保存されます。
  • ウォレットからすべてのオブジェクトをダウンロードするには:
    $ ./okv_key_transfer.sh download --path <path> --wallet <wallet_name>
    オブジェクトは、オブジェクト・タイプに基づいて保存されます:
    • 秘密キーは<path>/<wallet_name>pvt_keysに保存されます。
    • 他のオブジェクトは<path>/<wallet_name>/objects.に保存されます。

    ノート:

    • ファイルには、<UUID>_object_register_details.txtの形式で名前が付きます。
    • <path>は、オブジェクトがダウンロードされる場所の絶対パスにする必要があります。
  • UUIDを使用した単一オブジェクトのアップロード
    $ ./okv_key_transfer.sh upload --path <path> --uuid <UUID> [--wallet <wallet_name>]
    • uuidは、ソース・クラスタ内のオブジェクトの一意の識別子です。
    • ソース・ファイルは、アップロード後に<path>から削除されます。

    ノート:

    --walletオプションを使用してウォレットの一部として以前にダウンロードされたオブジェクトは、ウォレット固有のサブディレクトリに格納されています。このようなシナリオでは、UUIDで特定のオブジェクトをアップロードするときに、<path-to-source-wallet-name>--pathの値として使用します: $ ./okv_key_transfer.sh upload --path <path-to-source-wallet-name> --uuid <UUID>
  • 複数オブジェクトのアップロード:
    $ ./okv_key_transfer.sh upload --path <path> [--wallet <wallet_name>]
    • 最初に、<path>/pvt_keysからすべての秘密キーがアップロードされます。
    • その後、<path>/objectsから他のすべてのオブジェクトがアップロードされます。
    • アップロードの完了後に、<path>からファイルを削除します。

    ノート:

    --walletオプションを使用してウォレットから以前にダウンロードされたオブジェクトは、ウォレット固有のサブディレクトリに格納されています。このようなシナリオでは、アップロード時に<path-to-source-wallet-name>--pathの値として使用します:

    説明:
    • <path>は、ソース・クラスタからダウンロードされたオブジェクトの詳細を含むディレクトリへの絶対パスです。
    • <wallet_name>は、オブジェクトが追加されるターゲット・クラスタ上のウォレットを指定する、オプションのパラメータです。

    アップロード時にウォレットが指定されていないと、エンドポイントのデフォルト・ウォレットにオブジェクトがアップロードされます。エンドポイントにデフォルト・ウォレットが定義されていないと、オブジェクトはアップロードされますが、ウォレットにはアップロードされません。

ログ

<LOG_DIR>/okv_key_transfer_logs.txtファイルのログ・ファイルには、次の詳細が記録されます:
  • 操作のタイプ。
  • 含まれるオブジェクトの詳細。

ログ・ファイルは、次の操作に対して生成されます:

  • オブジェクトのダウンロード: 失敗した場合は、オブジェクトのUUIDおよび失敗の理由が記録されます。
  • 完全なウォレットのダウンロード: ログ・エントリには次のものが含まれます:
    • ウォレット内のオブジェクトの数。
    • 失敗したオブジェクトがある場合は、そのオブジェクトおよび失敗の理由。
    • 正常にダウンロードされたオブジェクトの数。
  • オブジェクトのアップロード: 失敗した場合は、オブジェクトのUUIDおよび失敗の理由が記録されます。
  • 完全なウォレットのアップロード: ログ・エントリには次のものが含まれます:
    • 失敗したオブジェクトがある場合は、そのオブジェクトおよび失敗の理由。
    • 指定されている場合は、ターゲット・ウォレット。
    • 正常にアップロードされたオブジェクトの数およびスキップされたオブジェクト。

ラップ・キーとアンラップ・キーの破棄

オブジェクト・タイプをラップおよびアンラップする転送キーを破棄します。

このコマンドは、ソースおよびターゲット・クラスタ内のキーを破棄します。
$ ./okv_key_transfer.sh cleanup

アップロードされなかった残りのオブジェクト・ファイルが<path>から削除されていることを確認します。