19 オンラインおよびオフラインのシークレットの管理
資格証明ファイルは、エンドポイントが必要に応じて取得できる不透明オブジェクトとして、Oracle Key Vaultに格納して管理できます。
- 資格証明ファイルのアップロードとダウンロード
okvutil upload
コマンドおよびokvutil download
コマンドによって、資格証明ファイルをアップロードおよびダウンロードできます。 - SQL*Plusのシークレットと資格証明の管理
多数のOracleデータベースに対応するSQL*Plusスクリプトのパスワードを管理するために、そのパスワードをOracle Key Vaultにアップロードできます。 - SSHのシークレットと資格証明の管理
公開キー認証は、Oracle Key Vaultで保護されている秘密キーで実行できます。 - 大規模なデータベース・デプロイメントに対応するスクリプトのOracle Key Vaultでのパスワード管理
大規模なデータベース・デプロイメントでは、データベース・パスワードの変更を管理するためのスクリプトを作成できます。
19.1 資格証明ファイルのアップロードとダウンロード
okvutil upload
およびokvutil download
コマンドは、資格証明ファイルをアップロードおよびダウンロードできます。
- 資格証明ファイルのアップロードとダウンロードについて
資格証明ファイルをアップロードおよびダウンロードするには、okvutil
ユーティリティを使用します。 - 資格証明ファイルのアップロード
okvutil upload
コマンドは、資格証明ファイルをアップロードできます。 - 資格証明ファイルのダウンロード
okvutil download
コマンドは、資格証明ファイルをダウンロードできます。 - 資格証明ファイルのアップロードおよびダウンロードのガイドライン
Oracleでは、資格証明ファイルをアップロードおよびダウンロードする際の推奨事項を提供しています。
親トピック: オンラインおよびオフラインのシークレットの管理
19.1.1 資格証明ファイルのアップロードとダウンロードについて
資格証明ファイルをアップロードおよびダウンロードするには、okvutil
ユーティリティを使用します。
資格証明ファイルは、Oracle Key Vaultに不透明オブジェクトとしてアップロードおよび保存されますが、これは、Oracle Key VaultがOracle WalletまたはJavaキーストアなどのファイルの内容を解析しないことを意味します。アップロード・プロセスでは、資格証明ファイルは変更されません。
不透明オブジェクトの例は、次のとおりです。
-
X.509証明書を含むファイル
-
Kerberosキータブ
-
パスワードを含むファイル
-
SSHキーを含むファイル
これらの資格証明ファイルをアップロードすると、長期保持用の一元的でセキュアな場所が得られます。資格証明ファイルは、アップロードした後で、同じサーバーの場所にダウンロードしたり、他の信頼できるサーバーと共有することができます。Oracle Key Vaultは、最大128 KBのサイズの資格証明ファイルをサポートします。
資格証明ファイルは、Oracle Key Vaultエンドポイントがアクセスできるサーバー・インフラストラクチャ(データベース・サーバーやアプリケーション・サーバーを含む)のどこにでも配置できます。
親トピック: 資格証明ファイルのアップロードとダウンロード
19.1.3 資格証明ファイルのダウンロード
okvutil download
コマンドは、資格証明ファイルをダウンロードできます。
関連項目
親トピック: 資格証明ファイルのアップロードとダウンロード
19.1.4 資格証明ファイルのアップロードとダウンロードに関するガイドライン
資格証明ファイルをアップロードおよびダウンロードする場合の推奨事項は、次のとおりです。
-
アップロードの完了後は、資格証明ファイルが次に変更されたときに再アップロードしてください。そうしないと、アップロードされたファイル(およびそれ以降にダウンロードされたバージョン)は最新でないものになります。資格証明ファイルの最終変更日を、アップロードされたバージョンのタイムスタンプと定期的に比較してください。
-
okvutil upload
およびokvutil download
コマンドで上書き(-o
)オプションを使用する場合は注意してください。このオプションは、アップロードされた資格証明ファイルを上書きします。アップロードとダウンロードのプロセスを開始する前に、資格証明ファイルのバックアップを作成することをお薦めします。 -
複数のサーバー・エンドポイント間で、1つの資格証明ファイルを共有できます。仮想ウォレットに不透明オブジェクトを追加し、続いて、すべてのエンドポイントがその仮想ウォレットへのアクセス権を持っていることを確認します。オプションで、エンドポイント・グループを定義し、すべてのサーバー・エンドポイントをそのグループのメンバーにします。
okvutil upload
コマンドの-g
オプションを使用して、この共通のウォレットを使用して共有する証明書ファイルを、Oracle Key Vaultにグループとしてアップロードします。ウォレットを定義して、それをエンドポイント・グループにアタッチします。その後は、グループのすべてのメンバーが、そのウォレットへのアクセス権を持ちます。
親トピック: 資格証明ファイルのアップロードとダウンロード
19.2 SQL*Plusのシークレットと資格証明の管理
多数のOracleデータベースに対応するSQL*Plusスクリプトのパスワードを管理するために、そのパスワードをOracle Key Vaultにアップロードできます。
多くの大規模サイトでは、自動化スクリプトを使用することで、Oracleデータベースにログインして、Oracle Recovery Manager (Oracle RMAN)のバックアップや、Oracle Databaseデータ・ウェアハウスへのバッチ・ロードなどの定期的なメンテナンス・アクティビティを実行します。通常、こうしたスクリプトは、高い権限を持つユーザーとして接続する必要があります。高い権限を持つユーザーとしてログインするために、スクリプトではユーザーのパスワードにアクセスする必要があります。スクリプト内にクリアテキストのパスワードをハードコードすると、当然のことながら、セキュリティの確保が困難になります。また、ユーザーのパスワードが変更されると、そのスクリプトは役に立たなくなります。スクリプト内でクリアテキストのパスワードを使用しないようにするための方策として、自動オープン・ウォレット(セキュアな外部パスワード・ストアと呼ばれる)にパスワードを配置して、そこからパスワードを取得するようクライアント・アプリケーションに指示します。ただし、このアイデアは、データベースが少数の場合にしか機能しません。数百のデータベースがあると、パスワードの管理が困難になり、セキュアな外部パスワード・ストアごとに更新が必要になります。
多数のOracleデータベースがある場合は、一元的にパスワードを保管して、そのパスワードをデータベース接続のために安全に取得できます。この機能には、次の利点があります。
- メンテナンス・スクリプトからクリアテキストのパスワードを排除します
- パスワードの変更が簡単になります
sqlnet.ora
ファイルの追加エントリは不要です- セキュアな外部パスワード・ストアを廃止にします
親トピック: オンラインおよびオフラインのシークレットの管理
19.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サーバーにレプリケートされることが保証されます。
関連項目
親トピック: オンラインおよびオフラインのシークレットの管理
19.4 大規模なデータベース・デプロイメントに対応するスクリプトのOracle Key Vaultでのパスワード管理
大規模なデータベース・デプロイメントでは、データベース・パスワードの変更を管理するためのスクリプトを作成できます。
- 大規模なデータベース・デプロイメントに対応するスクリプトのOracle Key Vaultでのパスワードの管理について
外部キーストアのパスワードを一元的に保管して、そのパスワードを大規模なOracle Database接続のデプロイメントで使用するために安全に取得できます。 - 外部キーストアのパスワード・アップロードの構成
大規模なデータベース・デプロイメントに対応するように外部キーストアのパスワード・アップロードを構成するには、まず、Oracle Key VaultクライアントとRESTful APIを使用する必要があります。 - 例: SQL*Plusの操作で外部キーストアのパスワードを使用する場合のスクリプト
アップロードされているユーザーのUUIDをユーザー名で取得して、そのパスワードをSQL*Plusコマンドに挿入するスクリプトを作成できます。 - その他のデータベースとのシークレットの共有
Oracle Key Vaultで情報を共有するには、Oracle Key Vault内の仮想ウォレットと、共有ウォレットへのアクセス権を持つ専用のエンドポイントに接続する複数のデータベースが必要です。 - 大規模なデータベース・デプロイメントに対応するパスワードの変更
セキュリティ強化のために、人間と自動化プロセスのどちらが使用するパスワードも定期的に変更する必要があります。
親トピック: オンラインおよびオフラインのシークレットの管理
19.4.1 大規模なデータベース・デプロイメントに対応するスクリプトのOracle Key Vaultでのパスワード管理について
外部キーストアのパスワードを一元的に保管して、そのパスワードを大規模なOracle Database接続のデプロイメントで使用するために安全に取得できます。
パスワードを一元的に保管することで、次のメリットが得られます。
- メンテナンス・スクリプトからクリア・テキストのパスワードの使用が排除されます
- セキュアな外部パスワード・ストアの必要性がなくなります。
- パスワードの変更が簡単になります。
sqlnet.ora
ファイルへの変更は不要です。
以前のリリースでは、Oracle Recovery Manager (Oracle RMAN)のバックアップ、Oracle Data Warehouseへのデータのロード、マテリアライズド・ビューのリフレッシュなどの定期的なメンテナンスを実行するために自動化スクリプトが使用されていました。このようなスクリプトは、高度な権限を持つユーザーのパスワードを使用してログインする必要がありました。これは、スクリプトにハードコードされたクリア・テキストのパスワードが必要になるために、適切なセキュリティ・プラクティスではありませんでした。当然のことながら、パスワードを変更すると、すべてのスクリプトの変更も必要になります。クリアテキストのパスワードの必要性をなくす方法として、自動オープン・ウォレット(セキュアな外部パスワード・ストアと呼ばれる)にパスワードを配置して、そこからパスワードを取得するようにクライアントに指示します。この方法は少数のデータベースには適していますが、データベースが数百にもなると管理が困難です。さらに、パスワードを変更するには、セキュアな外部パスワード・ストアをすべて更新する必要があります。この問題は、パスワードを一元的な場所で保管することで回避できます。
19.4.2 外部キーストアのパスワード・アップロードの構成
大規模なデータベース・デプロイメントに対応するように外部キーストアのパスワード・アップロードを構成するには、まず、Oracle Key VaultクライアントとRESTful APIを使用する必要があります。
19.4.3 例: SQL*Plusの操作で外部キーストアのパスワードを使用する場合のスクリプト
アップロードされているユーザーのUUIDをユーザー名で取得して、そのパスワードをSQL*Plusコマンドに挿入するスクリプトを作成できます。
このスクリプトの利点は、そのデータベースにログインする管理スクリプトやメンテナンス・スクリプトの数に関係なく、スクリプトは同じままであることです。新しいユーザー・アカウントごとに、ユーザーのパスワードと属性ファイルのみをアップロードして、シークレットをアクティブ化します。
たとえば、log-me-in.sh
というスクリプトは、次のようになります。
#!/bin/bash
user="${1}"
export TWO_TASK="${2}"
PRIV="${3}"
export OKV_HOME=/home/oracle/okv
id=$(java -jar okvrestservices.jar kmip -c $OKV_HOME/conf/okvclient.ora -s locate --name $user)
pwd=$(java -jar okvrestservices.jar kmip -c $OKV_HOME/conf/okvclient.ora -s get_secret -u ${id:1:36})
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}"
19.4.4 その他のデータベースとのシークレットの共有
Oracle Key Vaultで情報を共有するには、Oracle Key Vault内の仮想ウォレットと、共有ウォレットへのアクセス権を持つ専用のエンドポイントに接続する複数のデータベースが必要です。