16 オンラインおよびオフラインのシークレットの管理
資格証明ファイルは、エンドポイントが必要に応じて取得できる不透明オブジェクトとして、Oracle Key Vaultに格納して管理できます。
- 資格証明ファイルのアップロードとダウンロード
okvutil upload
コマンドおよびokvutil download
コマンドによって、資格証明ファイルをアップロードおよびダウンロードできます。 - SQL*Plusのシークレットと資格証明の管理
多数のOracleデータベースに対応するSQL*Plusスクリプトのパスワードを管理するために、そのパスワードをOracle Key Vaultにアップロードできます。 - SSHのシークレットと資格証明の管理
公開キー認証は、Oracle Key Vaultで保護されている秘密キーで実行できます。 - Oracle Key VaultとSSH公開キー認証の統合
Oracle Key Vaultを使用してSSHの公開キーと秘密キーを格納できます。 - Oracle Key Vaultでのパスワードの集中管理
外部キーストアを使用するか、シークレットとして共有仮想ウォレットに追加することで、Oracle Key Vaultでパスワードを集中管理できます。
16.1 資格証明ファイルのアップロードとダウンロード
okvutil upload
およびokvutil download
コマンドは、資格証明ファイルをアップロードおよびダウンロードできます。
- 資格証明ファイルのアップロードとダウンロードについて
資格証明ファイルをアップロードおよびダウンロードするには、okvutil
ユーティリティを使用します。 - 資格証明ファイルのアップロード
okvutil upload
コマンドは、資格証明ファイルをアップロードできます。 - 資格証明ファイルのダウンロード
okvutil download
コマンドは、資格証明ファイルをダウンロードできます。 - 資格証明ファイルのアップロードおよびダウンロードのガイドライン
Oracleでは、資格証明ファイルをアップロードおよびダウンロードする際の推奨事項を提供しています。
親トピック: オンラインおよびオフラインのシークレットの管理
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.3 資格証明ファイルのダウンロード
okvutil download
コマンドは、資格証明ファイルをダウンロードできます。
関連項目
親トピック: 資格証明ファイルのアップロードとダウンロード
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公開キー認証用の公開キーまたは秘密キーのペアを一元的に管理できます。必要に応じて、キー・ペアのローテーションや取消しができます。キーは一元的に管理されるため、認可ユーザーは、ローカル・ディスクに秘密キーがなくてもリモート・マシンにログインできます。
- ステップ1: キー・ペアの作成とアップロード
Oracle Key Vaultエンドポイントを使用してキー・ペアを作成およびアップロードします。 - ステップ2: エンドポイントの使用によるリモート・ホストへのSSH接続
エンドポイントを使用してリモート・ホストにSSH接続できます。 - ステップ3: ssh-agentの取込み
ssh-agentを取り込むと、PKCS#11ライブラリを指定する必要がなくなります。
親トピック: オンラインおよびオフラインのシークレットの管理
16.4.1 ステップ1: キー・ペアの作成とアップロード
Oracle Key Vaultエンドポイントを使用してキー・ペアを作成およびアップロードします。
OpenSSHは、パスワードを必要としないエンドポイントの場合はバージョン7.2p1以上、パスワードが必要なエンドポイントの場合はバージョン8.1p1である必要があります。
16.4.2 ステップ2: エンドポイントの使用によるリモート・ホストへのSSH接続
エンドポイントを使用してリモート・ホストにSSH接続できます。
- そのキー・ペアを作成したエンドポイントであること
- それらのキーがあるウォレットに直接アクセスできること
- それらのキーがあるウォレットにアクセスできるエンドポイント・グループに追加されていること
OKV_HOME
は、エンドポイント・ソフトウェアがデプロイされているディレクトリに設定する必要があります。結果的に、
OKVのPKCS#11ライブラリの場所を指し示している必要があります。$OKV_HOME/lib/liborapkcs.so
16.5 Oracle Key Vaultでのパスワードの集中管理
外部キーストアを使用するか、シークレットとして共有仮想ウォレットに追加することで、Oracle Key Vaultでパスワードを集中管理できます。
- Oracle Key Vaultでのパスワードの集中管理について
Oracle Key Vaultにパスワードを集中的に格納し、これらのパスワードを安全に取得できます(たとえば、Oracleデータベースにログインする場合)。 - 集中管理されるパスワードの作成と共有
大規模なデータベース・デプロイメント用に、集中管理されるパスワード(外部キーストアのパスワード)を作成して共有するには、まずOracle Key VaultクライアントおよびRESTfulサービス・ユーティリティ・コマンドを使用する必要があります。 - 例: SQL*Plusの操作で外部キーストアのパスワードを使用する場合のスクリプト
アップロードされているパスワードのUUIDをユーザー名で取得して、そのパスワードをSQL*Plusコマンドに挿入するスクリプトを作成できます。 - その他のデータベースとのシークレットの共有
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にログインします。これは、スクリプトにハードコードされたクリア・テキスト・パスワードが必要になるために、適切なセキュリティ・プラクティスではありませんでした。当然のことながら、パスワードを変更すると、すべてのスクリプトの変更も必要になります。クリアテキストのパスワードの必要性をなくす方法として、自動オープン・ウォレット(セキュアな外部パスワード・ストアと呼ばれる)にパスワードを配置して、そこからパスワードを取得するようにクライアントに指示します。この方法は少数のデータベースには適していますが、データベースが数百にもなると管理が困難です。さらに、パスワードを変更するには、セキュアな外部パスワード・ストアをすべて更新する必要があります。この問題は、パスワードを一元的な場所で保管することで回避できます。
親トピック: Oracle Key Vaultでのパスワードの集中管理
16.5.2 集中管理されるパスワードの作成と共有
大規模なデータベース・デプロイメント用に、集中管理されるパスワード(外部キーストアのパスワード)を作成して共有するには、まずOracle Key VaultクライアントおよびRESTfulサービス・ユーティリティ・コマンドを使用する必要があります。
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
に付与する必要があります。
- SQL*Plusで、
ALTER USER
文を実行してプロキシを作成します。たとえば:ALTER USER HR GRANT CONNECT THROUGH refresh_dwh;
- スクリプトで、最後の行(
sqlplus "${user}"/"${pwd}"
)を変更してプロキシを含めます。たとえば、HR
を含めるには:sqlplus "${user}"[HR]/"${pwd}"
関連項目
親トピック: Oracle Key Vaultでのパスワードの集中管理
16.5.4 その他のデータベースとのシークレットの共有
Oracle Key Vaultで情報を共有するには、Oracle Key Vault内の仮想ウォレットと、共有ウォレットへのアクセス権を持つ専用のエンドポイントに接続する複数のデータベースが必要です。
16.5.5 大規模なデータベース・デプロイメントに対応するパスワードの変更
セキュリティ強化のために、人間と自動化プロセスのどちらが使用するパスワードも定期的に変更する必要があります。
親トピック: Oracle Key Vaultでのパスワードの集中管理