Oracle Exadata Cloud Serviceで顧客が管理するTDE暗号化キーを使用する方法 (2021/07/19)

Oracle Exadata Cloud Serviceで顧客が管理するTDE暗号化キーを使用する方法 (2021/07/19)

https://database-heartbeat.com/2021/07/19/how-to-use-customer-managed-tde-encryption-keys-in-oracle-exadata-cloud-service/



はじめに


Oracle CloudのOracle Databaseは、デフォルトでTransparent Data Encryption (TDE)を使用して、静止状態のデータを保護しています。デフォルトの構成「Oracle-Managed Keys」では、マスター暗号化キーをデータベースサーバー上のローカルなウォレットファイルに保存します。今回、オラクルはOCI Vault Serviceとの統合をサポートし、TDEのマスター暗号化キーを作成・管理したり、既存の暗号化キーをインポートしたりすることができるようになりました。


OCI Vaultは、高可用性、耐久性、および管理されたサービスを提供し、中央の場所からすべてのキーを作成および管理します。


OCI VaultとOracle Key Vault(OKV)を混同しないでください。


  •     OCI Vault:暗号化キーを管理するクラウドサービス
  •     Oracle Key Vault (OKV): 暗号化キーを管理するフルスタックのソフトウェア・アプライアンス


このブログ記事では、顧客管理キーを使用するデータベースを作成する方法と、既存のデータベースのキー管理をオラクル管理キー(ローカルウォレットを使用)から顧客管理キー(OCI Vaultを使用)に変更する方法をご紹介します。


環境について


  •     Exadata Cloud Service(ExaCS)X7-2クォーターラック
  •     Oracle Databaseバージョン19.11(マルチテナント・アーキテクチャ使用時)


準備編

ステップ1: Vaultと暗号化キーの作成


Cloud Consoleから「Vault」を検索し、「Identity & Security」にある「Vault」サービスをクリックします。



「Create Vault」をクリックし、Vault の名前を入力して、Vault を作成します。Vault がアクティブになったら、Vault の名前をクリックして Vault の詳細を確認します。



「キーの作成」をクリックして、鍵の名前を入力し、TDE の顧客管理キーでサポートされている唯一の暗号化アルゴリズムである AES 256 を選択します。



キーを作成します。キーは数秒後に利用可能になります。

Step 2: OCI Vault 内のキーへのアクセスを Exadata Database リソースに許可


VM Cluster detailsページからExadata VM Cluster OCIDを取得します。



VMクラスタOCIDをリソースとして提供する動的グループを作成します。

Any { resource.id = 'ocid1.cloudvmcluster.oc1.phx.abyhqljrxrwolxhj6cqu7ymberiakbj3hj2fwt7hfwlfppeapreaajv3jqna' }.



Dynamic Group のメンバーが OCI Vault のキーにアクセスできるようにするためのポリシーを作成します。


allow dynamic-group Vault_DG to manage keys in tenancy




ステップ 3: Oracle Services Network へのアクセスを許可


Oracle Services Network へのイグレス・トラフィックを許可するように Exadata クライアントのサブネット・セキュリティ・リストを構成します。ルート・テーブルには、サービス・ゲートウェイを経由して Oracle Services Network にトラフィックを転送するルールが設定されている必要があります。


ステップ 4: dbaastools を最新版にアップデート


ユーザーrootでExadata仮想マシンにログインし、以下のコマンドを実行して、dbaastoolsを最新版にアップデートします。


sudo -s

rpm -qa | grep dbaas

dbaascli patch tools list

dbaascli patch tools apply --patchid LATEST


新しいデータベースの作成


新しいデータベースにカスタマーマネージメントキーを使用するには、詳細オプションにスクロールダウンし、「暗号化」タブをクリックし、「カスタマーマネージメントキーを使用する」を選択し、Vaultと以前作成したキーを選択します。



OK、とても簡単でしたね。それでは、Oracle-managed keysを使用している場合のTDEの構成を見てみましょう。キーマネージメントをcustomer-managed keysに変更し、TDEの構成に変更が適用されていることを確認してください。


既存のデータベースのキー管理タイプの変更

変更の前に


キー管理タイプを変更する前に、データベースがoracle-managed keys (local wallet file)を使用している場合の現在の構成を見てみましょう。

-- formatting
set lines 300
set pages 100
col name for a20
col wrl_type for a10
col status for a15
col wallet_order for a15
col key_id for a60
col keystore_type for a20
col origin for a20
col encryptionalg for a15
col encryptedts for a15
col inst_id for 999
col value for a60
 
-- status of the wallet and the wallet location
SQL> select p.con_id, p.name, p.open_mode, ew.wrl_type, ew.wallet_type, ew.status, ew.wallet_order
from v$pdbs p join v$encryption_wallet ew on (ew.con_id = p.con_id)
order by p.con_id;
 
    CON_ID NAME            OPEN_MODE  WRL_TYPE   WALLET_TYPE          STATUS          WALLET_ORDER
---------- --------------- ---------- ---------- -------------------- --------------- ---------------
         2 PDB$SEED        READ ONLY  FILE       AUTOLOGIN            OPEN            SINGLE
         3 PDB1            READ WRITE FILE       AUTOLOGIN            OPEN            SINGLE
 
-- master encryption key description attributes
SQL> select con_id, key_id, keystore_type, origin from v$encryption_keys;
 
    CON_ID KEY_ID                                                       KEYSTORE_TYPE        ORIGIN
---------- ------------------------------------------------------------ -------------------- --------------------
         1 ASFX5KQeDE9mvwJzKyhBtD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA         SOFTWARE KEYSTORE    LOCAL
         3 AfuItHCV5k/Fv1BsWpeHJgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA         SOFTWARE KEYSTORE    LOCAL
 
-- encrypted tablespaces
SQL> select t.con_id, t.name, et.encryptionalg, et.encryptedts, et.encryptedkey from v$tablespace t join v$encrypted_tablespaces et on (t.ts# = et.ts#) order by t.con_id, name;
 
    CON_ID NAME            ENCRYPTIONALG   ENCRYPTEDTS     ENCRYPTEDKEY
---------- --------------- --------------- --------------- ----------------------------------------------------------------
         1 SYSAUX          AES128          YES             0D9F8565ACC8FA55F9622697FE362D4E00000000000000000000000000000000
         1 SYSTEM          AES128          YES             9E1C0695053E874930B89C69681807DB00000000000000000000000000000000
         . ......
 
-- wallet path and configuration
SQL> select name, value from v$parameter where name in ('wallet_root', 'tde_configuration');
 
NAME                 VALUE
-------------------- ------------------------------------------------------------
wallet_root          /var/opt/oracle/dbaas_acfs/CDB1911/wallet_root
tde_configuration    keystore_configuration=FILE
 
-- content of sqlnet.ora
cat $ORACLE_HOME/network/admin/CDB1911/sqlnet.ora
ENCRYPTION_WALLET_LOCATION =
 (SOURCE=
  (METHOD=FILE)
   (METHOD_DATA=
    (DIRECTORY=/var/opt/oracle/dbaas_acfs/CDB1911/wallet_root/tde)))
 
-- content of the wallet directory
ls -ltr /var/opt/oracle/dbaas_acfs/CDB1911/wallet_root/tde
-rw------- 1 oracle oinstall 5467 Jul 15 07:14 ewallet.p12 --password wallet
-rw------- 1 oracle oinstall 5512 Jul 15 07:14 cwallet.sso --auto login wallet


キーの管理タイプを変更してCustomer-Managed Keysを使用する


データベースの詳細ページから、「その他のアクション」をクリックし、「暗号化キーの管理」をクリックします。



「キー管理タイプの変更」をクリックし、「顧客が変更したキーを使用する」を選択し、Vaultと以前作成したキーを選択します。



「Apply」をクリックします。データベース名を入力して 「Change Key Management Type」をクリックすると、変更を確認するメッセージが表示されます。



操作が完了するまで、データベースはUI上で「更新中」の状態になります。


一方、気になる方は、バックグラウンドでデータベースのアラートログを監視することができます。

tail -f /u02/app/oracle/diag/rdbms/cdb1911_phx1qn/CDB19111/trace/alert_CDB19111.log


お客様が管理するキーへの変換には、合計で約15分かかります。キーの管理を変更すると、すべてのデータベースインスタンスが再起動されるため、データベースが利用できなくなります。操作が正常に完了すると、UIに変更が反映されます。UIに変更が反映されるまで、さらに数秒かかります。




変更後


それでは、新しいTDEの設定を見て、何が変更されたかを確認してみましょう。


ウォレットの状態と、ウォレットの場所



プライマリウォレットである「OKV」ウォレットを追加しています。


しかし、これは少し混乱しています。私たちはOKV(Oracle Key Vault)ではなく、OCI Vaultサービスを使用しているからです。これらは2つの全く異なるものです。


別のデータベース(CDBではないバージョン12.1)では、ウォレットタイプは「HSM」と表示されていますが、これはOCI Vaultにとってより正しい値だと私は思います。




マスター暗号化キーの記述属性



マスター暗号化キーがローテーションされたため、KEY_IDが変更されています。キーの詳細ページで、OCI Vault Keyに対して新しいキーのバージョンが自動的に作成されているのがわかります。



暗号化されたテーブルスペース



テーブルスペースの暗号化キーは変更されていますが、暗号化アルゴリズムはAES128のままです。つまり、これはマスターの暗号化キーがAES256であることとは無関係です。


ウォレットのパスと設定



wallet_rootはそのままですが、tde_configurationは "FILE "ではなく "OKV|FILE "になりました。


sqlnet.ora



sqlnet.oraのMETHODも "OKV "になります。ここでもCDB 12.1以外のデータベースでは "HSM "となりました。


ウォレット・ディレクトリの内容



パスワードウォレット(ewallet.p12)とオートログインウォレット(kwallet.sso)の両方が残っています。ewallet.p12にはキーが残っています。

cd /var/opt/oracle/dbaas_acfs/CDB1911/wallet_root/tde
orapki wallet display -wallet ./ewallet.p12
...
ORACLE.SECURITY.DB.ENCRYPTION.AfuItHCV5k/Fv1BsWpeHJgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ORACLE.SECURITY.DB.ENCRYPTION.ASFX5KQeDE9mvwJzKyhBtD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
...


では、OCI Vaultのキーが使われているかどうかを確認するにはどうすればよいのでしょうか。これは非常に簡単です。ewallet.p12のパスワードウォレットの名前を変更し、データベースを再起動します。自動ログイン用のウォレットが使われているので、再起動は成功します。



新しいテーブルスペースの作成も成功します。



追加のプラグイン式データベースの作成


PDB$SEEDから新しいプラグイン式データベースを作成する場合、新しいPDBにはマスター暗号化キーがありません。

SQL> create pluggable database PDB2 admin user pdbadmin identified by MyAdminPW__22;
 
Pluggable database created.
 
SQL> alter pluggable database PDB2 open instances=all;
 
Pluggable database altered.
 
SQL> alter session set container = PDB2;
 
Session altered.
 
SQL> select key_id, keystore_type, origin from v$encryption_keys;
 
no rows selected

新しいマスター暗号化キーを作成します。

SQL> ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY MyWalletPW__11 WITH BACKUP;
 
keystore altered.
 
SQL> select key_id, keystore_type, origin from v$encryption_keys;
 
KEY_ID                                   KEYSTORE_TYPE        ORIGIN
---------------------------------------- -------------------- --------------------
06AD09A1F0E7014F21BF9F2150E312A6D5       OKV                  LOCAL


コマンドが実行されている間、UIでは新しいバージョンのキーが作成されているのがわかります。



ローカルPDBクローニングも同じ方法で行います。

SQL> create pluggable database PDB3 from PDB1 keystore identified by "MyWalletPW__11";

 

Pluggable database created.


リモートPDBクローニングでは、ターゲットCDBもOCI Vaultを使ってキーマネージメントを行い、同じOCI Vaultキーを使用する必要があります。ターゲットCDBのキー管理を変更する場合は、ソースCDBで使用しているのと同じキーを選択する必要があります。操作中、新しいキーバージョンが作成されます。

-- on source CDB
SQL> grant create session, sysoper to C##SYSOPER identified by MySYSoperWP__11 container=all;
 
Grant succeeded.
 
-- on target CDB
SQL> create database link DBLINK_TO_B connect to C##SYSOPER identified by MySYSoperWP__11 using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.2.2)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = CDB1911B_phx1n8.exacsdns.exavcn.oraclevcn.com)))';
 
Database link created.
 
SQL> create pluggable database PDB1RC from PDB1@DBLINK_TO_B keystore identified by "MyWalletPW__11";
 
Pluggable database created.


その他の検討事項

バックアップから新しいデータベースを作成


通常、クラウドツーリングを使用して、バックアップから新しいデータベースを作成することができます。ただし、データベースのキー管理にOCI Vaultを使用している場合は、お客様が変更したキーで暗号化されたバックアップはインプレースリストアにしか使用できません。







ADMINISTER KEY MANAGEMENT SQL コマンドを使用したキーのエクスポート


ADMINISTER KEY MANAGEMENT SQL コマンドは、ウォレットからのキーのエクスポートにのみ使用できますが、OKV や OCI Vault からは使用できません。

SQL> administer key management export keys with secret "MySecretPW__11" to '/home/oracle/cdb.key' force keystore identified by "MyWalletPW__11";

 

ORA-46650: cannot retrieve information for a master key identifier


このような場合は、まず外部のキーストアからマイグレーションバックする必要があります。

外部のキーストアからのマイグレーションバック


顧客管理キーからOracle管理キーへの移行機能は、クラウドツーリングでは提供されていません。しかし、このドキュメントに従えば、OCI Vaultからローカルウォレットに再び移行することができます。この操作の間も、データベースは利用可能です。

-- edit the keystore directory location on all nodes, set METHOD=FILE
vi $ORACLE_HOME/network/admin/CDB1911/sqlnet.ora
ENCRYPTION_WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = /var/opt/oracle/dbaas_acfs/CDB1911/wallet_root/tde/)
    )
  )
 
SQL> alter system set tde_configuration='KEYSTORE_CONFIGURATION=FILE' scope=both sid='*';
 
System altered.
 
-- reverse migrate the keystore, execute on one node
SQL> ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "MyWalletPW__11" REVERSE MIGRATE USING "SYS:MyWalletPW__11" WITH BACKUP;
 
keystore altered.
 
-- restart the database instances on all other nodes to reflect the change
srvctl stop instance -db CDB1911_phx1qn -instance CDB19112
srvctl start instance -db CDB1911_phx1qn -instance CDB19112
 
SQL> select p.con_id, p.name, p.open_mode, ew.wrl_type, ew.wallet_type, ew.status, ew.wallet_order
from v$pdbs p join v$encryption_wallet ew on (ew.con_id = p.con_id)
order by p.con_id;
 
    CON_ID NAME            OPEN_MODE  WRL_TYPE   WALLET_TYPE          STATUS     WALLET_ORDER
---------- --------------- ---------- ---------- -------------------- ---------- ---------------
         2 PDB$SEED        READ ONLY  FILE       PASSWORD             OPEN       SINGLE
         3 PDB1            READ WRITE OKV        OKV                  OPEN       SECONDARY
         3 PDB1            READ WRITE FILE       PASSWORD             OPEN       PRIMARY
-- password wallet is the primary now
 
-- change the keystore password if required (do not change the password if you want to "reverse reverse migrate", check next topic below)
SQL> ADMINISTER KEY MANAGEMENT ALTER KEYSTORE PASSWORD IDENTIFIED BY "MyWalletPW__11" SET "MyWalletPW__22" WITH BACKUP USING 'pwd_change';
 
keystore altered.
 
-- export the master encryption key
SQL> administer key management export keys with secret "MySecretPW__22" to '/home/oracle/cdb.key' force keystore identified by "MyWalletPW__22";
 
keystore altered.


これはクラウドツールの外での手動操作であるため、変更内容はクラウドのコントロールプレーンには同期されず、UIには「顧客が管理するキー」が表示されたままになることに留意してください。


"リバース・リバース・マイグレート"


再びOCI Vaultに戻りたい場合はどうすればよいでしょうか。クラウドコンソールにはそのためのオプションはありませんが、dbaascliというコマンドラインツールを使って実現できます。また、クラウドのコントロールプレーンから見ると、データベースはOCI Vaultを使用していることを忘れないでください。


この操作中は、すべてのデータベースインスタンスが再起動されるため、データベースは利用できなくなります。完了までには5~7分程度かかります。


注:データベース名は、TDEパスワードを含む/var/opt/oracle/dbaas_acfs/CDB1911/db_wallet/にあるdbウォレット(cwallet.sso)を見つけるために、大文字でなければなりません。このため、dbaascliコマンドでTDEのパスワードを指定する必要はありません。


-- as root user
KEY_OCID=ocid1.key.oc1.phx.bbqccvs3aafqw.abyhqljr7pca4v7beztarxj2kd6ekhwp5h3nco65wl6n5csp6emluegjvdbq
DBNAME=CDB1911
dbaascli tde file_to_hsm --kmsKeyOCID $KEY_OCID --dbname $DBNAME --precheckOnly yes
dbaascli tde file_to_hsm --kmsKeyOCID $KEY_OCID --dbname $DBNAME --precheckOnly no
 
# if you changed the password during reverse migrate, then:
# set it back to the original value using "dbaascli tde changePassword --dbname $DBNAME", this will update the db wallet as well.
# or revert it back in the database: ADMINISTER KEY MANAGEMENT ALTER KEYSTORE PASSWORD IDENTIFIED BY MyWalletPW__22 SET MyWalletPW__11 WITH BACKUP;


そして今、OCI Vaultは再びプライマリーになりました。

select p.con_id, p.name, p.open_mode, ew.wrl_type, ew.wallet_type, ew.status, ew.wallet_order
from v$pdbs p join v$encryption_wallet ew on (ew.con_id = p.con_id)
order by p.con_id;
 
    CON_ID NAME            OPEN_MODE  WRL_TYPE   WALLET_TYPE          STATUS          WALLET_ORDER
---------- --------------- ---------- ---------- -------------------- --------------- ---------------
         2 PDB$SEED        READ ONLY  FILE       AUTOLOGIN            OPEN            SINGLE
         2 PDB$SEED        READ ONLY  OKV        OKV                  OPEN            SINGLE
         3 PDB1            READ WRITE FILE       AUTOLOGIN            OPEN            SECONDARY
         3 PDB1            READ WRITE OKV        OKV                  OPEN            PRIMARY


METHODは、すべてのノードのsqlnet.oraで自動的にOKVに設定されます。


まとめ


OCI Vaultを使ったTDE暗号化キーの管理は、データベース作成時にすぐに行っても、後からキーの管理を変更しても、非常に簡単です。Vaultサービスで独自のキーを作成またはインポートし、データベースの作成時またはその後のキー管理の変更時にそれを選択するだけです。


一度OCI Vault(顧客管理キー)を利用すると、クラウドツールを使ってローカルウォレット(オラクル管理キー)の利用に戻すことはできません。しかし、この操作を予約することは、SQLコマンドを使って可能です。dbaascliコマンドラインツールを使って、OCI Vaultに再び切り替えることも可能です。


最後になりますが、OCI VaultとOracle Key Vault(OKV)を混同しないでください。

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

Oracle GoldenGate 23aiでMicrosoft Fabricでのオープン・ミラーリングがサポートされるようになりました (2024/11/19)

OCIサービスを利用したWebサイトの作成 その4~Identity Cloud Serviceでサイトの一部を保護 (2021/12/30)