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つのソリューションを提供しています。
- オンプレミスおよびクラウドデータベースに対応のOracle Key Vault(OKV)
- Oracle Cloud Database向けのOCI Vault
本ブログでは、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のレプリケーションは中断されることなく継続されます。
その他の情報
- How to use Customer-Managed TDE Encryption Keys on VM DB Systems in Oracle Cloud
- How to use Customer-Managed TDE Encryption Keys in Oracle Exadata Cloud Service
- How PDB Recovery Isolation in 21c makes your Life easier
- Hot Clone a remote PDB in Data Guard Environments using Transient no-standby PDBs
- A Simple Approach – Creating PDBs in a Data Guard environment with TDE enabled
コメント
コメントを投稿