透過的データ暗号化のマスターキー格納先に外部キーストアを使用する場合のメモ。
すでにソフトウェアキーストア(ウォレット)に格納したマスター暗号化キーを使って表領域が暗号化されている状態から、外部キーストアに移行する手順を確認してみる。
外部キーストアの準備
今回外部キーストアとして検証用にOracle Key Vaultを使うため、別途インストールして設定する。使用するバージョンは21.9。
Oracle Key Vaultはソフトウェアアプライアンスなので、ISOからOSとソフトウェアが一括でインストールされる。インストール自体は画面の指示に従えば特に詰まるところなく終わるはず。VMwareの場合、disk.EnableUUID=TRUEの設定を追加しないといけないのが注意点か。インストール時に出力されるメッセージの端々を見る限り、どうやらAudit Vault Serverを流用して作られているようだ。マニュアル上はシステム要件の必要ディスクが2TBとされていたが、シンプロビジョニングで作成したVMwareの仮想ディスクサイズは90GB弱程度だった。
インストール後の初期設定で、Key Administrator、System Administrator、Audit Manager のユーザ名とパスワード設定が求められる。ここで設定するパスワードは初回ログイン時に変更が強制されるので、一時的なものにしておいた方がいい。今回ユーザ名はそれぞれ適当に KEYADM、SYSADM、AMGR としておいた。
次に、暗号化対象のデータベースサーバに紐づくエンドポイントを登録する。System Administratorのアカウントでログインしたら、Endpoints → Add ボタンで追加。
エンドポイント名やタイプを登録してRegister。
Statusが REGISTERED の状態で登録される。ここに出ている Enrollment Tokenをどこかにコピーしておく。
一旦ログアウトして、ログイン画面にある「Endpoint Enrollment and Software Download」のリンクを押下。
Enroll Endpoint & Download Software の画面で先ほどコピーしたEnrollment Tokenをペーストして Submit Tokenを押し、Enrollボタンを押すとKey Vaultのクライアントソフトウェアのjarファイルがダウンロードできる。
そうしたら、ダウンロードしたjarファイルをデータベースサーバに転送する。クライアントソフトウェアの動作には適切なバージョンのJDKが必要。今回はJDK8をインストールした。
# rpm -ivh jdk-8u431-linux-x64.rpm
クライアントソフトウェアは以下のように /home/oracle/okv_home にインストール。事前にORACLE_HOME、ORACLE_BASE、ORACLE_SIDの環境変数は指定しておいた方がよさそう。
途中でパスワードを聞かれるので適切なものを設定しておく。今回は EndPoint123 というパスワードにしている。
$ mkdir /home/oracle/okv_home
$ java -jar okvclient.jar -d /home/oracle/okv_home -v
Detected JAVA_HOME: /usr/lib/jvm/jdk-1.8.0_431-oracle-x64/jre
Detected ORACLE_HOME: /u01/app/oracle/product/19.0.0/dbhome_1
Detected ORACLE_BASE: /u01/app/oracle
Using OKV_HOME: /home/oracle/okv_home
Please set environment variables ORACLE_HOME, ORACLE_BASE, and OKV_HOME
consistently across processes.
Enter new Key Vault endpoint password (<enter> for auto-login):
Confirm new Key Vault endpoint password:
The endpoint software for Oracle Key Vault installed successfully.
Deleted the file : /tmp/okvclient.jar
rootで実行するスクリプトがあるのでそれも実行。
# cd /home/oracle/okv_home
# bin/root.sh
Creating directory: /opt/oracle/extapi/64/hsm/oracle/1.0.0/
Copying PKCS library to /opt/oracle/extapi/64/hsm/oracle/1.0.0/
Setting PKCS library file permissions
Installation successful.
そしてKey Vault内にキーストア格納のためのウォレットを作り、エンドポイントと紐づける。
Key VaultにKey Administratorでログインして、Keys&Wallets → Create でウォレットを作成する。
適当な名前を付けて Save。
Endpoints 画面で先に追加したエンドポイントを選択して、Default Wallet から Choose Walletを選択。
先ほど作ったウォレットを選択して、次の画面でSaveする。
Key Vault側の準備はこれで完了。
データベース側の準備
19cのデータベースを使う。すでにソフトウェアキーストアで表領域が暗号化されているという前提にしたいので、そのための準備をする。
ウォレットの場所を作成。
$ mkdir -p /home/oracle/wallet/tde
ウォレットの場所の指定。
SQL> alter system set wallet_root='/home/oracle/wallet' scope=spfile;
SQL> shu immediate
SQL> startup
SQL> alter system set tde_configuration="KEYSTORE_CONFIGURATION=FILE";
SQL> shu immediate
SQL> startup
ウォレットの作成とマスター暗号化キーの格納。
SQL> administer key management create keystore '/home/oracle/wallet/tde' identified by oracle;
Key MANAGEMENTが正常に実行されました。
SQL> administer key management set key force keystore identified by oracle with backup;
Key MANAGEMENTが正常に実行されました。
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_ORDER KEYSTORE_MODE FULLY_BACKED_UP CON_ID
___________ ___________________________ _________ ______________ _______________ ________________ __________________ _________
FILE /home/oracle/wallet/tde/ OPEN PASSWORD SINGLE NONE NO 0
表領域の暗号化。
SQL> alter tablespace system encryption online encrypt;
Tablespace SYSTEMが変更されました。
SQL> alter tablespace sysaux encryption online encrypt;
Tablespace SYSAUXが変更されました。
SQL> alter tablespace undotbs1 encryption online encrypt;
Tablespace UNDOTBS1が変更されました。
SQL> alter tablespace users encryption online encrypt;
Tablespace USERSが変更されました。
SQL> select tablespace_name, ENCRYPTED FROM DBA_TABLESPACES ;
TABLESPACE_NAME ENCRYPTED
__________________ ____________
SYSTEM YES
SYSAUX YES
UNDOTBS1 YES
TEMP NO
USERS YES
外部キーストアへのマスター暗号化キーの移行
一つ重要な手順として、WALLET_ROOT 初期化パラメータのディレクトリ配下に、Key Vaultクライアントソフトウェアの場所へのシンボリックリンクをokv という名前で張っておく必要がある。
$ cd /home/oracle/wallet/
$ ln -s /home/oracle/okv_home okv
TDE_CONFIGURATIONを OKV|FILE に変更したら、MIGRATE コマンドを実行する。
SQL> ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=OKV|FILE';
System SETが変更されました。
SQL> ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "EndPoint123" MIGRATE USING oracle;
Key MANAGEMENTが正常に実行されました。
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_ORDER KEYSTORE_MODE FULLY_BACKED_UP CON_ID
___________ ___________________________ _________ ______________ _______________ ________________ __________________ _________
FILE /home/oracle/wallet/tde/ CLOSED UNKNOWN SECONDARY NONE UNDEFINED 0
OKV OPEN OKV PRIMARY NONE UNDEFINED 0
すると、ソフトウェアキーストアの方は自動的にクローズし、外部キーストアがOPEN状態になる。
ちなみに、この時点では自動ログインキーストアを作っていないので、データベースを再起動するとマスター暗号化キーにアクセスできずOPENに失敗する。
SQL> shu immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
ORA-28365: ????????????????
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_ORDER KEYSTORE_MODE FULLY_BACKED_UP CON_ID
___________ ___________________________ _________ ______________ _______________ ________________ __________________ _________
FILE /home/oracle/wallet/tde/ CLOSED UNKNOWN SINGLE NONE UNDEFINED 0
OKV CLOSED UNKNOWN SINGLE NONE UNDEFINED 0
SQL> administer key management set keystore open identified by "EndPoint123";
Key MANAGEMENTが正常に実行されました。
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_ORDER KEYSTORE_MODE FULLY_BACKED_UP CON_ID
___________ ___________________________ _________________________________ ______________ _______________ ________________ __________________ _________
FILE /home/oracle/wallet/tde/ CLOSED UNKNOWN SINGLE NONE UNDEFINED 0
OKV OPEN_UNKNOWN_MASTER_KEY_STATUS OKV SINGLE NONE UNDEFINED 0
SQL> alter database open;
Databaseが変更されました。
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_ORDER KEYSTORE_MODE FULLY_BACKED_UP CON_ID
___________ ___________________________ _________ ______________ _______________ ________________ __________________ _________
FILE /home/oracle/wallet/tde/ CLOSED UNKNOWN SECONDARY NONE UNDEFINED 0
OKV OPEN OKV PRIMARY NONE UNDEFINED 0
自動ログインの有効化
TDE_CONFIGURATIONが OKV|FILE となっている状態で、ADD SECRETコマンドでシークレットの登録をする。
SQL> show parameter tde_configuration
NAME TYPE VALUE
----------------- ------ -------------------------------
tde_configuration string KEYSTORE_CONFIGURATION=OKV|FILE
SQL>
SQL> administer key management add secret 'EndPoint123' for client 'OKV_PASSWORD' to auto_login keystore '/home/oracle/wallet/tde' with backup;
Key MANAGEMENTが正常に実行されました。
一度再起動をかけてみると、問題なくデータベースが起動できる。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 1073739904 bytes
Fixed Size 8947840 bytes
Variable Size 276824064 bytes
Database Buffers 780140544 bytes
Redo Buffers 7827456 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_ORDER KEYSTORE_MODE FULLY_BACKED_UP CON_ID
___________ ___________________________ _____________________ ______________ _______________ ________________ __________________ _________
FILE /home/oracle/wallet/tde/ OPEN_NO_MASTER_KEY AUTOLOGIN SECONDARY NONE UNDEFINED 0
OKV OPEN OKV PRIMARY NONE UNDEFINED 0
コメント