外部キーストアの使用について

透過的データ暗号化のマスターキー格納先に外部キーストアを使用する場合のメモ。

すでにソフトウェアキーストア(ウォレット)に格納したマスター暗号化キーを使って表領域が暗号化されている状態から、外部キーストアに移行する手順を確認してみる。

外部キーストアの準備

今回外部キーストアとして検証用に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 

コメント