16 オンラインおよびオフラインのシークレットの管理

資格証明ファイルは、エンドポイントが必要に応じて取得できる不透明オブジェクトとして、Oracle Key Vaultに格納して管理できます。

16.1 資格証明ファイルのアップロードとダウンロード

okvutil uploadおよびokvutil downloadコマンドは、資格証明ファイルをアップロードおよびダウンロードできます。

16.1.1 資格証明ファイルのアップロードとダウンロードについて

資格証明ファイルをアップロードおよびダウンロードするには、okvutilユーティリティを使用します。

資格証明ファイルは、Oracle Key Vaultに不透明オブジェクトとしてアップロードおよび保存されますが、これは、Oracle Key VaultがOracle WalletまたはJavaキーストアなどのファイルの内容を解析しないことを意味します。アップロード・プロセスでは、資格証明ファイルは変更されません。

不透明オブジェクトの例は、次のとおりです。

  • X.509証明書を含むファイル

  • Kerberosキータブ

  • パスワードを含むファイル

  • 公開SSHキーおよび(抽出不可の)秘密SSHキー

これらの資格証明ファイルをアップロードすると、長期保持用の一元的でセキュアな場所が得られます。資格証明ファイルは、アップロードした後で、同じサーバーの場所にダウンロードしたり、他の信頼できるサーバーと共有することができます。Oracle Key Vaultは、最大128 KBのサイズの資格証明ファイルをサポートします。

資格証明ファイルは、Oracle Key Vaultエンドポイントがアクセスできるサーバー・インフラストラクチャ(データベース・サーバーやアプリケーション・サーバーを含む)のどこにでも配置できます。

16.1.2 資格証明ファイルのアップロード

okvutil uploadコマンドは、資格証明ファイルをアップロードできます。

  1. 資格証明ファイルがあるサーバーがOracle Key Vaultエンドポイントとしてエンロールされ、プロビジョニングされていることを確認します。
  2. エンドポイントに対してアクセス制御が構成されていることを確認します。

    資格証明ファイルを仮想ウォレットにアップロードする場合、エンドポイントがウォレットへの読取り、変更およびウォレット管理アクセス権を持っていることを確認します。

  3. okvutil uploadコマンドを実行します。

    たとえば:

    # okvutil upload -l "/etc/oracle/app/creds/hr.keytab" -t kerberos -g HRWallet -d "Kerberos keytab file for HR group, 06_11_14"
    Enter Oracle Key Vault endpoint password: Key_Vault_endpoint_password
    

    この例では次のとおりです。

    • -lは、アップロードされるhr.keytab資格証明ファイルのディレクトリ・パスです。ディレクトリの場所は、二重引用符で囲みます。

    • -tは、資格証明ファイルのタイプを指定します。この例ではKerberosキータブ・ファイルです。KERBEROSの他に、指定できるタイプは次のとおりです。

      • SSHキー・ファイルの場合、SSH

      • 機密情報(たとえばアップロードまたはダウンロードされたファイル)が格納されている他のファイルの場合、OTHER

    • -gは、すでに存在している必要がある仮想ウォレットHRWalletに資格証明ファイルを追加します。このパラメータを使用すると、デフォルトの仮想ウォレットではなく、HRアプリケーション・ユーザーの必要に応じた専用のウォレットに資格証明をアップロードできます。この例では、HRWalletはOracle Key Vault仮想ウォレットで、そのアクセス制御はステップ2で構成されました。

    • -dは、オプションの説明です。ベスト・プラクティスとしては、資格証明ファイルの使用目的の概要と、アップロードを実行した日付を入れておきます。この情報は、あとで参照し、資格証明ファイルを追跡する助けになります。この説明は、必要に応じて、後からOracle Key Vault管理コンソールで変更できます。

16.1.3 資格証明ファイルのダウンロード

okvutil downloadコマンドは、資格証明ファイルをダウンロードできます。

  1. 次のいずれかの方法を使用して、ダウンロードする必要のある資格証明ファイルの一意のIDを見つけます。
    • Oracle Key Vault management console: 仮想ウォレットに必要なアクセス権を持っているユーザーとしてログインします。Oracle Key Vault管理コンソールで、「Keys & Wallets」タブから「Keys, Secrets & Objects」を選択して、アップロードされたファイルを検索します。ダウンロードする、アップロードされたファイルの一意のIDを書き留めます。資格証明ファイルは、不透明オブジェクトとしてリストされます。

    • okvutil list command: 資格証明ファイルへのアクセス権を持つエンドポイント、または資格証明ファイルが含まれている仮想ウォレットから、okvutil listコマンドを実行します。ファイルのアップロード時に入力した説明に基づいて、ダウンロードする必要のある資格証明ファイルの一意のIDを見つけます。

  2. コマンドラインから、okvutil downloadコマンドを実行して、資格証明ファイルをダウンロードします。

    たとえば:

    # okvutil download -l "/etc/oracle/app/newcreds/hr.keytab" -t kerberos -i 6ba7b810-9dad-11d1-80b4-00c04fd430c8
    Enter Oracle Key Vault endpoint password: Key_Vault_endpoint_password
    

    この例では次のとおりです。

    • -lは、アップロードされた資格証明をダウンロードするディレクトリです。

    • -tは、資格証明ファイルのタイプを指定します。この例ではKerberosキータブ・ファイルです。KERBEROSの他に、指定できるタイプは次のとおりです。

      • SSHキー・ファイルの場合、SSH

      • 機密情報(たとえばアップロードまたはダウンロードされたファイル)が格納されている他のファイルの場合、OTHER

    • -iは、資格証明ファイルの一意のIDです。

16.1.4 資格証明ファイルのアップロードとダウンロードに関するガイドライン

資格証明ファイルをアップロードおよびダウンロードする場合の推奨事項は、次のとおりです。

  • アップロードの完了後は、資格証明ファイルが次に変更されたときに再アップロードしてください。そうしないと、アップロードされたファイル(およびそれ以降にダウンロードされたバージョン)は最新でないものになります。資格証明ファイルの最終変更日を、アップロードされたバージョンのタイムスタンプと定期的に比較してください。

  • okvutil uploadおよびokvutil downloadコマンドで上書き(-o)オプションを使用する場合は注意してください。このオプションは、アップロードされた資格証明ファイルを上書きします。アップロードとダウンロードのプロセスを開始する前に、資格証明ファイルのバックアップを作成することをお薦めします。

  • 複数のサーバー・エンドポイント間で、1つの資格証明ファイルを共有できます。okvutil uploadコマンドの-gオプションを使用して、資格証明ファイルを不透明オブジェクトとして仮想ウォレットに追加します。その仮想ウォレットへのアクセス権をすべてのサーバー・エンドポイントに付与します。オプションで、エンドポイント・グループを定義し、すべてのサーバー・エンドポイントをそのエンドポイント・グループのメンバーにします。その仮想ウォレットにこのエンドポイント・グループ・アクセス権を付与します。その後は、グループのすべてのメンバーが、そのウォレットへのアクセス権を持ちます。

16.2 SQL*Plusのシークレットと資格証明の管理

多数のOracleデータベースに対応するSQL*Plusスクリプトのパスワードを管理するために、そのパスワードをOracle Key Vaultにアップロードできます。

多くの大規模サイトでは、自動化スクリプトを使用することで、Oracleデータベースにログインして、Oracle Recovery Manager (Oracle RMAN)のバックアップや、Oracle Databaseデータ・ウェアハウスへのバッチ・ロードなどの定期的なメンテナンス・アクティビティを実行します。通常、こうしたスクリプトは、高い権限を持つユーザーとして接続する必要があります。高い権限を持つユーザーとしてログインするために、スクリプトではユーザーのパスワードにアクセスする必要があります。スクリプト内にクリアテキストのパスワードをハードコードすると、当然のことながら、セキュリティの確保が困難になります。また、ユーザーのパスワードが変更されると、そのスクリプトは役に立たなくなります。スクリプト内でクリアテキストのパスワードを使用しないようにするための方策として、自動オープン・ウォレット(セキュアな外部パスワード・ストアと呼ばれる)にパスワードを配置して、そこからパスワードを取得するようクライアント・アプリケーションに指示します。ただし、このアイデアは、データベースが少数の場合にしか機能しません。数百のデータベースがあると、パスワードの管理が困難になり、セキュアな外部パスワード・ストアごとに更新が必要になります。

多数のOracleデータベースがある場合は、集中的にパスワードを保管して、そのパスワードをデータベース接続のために安全に取得できます。この機能には、次の利点があります。

  • メンテナンス・スクリプトからクリアテキストのパスワードを排除します
  • パスワードの変更が簡単になります
  • sqlnet.oraファイルの追加エントリは不要です
  • セキュアな外部パスワード・ストアを廃止にします

16.3 SSHのシークレットと資格証明の管理

公開キー認証は、Oracle Key Vaultで保護されている秘密キーで実行できます。

多くのIT部門では、オンプレミスのホストとクラウドベースのホストのどちらについても、公開キー認証をデフォルトのアプローチとして、管理者のパスワードの記憶に頼ることなく安全にリモート・サーバーにログインします。Oracle Cloud Infrastructure (Oracle OCI)を使用しているときには、ユーザーopcのパスワードは不明なため、OCIコンピュート・インスタンスにログインする唯一の方法は公開キー認証になります。この方法は便利ですが、リスクがないわけではありません。秘密キーが失われると、リモート・ログインが不可能になります。また、新しい公開キーをプロビジョニングするプロセスには時間がかかります。さらに別の問題として、秘密キーは所有者を一意に識別するため、そのキーが盗難、コピーまたは侵害されると、侵入者は、侵入者ではなく所有者を指し示す証拠を残して、簡単に大きな問題を引き起こせるようになります。

このような問題の解決策として、okvutil uploadコマンドを使用して、Oracle Key VaultにSSH秘密キーをアップロードすることを検討してください。そのメリットは、次のとおりです。

  • SSHキーはホスト・コンピュータに存在しないため、コピーや盗難が不可能になるばかりか、ディスクやファイルの破損ついて心配する必要もなくなります。
  • SSHキーはOracle Key Vaultのバックアップ操作に含まれるため、キーが失われる可能性はありません。
  • Oracle Key Vaultは、最大16台のOracle Key Vaultサーバーを単一のマルチマスター・クラスタに接続できるため、継続的でフォルト・トレラントな可用性を実現できます。読取り/書込みペアにより、機密性の高い情報(暗号化キーやパスワードなど)が少なくとも1台以上のOracle Key Vaultサーバーにレプリケートされることが保証されます。

16.4 Oracle Key VaultとSSH公開キー認証の統合

Oracle Key Vaultを使用してSSHの公開キーおよび秘密キーを格納できます。

キー管理者、または適切なアクセス権があるユーザーは、Oracle Key Vaultで、SSH公開キー認証用の公開キーまたは秘密キーのペアを一元的に管理できます。必要に応じて、キー・ペアのローテーションや取消しができます。キーは一元的に管理されるため、認可ユーザーは、ローカル・ディスクに秘密キーがなくてもリモート・マシンにログインできます。

16.4.1 ステップ1: キー・ペアの作成とアップロード

Oracle Key Vaultエンドポイントを使用してキー・ペアを作成およびアップロードします。

OpenSSHは、パスワードを必要としないエンドポイントの場合はバージョン7.2p1以上、パスワードが必要なエンドポイントの場合はバージョン8.1p1である必要があります。

  1. キー・ペアを作成します(両方ともPKCS#8形式)。これは、キー・サイズが1024、2048または4096のRSAキー・ペアである必要があります。

    ノート:

    パスフレーズは、求められても入力しないでください。Oracle Key Vaultでは、現在、SSH用の暗号化された秘密キーの使用はサポートされていません。
    これにより、次のファイルが生成されます。
    • key.pem: PKCS#8形式の秘密キー。-----BEGIN PRIVATE KEY-----で始まる必要があります。
    • key.pem.pub: RFC4716形式の公開キー。
    • public.pem: PKCS#8形式の公開キー。-----BEGIN PUBLIC KEY-----で始まる必要があります。
    
            ssh-keygen -q -t rsa -m PKCS8 -f key.pem -b <key size>
            ssh-keygen -e -f key.pem.pub -mPKCS8 > public.pem
  2. key.pem.pubの内容をリモート・ホストのauthorized_keysファイルに追加します。

    ノート:

    authorized_keysファイルまたはその親ディレクトリの作成中に、どれかが存在しない場合は、正しいアクセス権でそれらが作成されていることを確認してください。
  3. この段階で公開キー認証をテストするには(Oracle Key VaultのPKCS#11ライブラリの使用はなし)、ssh -i ./key.pem <username>@<remote host>というコマンドを使用します。
  4. RESTfulサービス・ユーティリティを使用して秘密キーをOracle Key Vaultにアップロードします。./bin/okv managed-object private-key register --object ./key.pem --algorithm RSA --length <key size> --activation-date now
    <key size>が前の選択内容と同じであることを確認します。
  5. RESTfulサービス・ユーティリティを使用して公開キーをOracle Key Vaultにアップロードします。./bin/okv managed-object public-key register --object ./public.pem --algorithm RSA --length <key size> --private-key-uuid <private key UUID> --activation-date now
    private key UUIDが前のコマンドで返されたUUIDと同じであることを確認します。
  6. ローカル・マシンからその公開キーと秘密キーを削除します。
    後で、RESTfulサービス・ユーティリティを使用して、PKCS#8形式の秘密キーおよび公開キーを取得できます。
    rm key.pem key.pem.pub public.pem
    .

16.4.2 ステップ2: エンドポイントの使用によるリモート・ホストへのSSH接続

エンドポイントを使用してリモート・ホストにSSH接続できます。

リモート・ホストにSSH接続するエンドポイントは、公開キーと秘密キーの両方にアクセスできる必要があります。エンドポイントは、次の条件を満たしている場合にそれらにアクセスできます。
  • そのキー・ペアを作成したエンドポイントであること
  • それらのキーがあるウォレットに直接アクセスできること
  • それらのキーがあるウォレットにアクセスできるエンドポイント・グループに追加されていること
次の環境変数が正しく設定されていることを確認してください。
  • OKV_HOMEは、エンドポイント・ソフトウェアがデプロイされているディレクトリに設定する必要があります。結果的に、
    $OKV_HOME/lib/liborapkcs.so 
    OKVのPKCS#11ライブラリの場所を指し示している必要があります。
  1. 次のコマンドで、PKCS#11ライブラリを使用してリモートホストにSSH接続します。
    ssh -I $OKV_HOME/lib/liborapkcs.so <username>@<remote host>
  2. PINの入力を求められたら、エンドポイントのパスワードを入力するか、エンドポイントにパスワードがない場合はNULLを入力します。

    ノート:

    パスワードで保護されたエンドポイントを使用することをお薦めします。自動ログイン・エンドポイントを使用する場合、ユーザーのSSHキーの保護は、ファイル権限のみによって決まります。

16.4.3 ステップ3: ssh-agentの取込み

ssh-agentを取り込むと、PKCS#11ライブラリを指定する必要がなくなります。

ssh-agentを使用すると、リモート・ホストへのSSH接続のたびにPKCS#11ライブラリの場所およびエンドポイント・パスワードを指定する必要がなくなります。

これには、ステップ2: エンドポイントの使用によるリモート・ホストへのSSH接続の説明に従ってキー・ペアを設定しておく必要があります。

  1. 次のディレクトリを特定します。
    liborapkcs.so
    が存在する。
  2. ssh-agentを設定し、前のステップで特定したディレクトリをホワイトリストに登録します。
    eval `ssh-agent -P "<full path to directory containing liborapkcs.so>/*"`
  3. ssh-addを介して、PKCS#11ライブラリで提供されているキーをエージェントに追加します。
  4. PINの入力を求められたら、エンドポイントのパスワードを入力します。
  5. エンドポイントにパスワードがない場合は、NULLを入力します。
    ssh-add -s <full path to liborapkcs.so>
  6. オプションを指定せずにsshコマンドを使用してその設定をテストします。
    ssh <username>@<remote host>

16.5 Oracle Key Vaultでのパスワードの集中管理

外部キーストアを使用するか、シークレットとして共有仮想ウォレットに追加することで、Oracle Key Vaultでパスワードを集中管理できます。

16.5.1 Oracle Key Vaultでのパスワードの集中管理について

Oracle Key Vaultにパスワードを集中的に格納し、これらのパスワードを安全に取得できます(たとえば、Oracleデータベースにログインする場合)。

Oracle Key Vaultにパスワードを集中的に格納すると、次の利点があります。

  • メンテナンス・スクリプトでクリア・テキストのパスワードを使用する必要がなくなります。
  • セキュアな外部パスワード・ストアの必要性がなくなります。
  • パスワードの変更が簡単になります。
  • sqlnet.oraファイルへの変更は不要です。

データベース管理者は、多くの場合、自動スクリプトを使用して、Oracle Recovery Manager (Oracle RMAN)のバックアップ、Oracle Data Warehouseへのデータのロードまたはマテリアライズド・ビューのリフレッシュなどの定期的なメンテナンスを実行します。これらのスクリプトは、高度な権限を持つユーザーのパスワードを使用してOracle Databaseにログインします。これは、スクリプトにハードコードされたクリア・テキスト・パスワードが必要になるために、適切なセキュリティ・プラクティスではありませんでした。当然のことながら、パスワードを変更すると、すべてのスクリプトの変更も必要になります。クリアテキストのパスワードの必要性をなくす方法として、自動オープン・ウォレット(セキュアな外部パスワード・ストアと呼ばれる)にパスワードを配置して、そこからパスワードを取得するようにクライアントに指示します。この方法は少数のデータベースには適していますが、データベースが数百にもなると管理が困難です。さらに、パスワードを変更するには、セキュアな外部パスワード・ストアをすべて更新する必要があります。この問題は、パスワードを一元的な場所で保管することで回避できます。

16.5.2 集中管理されるパスワードの作成と共有

大規模なデータベース・デプロイメント用に、集中管理されるパスワード(外部キーストアのパスワード)を作成して共有するには、まずOracle Key VaultクライアントおよびRESTfulサービス・ユーティリティ・コマンドを使用する必要があります。

  1. Oracle Key Vault RESTfulサービス・ユーティリティ・コマンドライン・インタフェースがインストールされていることを確認します。
    RESTfulサービス・ユーティリティ・コマンドライン・インタフェースがインストールされていない場合は、次のようにOracle Key Vault管理コンソールからダウンロードできます:
    curl -O -k https://Oracle_Key_Vault_IP_address:5695/okvrestclipackage.zip
  2. パスワードを使用しないOracle Key Vaultクライアントをインストールします。
    Oracle Key Vaultクライアントがすでにインストールされている場合(たとえば、TDEキー管理用)、このエンドポイントは使用しないでください。かわりに、シークレット管理用の追加のエンドポイントをインストールします。パスワードで保護されていないOracle Key Vaultクライアントを使用する必要があります。

    ノート:

    OpenSSHは、パスワードを必要としないエンドポイントの場合はバージョン7.2p1以上、パスワードが必要なエンドポイントの場合はバージョン8.1p1である必要があります。

    パスワードなしでOracle Key Vaultクライアントをインストールするには、次のRESTfulサービス・ユーティリティ・コマンドを実行します:
    okv admin endpoint create --endpoint endpoint_name 
    --description "Secrets management for endpoint_name" --type ORACLE_NON_DB 
    --platform platform_OS
    
    okv admin endpoint provision --endpoint endpoint_name 
    --location installation_directory --auto-login TRUE

    このユースケースでは、rootスクリプトを実行する必要はありません。

  3. データベース・アカウントのパスワードをOracle Key Vaultにアップロードします。
    1. アップロードするアカウントごとの名前とパスワードを含むテキスト・ファイルを作成します。たとえば、データベースにログインするメンテナンス・スクリプトが2つあるとします。最初のスクリプトでは、RMANアカウントのnightly_backupを使用します。このスクリプトは、SYSBACKUP管理権限を持つOracle Recovery Manager (Oracle RMAN)としてPDBにログインします。2番目のスクリプトでは、refresh_dwhアカウントを使用します。このスクリプトは、PDBに接続してデータ・ウェアハウスをリフレッシュします。
      次に、各アカウントのパスワード・テキスト・ファイルを示します。
      $ more backup_pwd
      hV3t0ksxoSQIEe4VoF237o7t
      $ more refresh_pwd
      NfKmXHAi65kxqVqx2yiOd49s
    2. Oracle Key Vaultにユーザー名とパスワードを登録します。
      まず、nightly_backupアカウントがアップロードされてから、refresh_dwhアカウントがアップロードされます。Oracle Key Vaultは、これらの各管理対象オブジェクトの汎用一意ID (UUID)を返します。最初に、次のように登録します。
      • 最初の管理対象オブジェクトのシークレットを登録します。
        $ PWD_RMAN=$(okv managed-object secret register --output_format "text" --object "./backup_pwd" --custom-attribute '[{"name": "x-NAME", "value": "NIGHTLY_BACKUP"}, {"name": "x-CONNECT-STRING", "value": "'${TWO_TASK}'"}]' --activation-date "now")
        echo $PWD_RMAN 
        E3CFC37C-875E-4F7E-BF2A-B37EAA86EA31
        コマンドで確認します。
        okv managed-object attribute get-all --uuid $PWD_RMAN
      • 2つ目の管理対象オブジェクトのシークレットを登録します。
        PWD_REFRESH=$(okv managed-object secret register --output_format "text" --object "./refresh_pwd" --custom-attribute '[{"name": "x-NAME", "value" : "REFRESH_DWH"}, {"name": "x-CONNECT-STRING", "value": "'${TWO_TASK}'"}]' --activation-date "now")
        echo $PWD_REFRESH
        FDAFA443-8CD2-4FF7-BF27-9EB4AEC77611

        生成されたJSON入力ファイルreg_refresh.jsonのオプションおよび属性を編集します。

        {
          "service" : {
            "category" : "managed-object",
            "resource" : "secret",
            "action" : "register",
            "options" : {
              "object" : "./refresh_pwd",
              "type" : "PASSWORD",
              "mask" : "ENCRYPT",
              "attributes" : {
                "name" : "REFRESH_DWH"
              }
            }
          }
        }

        コマンドで確認します。

        okv managed-object attribute get-all --uuid $PWD_REFRESH
  4. Linuxで、パスワードが含まれているファイルを安全に削除します。
    shred -xzu ./backup_pwd ./refresh_pwd
この構成が完了すると、これらのユーザーのパスワードをOracle Key Vaultから取得して、そのパスワードをSQL*Plusコマンドに挿入するスクリプトを作成できます。

16.5.3 例: SQL*Plusの操作で外部キーストアのパスワードを使用する場合のスクリプト

アップロードされているパスワードのUUIDをユーザー名で取得して、そのパスワードをSQL*Plusコマンドに挿入するスクリプトを作成できます。

このスクリプトの利点は、そのデータベースにログインする管理スクリプトやメンテナンス・スクリプトの数に関係なく、スクリプトは同じままであることです。新しいユーザー・アカウントごとに、ユーザーのパスワードと属性ファイルのみをアップロードして、シークレットをアクティブ化します。

たとえば、log-me-in.shというスクリプトは、次のようになります。

#!/bin/bash
set +x
# ************************************************
# ** Read user name and connect string from ******
# ** command line into variables *****************
# ************************************************

export user="${1}"
export TWO_TASK="${2}"
export PRIV="${3}"

KMIP_ID=$(okv managed-object object locate --output_format text --custom-attribute '[{"name": "x-NAME", "value" : "'${user}'"}, {"name": "x-CONNECT-STRING", "value": "'${TWO_TASK}'"}]')
pwd='"'$(okv managed-object secret get --output_format text --uuid ${KMIP_ID})'"'

if [ "${PRIV}" == 'AS SYSBACKUP' ]; then
  rman target ''"'${user}/${pwd}@${TWO_TASK} ${PRIV}'"''
else
  sqlplus ${user}/${pwd}
fi

拡張属性を適用することで、このファイルを不変にできます。たとえば、Linuxでrootユーザーとして、次のchattrコマンドを使用します。

# chattr +i log-me-in.sh

このスクリプトを実行するには、次の構文を使用します。

$ ./log-me-in.sh user_name hostname:port/service 'AS privilege'

たとえば、次のようにしてnightly_backupユーザーにログインします。

$ ./log-me-in.sh nightly_backup sales19c.us.example.com:1521/finpdb.us.example.com 'AS SYSBACKUP'

出力は、次のようになります。

Recovery Manager: Release 19.0.0.0.0 - Production on Fri Jun 26 12:22:04 2020
Version 19.7.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: sales19c:finpdb (DBID=3200396863)

RMAN> 

次のコマンド例では、refresh_dwhユーザーとしてログインします。

$ ./log-me-in.sh refresh_dwh sales19c.us.example.com:1521/finpdb.us.example.com 

SQL> SHOW USER
REFRESH_DWH

ターゲット・スキーマの所有者がrefresh_dwhアカウント・ユーザーのログインを許可している場合、そのスキーマ所有者は、次のようにCONNECT THROUGH権限をrefresh_dwhに付与する必要があります。

  1. SQL*Plusで、ALTER USER文を実行してプロキシを作成します。たとえば:
    ALTER USER HR GRANT CONNECT THROUGH refresh_dwh;
  2. スクリプトで、最後の行(sqlplus "${user}"/"${pwd}")を変更してプロキシを含めます。たとえば、HRを含めるには:
    sqlplus "${user}"[HR]/"${pwd}"

16.5.4 その他のデータベースとのシークレットの共有

Oracle Key Vaultで情報を共有するには、Oracle Key Vault内の仮想ウォレットと、共有ウォレットへのアクセス権を持つ専用のエンドポイントに接続する複数のデータベースが必要です。

  1. シークレットを共有するサーバー(ソース・サーバー)にログインします。
  2. 仮想ウォレットを作成して、エンドポイントのデフォルト・ウォレットにします。
    たとえば、次のようにしてsecrets_db_nameというエンドポイントのデフォルト・ウォレットを作成します。
    okv manage-access wallet create --wallet shared_secrets
    okv manage-access wallet set-default --wallet shared_secrets --endpoint secrets_db_name
  3. 共有仮想ウォレットにシークレット(パスワード)を追加します。
    okv managed-object wallet add-member --uuid 994CB3E5-C5B3-4F75-BFED-CB41AE15D0B1 --wallet shared_secrets
    994CB3E5-C5B3-4F75-BFED-CB41AE15D0B1は、シークレットのUUIDです。UUIDを忘れた場合は取得できます。たとえば、次のようにしてnightly_backupのUUIDを取得します。
    $ okv managed-object object locate --name nightly_backup
  4. 共有シークレットを使用するサーバー(宛先サーバー)にログインします。
  5. エンドポイントを作成してから、shared_secretsウォレットをその新しいエンドポイントのデフォルト・ウォレットにします。
    okv admin endpoint create --endpoint secrets_db_name --description "Endpoint for Secrets Management in db_name" --type ORACLE_NON_DB --platform LINUX64
    okv manage-access wallet set-default --wallet shared_secrets --endpoint secrets_db_name
    okv admin endpoint provision --endpoint secrets_db_name --location /directory/for/new/endpoint/ --auto-login TRUE
  6. 作成したスクリプト(たとえば、log-me-in.sh)を、ソース・サーバーから、共有シークレットを使用する宛先サーバーに安全にコピーします。
    $ scp log-me-in.sh destination_server:/remote_path
  7. 宛先サーバーで、次の構文を使用してスクリプトを実行します。
    $ ./log-me-in.sh user_name hostname:port/service 'AS privilege'

    たとえば:

    $ ./log-me-in.sh nightly_backup 192.0.2.1:1521/hr_pdb 'AS SYSBACKUP'

    出力は、次のようになります。

    Recovery Manager: Release 19.0.0.0.0 - Production on Fri Jun 26 13:10:49 2020
    Version 19.7.0.0.0
    
    Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
    
    connected to target database: hr_db:hr_pdb (DBID=1932795327)
    
    RMAN>

16.5.5 大規模なデータベース・デプロイメントに対応するパスワードの変更

セキュリティ強化のために、人間と自動化プロセスのどちらが使用するパスワードも定期的に変更する必要があります。

Oracle Key Vaultに格納されているパスワードを変更するには、古いパスワードを取り消して破棄し、新しいパスワードをアップロードしてアクティブ化します。最後に、SQL*Plusでパスワードを変更する必要があります。
  1. 保管されているパスワードにアクセスできるサーバーにログインします。
  2. このパスワードのUUIDを取得します。
    $ okv managed-object object locate --name nightly_backup

    UUIDの出力は、次のようになります。

    994CB3E5-C5B3-4F75-BFED-CB41AE15D0B1
  3. このUUIDを使用して、このパスワードを取り消します。
    $ okv managed-object object revoke --code CESSATION_OF_OPERATION --uuid 994CB3E5-C5B3-4F75-BFED-CB41AE15D0B1

    パスワードの取消しにコードを指定する必要があります。指定可能値は次のとおりです。

    • UNSPECIFIED
    • KEY_COMPROMISE
    • CA_COMPROMISE
    • AFFILIATION_CHANGED
    • SUPERSEDED
    • CESSATION_OF_OPERATION
    • PRIVILEGE_WITHDRAWN
  4. このパスワードを破棄します。
    $ okv managed-object object destroy --uuid 994CB3E5-C5B3-4F75-BFED-CB41AE15D0B1
    
  5. Oracle Key Vault管理コンソールで、このシークレットを削除します。
  6. 元の外部キーストアのパスワードの構成にした元のパスワード・テキスト・ファイルと同様に、新しいパスワードが含まれるテキスト・ファイルを作成します。
    $ more backup_pwd
    cn0KpOnY9vNec2sLVHFnJwR6
  7. 新しいパスワードおよび属性をアップロードしてから、新しいシークレットをアクティブ化します。
    1. JSON出力を生成します。
      okv managed-object secret register --generate-json-input > reg_secret.json
    2. 生成された出力を確認します。
      $ more reg_secret.json
      
      {
        "service" : {
          "category" : "managed-object",
          "resource" : "secret",
          "action" : "register",
          "options" : {
            "object" : "./backup_pwd",
            "type" : "PASSWORD",
            "mask" : "ENCRYPT",
            "attributes" : {
              "name" : "NIGHTLY_BACKUP"
            }
          }
        }
      }
    3. 登録を行います。
      okv managed-object secret register --from-json ./reg_secret.json
    4. シークレットをアクティブ化します。
      $ okv managed-object object activate --uuid 0739649D-3058-4F34-BF84-50B2BD652C2D
      
  8. Linuxで、パスワードが含まれているファイルを安全に削除します。
    shred -xz backup_pwd
    rm backup_pwd
  9. シークレットを共有する各Oracleデータベースで、SQL*Plusにログインし、passwordコマンドを使用してパスワードを変更します。
    たとえば:
    SYS> password nightly_backup
    Changing password for nightly_backup
    New password: cn0KpOnY9vNec2sLVHFnJwR6
    Retype new password: cn0KpOnY9vNec2sLVHFnJwR6
    Password changed