OCI VaultによるTDE鍵管理でData Guard環境にPDBを作成 (2022/06/07)

OCI VaultによるTDE鍵管理でData Guard環境にPDBを作成 (2022/06/07)

https://database-heartbeat.com/2022/06/07/create-pdb-dg-oci-vault/



はじめに


Oracle Cloud上のOracle Databasesはマルチテナントアーキテクチャを使用しており、デフォルトでTDEで暗号化されています。TDEマスター暗号化キーにローカルウォレットを使用しながらData Guard環境で新しいPDBを作成するには、ウォレットファイルのコピーとスタンバイ上のPDBのリカバリといういくつかの追加手順が必要です。これらのアプローチについては、以前のブログ記事で説明しました。


ローカルウォレットの問題点は、新しく作成したPDBに対してTDEマスター暗号化キーを作成するとすぐに、スタンバイ上のローカルウォレットはそれを認識できなくなることです。解決策としては、プライマリとスタンバイの両方で同時に使用される集中型ウォレットを用意することです。Oracleは2つのソリューションを提供しています。



本ブログでは、OCI Vaultを使用する場合について説明します。



環境について


以前のブログ記事で、Oracle Cloud上のVM DB SystemでTDEキー管理にOCI Vaultを使用できるようにしました。ここでは、そのシステムを引き続き使用し、Data Gaurdを有効にして、新しいPDBをプロビジョニングし、そのPDB用のTDEマスター暗号化キーを作成することにします。


集中型のキー管理ソリューションを使用しているため、PDBとTDEマスター暗号化キーの作成は、追加の手順を必要とせず、完全に透過的であるべきです。



準備


スタンバイDB SystemがTDEキーにアクセスするためには、OCI Vaultにアクセスできるようにする必要があります。しかし、DBシステムのOCIDはまだプロビジョニングされていないので、どのようにすればいいのでしょうか。その答えは、指定されたコンパートメント内のすべてのDBシステムがOCI Vaultにアクセスできるように、コンパートメントレベルでリソースを許可することです。


IAM Dynamic Groupにresource.compartment.id(instance.compartment.idではない)を使って以下のようにルールを追加してください。

Any {resource.compartment.id = '<compartment_OCID>'}



Data Guardの有効化


データベースの詳細ページで、左側の「リソース」の下にある「Data Guard Associations」をクリックし、「Enable Data Guard」をクリックします。



OCI Vault はリージョナルサービスであり、同じリージョンの VM DB システムのみが同じ TDE キーにアクセスできるため、現時点ではリージョン内Data Guardのみが利用可能です。プライマリと同じリージョンを選択し、必要な情報を入力し、Enable Data Guardをクリックします。



新しいPDBを作成


残念ながら、Data Guardが有効なときに新しいPDBを作成することは、まだCloud Toolingから利用できないので、SQLを使って従来の方法で行う必要があります。

SQL> create pluggable database PDB002 admin user pdb2admin identified by SecPDBpw#2;
 
Pluggable database created.
 
SQL> alter pluggable database PDB002 open instances=all;
 
Pluggable database altered.



TDE Master Encryption Keyの作成


新規作成したPDBに対してTDE Master Encryption Keyを作成すると、OCI Vaultに新しいバージョンのキーが作成され、プライマリおよびスタンバイの両方からアクセスできるようになります。

SQL> alter session set container = PDB002;
 
Session altered.
 
SQL> ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY MyWalletPW__11 WITH BACKUP;
 
*
ERROR at line 1:
ORA-46627: keystore password mismatch


OCI Vaultに切り替える際に、ローカルTDEウォレットのパスワードがバックグラウンドで変更されました。そのため、エラーメッセージは正しいのですが、何が起こったのか分からないと誤解を招く可能性があります。


キーはOCI Vaultで管理されているので、SQL文ではなくdbcliコマンドライン経由でキーの作成とローテーションを行う必要があります。プライマリー・データベース・ホストにユーザーrootとしてログインしてください。

# check database id
[root@hosttestcmk ~]# dbcli list-databases
ID                                       DB Name    DB Type  DB Version           CDB        Class    Shape    Storage    Status        DbHomeID                      
---------------------------------------- ---------- -------- -------------------- ---------- -------- -------- ---------- ------------ ----------------------------------------
eb3a9e23-b45b-4185-b701-ecaa12a94ea3     CDBCMK     Si       19.15.0.0.0          true       Oltp              ASM        Configured   3a773a43-8074-4dc0-9c99-fc0cfec2b453
 
# rotate the key (will create one if non exists and rotate it)
[root@hosttestcmk ~]# dbcli update-tdekey --databaseId eb3a9e23-b45b-4185-b701-ecaa12a94ea3 --pdbNames PDB002 --password MyWalletPW__11
{
  "jobId" : "521b107e-e8b5-4e19-ab62-49dd21b5de74",
  "status" : "Created",
  "message" : null,
  "reports" : [ ],
  "createTimestamp" : "May 29, 2022 16:19:41 PM UTC",
  "resourceList" : [ ],
  "description" : "TDE update CDBCMK - PDBs: [PDB002]",
  "updatedTime" : "May 29, 2022 16:19:44 PM UTC",
  "percentageProgress" : "0%",
  "cause" : null,
  "action" : null
}


Cloud Consoleのkey versionsのページを見ると、新しいキーバージョンが作成されていることがわかります。



しばらくすると、キーがローテーションし、新しいバージョンが作成されます。



PDBに戻り、SQLでキーを確認します。

SQL> alter session set container = PDB002;
 
Session altered.
 
SQL> select con_id, key_id, keystore_type from v$encryption_keys order by con_id;
 
    CON_ID KEY_ID                                                       KEYSTORE_TYPE
---------- ------------------------------------------------------------ --------------------
         4 0684D3D9AB307A4F67BF3DB2BAC6B84523                           OKV

また、v$encryption_keysビューのどのKEY_IDがどのOCI Vault Key Versionと関連付けられているかを再確認することもできます。プライマリデータベースホストにユーザーOracleとしてログインします。

[oracle@hosttestcmk ~]$ kms-tde-cli find-ocid-for-mkid 0684D3D9AB307A4F67BF3DB2BAC6B84523
ocid1.keyversion.oc1.eu-frankfurt-1.cbrcwrdiaafxy.bc4kmkjz3ciaa.abtheljtx4jmj5vh5xpc7yf7ijxxqkmxcuhkuo6o4g2zqvcv47e3iuxwxyoa



スタンバイのTDEキーの確認


スタンバイ・データベースにログインし、新しいPDB内からキーをチェックします。

SQL> alter session set container = PDB002;
 
Session altered.
 
SQL> alter pluggable database open read only;
 
Pluggable database altered.
 
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
---------- -------------------- ---------- ---------- -------------------- ------------------------------ ---------------
         6 PDB005               READ ONLY  FILE       AUTOLOGIN            OPEN_NO_MASTER_KEY             SINGLE
         6 PDB005               READ ONLY  OKV        OKV                  OPEN                           SINGLE
 
SQL> select con_id, key_id, keystore_type from v$encryption_keys order by con_id;
 
no rows selected

スタンバイにはまだキーが表示されていませんが、キーは存在します。これを証明するために、暗号化された表領域とテーブルを作成すると、これらがスタンバイに正常にレプリケートされることがわかります。


問題は、スタンバイに新しいPDBに関するメタデータがないことです。メタデータを手動で更新することができます。スタンバイホストにユーザー oracle としてログインします。

# kms-tde-cli add-tde-metadata --db-unique-name <db_unique_name> <key_version_OCID>
[oracle@hosttestcmkad2 ~]$ kms-tde-cli add-tde-metadata --db-unique-name CDBCMK_fra2gq ocid1.keyversion.oc1.eu-frankfurt-1.cbrcwrdiaafxy.bc4kmkjz3ciaa.abtheljtx4jmj5vh5xpc7yf7ijxxqkmxcuhkuo6o4g2zqvcv47e3iuxwxyoa
# the key_id will be displayed
0684D3D9AB307A4F67BF3DB2BAC6B84523
 
# double-check
[oracle@hosttestcmkad2 ~]$ kms-tde-cli find-ocid-for-mkid 0684D3D9AB307A4F67BF3DB2BAC6B84523
ocid1.keyversion.oc1.eu-frankfurt-1.cbrcwrdiaafxy.bc4kmkjz3ciaa.abtheljtx4jmj5vh5xpc7yf7ijxxqkmxcuhkuo6o4g2zqvcv47e3iuxwxyoa

PDBに再ログインします。

SQL> select con_id, key_id, keystore_type from v$encryption_keys order by con_id;
 
    CON_ID KEY_ID                                                       KEYSTORE_TYPE
---------- ------------------------------------------------------------ --------------------
         4 0684D3D9AB307A4F67BF3DB2BAC6B84523                           OKV

スタンバイデータベースは、プライマリで使用されているキーと同じキーにアクセスできます。Data Guardの構成が健全であり、REDOが適用されています。

DGMGRL> show configuration
 
Configuration - CDBCMK_fra1bp_CDBCMK_fra2gq
 
  Protection Mode: MaxAvailability
  Members:
  CDBCMK_fra1bp - Primary database
    CDBCMK_fra2gq - Physical standby database
 
Fast-Start Failover:  Disabled
 
Configuration Status:
SUCCESS   (status updated 16 seconds ago)



まとめ

OCI Vaultをキーの集中管理ソリューションとして使用することで、Data Guard環境におけるTDEキーの作成とローテーションを透過的に行うことができます。キーが作成またはローテーションされるとすぐに、プライマリとスタンバイの両方がそのキーにアクセスできるようになります。Data Gaurdのレプリケーションは中断されることなく継続されます。


その他の情報

コメント

このブログの人気の投稿

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

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

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