初めてTDEの設定をしてみたので、忘れないように手順をアウトプットしておきます。
はじめに
「データベースに格納するデータを暗号化する」方式はいくつかあり、どのタイミングで暗号化するかの観点で大きく3つに分けられます。
- アプリケーションで暗号化してからデータベースに格納
- データベースの暗号化機能を利用 ← この記事で扱う内容
- ストレージの暗号化機能を利用
今日はデータベース暗号化機能、Oracle Databaseにおける透過的データ暗号化(TDE)の手順を書いていきます。
透過的データ暗号化(TDE)とは
特徴
- アプリケーションからは透過的にデータの暗号化・復号することでき、既存のアプリケーション (SQL)を改修する必要ない
- Oracle Databaseのデータファイルやバックアップファイルの物理的な盗難リスクに対して安全にデータを保護
より詳細な説明が欲しい方はAdvanced Securityガイドをご確認下さい
環境
Oracle Linux8
Oracle Database19
※PDB構成の場合は、以下の2つのマスター暗号鍵の管理方法が有りますが、今回は統一モードで実施していきます。
-
統一モード:CDBで作成した1つのキーストアー内にPDBそれぞれのマスター暗号鍵が格納される
-
分離モード:PDBごとに専用のキーストアを作成し、マスター暗号鍵を格納する
手順
CDBでキーストアとマスター暗号鍵した後に、PDBでCDBをのキーストアをオープンして、PDBのマスター暗号鍵を作成する流れになります。
①walletディレクトリを作成
-
$ORACLE_BASE/admin/<SID>/wallet
を作成,確認
[oracle@devdays-23c ~]$ mkdir -p $ORACLE_BASE/admin/FREE/wallet
[oracle@devdays-23c ~]$ cd /opt/oracle/admin
[oracle@devdays-23c admin]$ ls
FREE
[oracle@devdays-23c admin]$ cd FREE/
[oracle@devdays-23c FREE]$ ls
dpdump pfile wallet xdb_wallet
ちなみに、SIDの値がわからない場合は以下のように確認ができる
[oracle@devdays-23c ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - Production on Fri Apr 12 00:26:38 2024
Version 23.3.0.23.09
Copyright (c) 1982, 2023, Oracle. All rights reserved.
Connected to:
Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.3.0.23.09
SQL> SELECT host_name, instance_name FROM v$instance;
HOST_NAME
----------------------------------------------------------------
INSTANCE_NAME
----------------
devdays-23c
FREE
②初期化パラメータファイルのWALLET_ROOTを指定
-
ALTER SYSTEM SET WALLET_ROOT="$ORACLE_BASE/admin/<SID>/wallet" SCOPE=spfile
を実行する
[oracle@devdays-23c ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.0.0.0.0 - Production on Fri Apr 12 00:32:13 2024
Version 23.3.0.23.09
Copyright (c) 1982, 2023, Oracle. All rights reserved.
Connected to:
Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.3.0.23.09
SQL> ALTER SYSTEM SET WALLET_ROOT="$ORACLE_BASE/admin/FREE/wallet" SCOPE=spfile;
System altered.
③Databaseの再起動
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 1603679416 bytes
Fixed Size 5313720 bytes
Variable Size 436207616 bytes
Database Buffers 1157627904 bytes
Redo Buffers 4530176 bytes
Database mounted.
Database opened.
④初期化パラメータファイルのKEYSTORE_CONFIGURATION を指定
-
ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" SCOPE=both
を実行する
SQL> ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=FILE" SCOPE=both;
System altered.
⑤CDBにキーストアとマスター暗号鍵を作成
-
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY “<パスワード>”
を実行 -
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY “<パスワード>”
を実行 -
ADMINISTER KEY MANAGEMENT SET KEY USING TAG 'TDE KEY' IDENTIFIED BY “<パスワード>” WITH BACKUP
を実行
SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY “WelCome123#123#”;
keystore altered.
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY “WelCome123#123#”;
keystore altered.
SQL> ADMINISTER KEY MANAGEMENT SET KEY USING TAG 'TDE KEY' IDENTIFIED BY “WelCome123#123#” WITH BACKUP;
keystore altered.
SQL>
作成したキーストアを確認
$ORACLE_BASE/admin/<SID>/wallet/tde
内にewallet.p12
というキーストアが作成される
⑥PDBにログイン
SQL> alter session set container = FREEPDB1 ;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
FREEPDB1
⑦CDBのキーストアをオープンして、PDBのマスター暗号鍵を作成PDBにログイン
-
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY “<パスワード>” WITH BACKUP
を実行 -
ADMINISTER KEY MANAGEMENT SET KEY USING TAG 'TDE KEY' IDENTIFIED BY “<パスワード>” WITH BACKUP
を実行
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "WelCome123#123#";
keystore altered.
SQL> ADMINISTER KEY MANAGEMENT SET KEY USING TAG 'TDE KEY' IDENTIFIED BY "WelCome123#123#" WITH BACKUP;
keystore altered.
⑧自動ログイン・キーストアの作成
(※この設定をしないとデータベース起動時に毎回キーストアを手動でOPENしなければならない)
SQL> ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY "WelCome123#123#";
keystore altered.
※作成が完了すると、$ORACLE_BASE/admin/<SID>/wallet/tdeにcwallet.sso
という自動ログイン・キーストアが作成される
以上で、暗号化できました。実際にデータファイルをstringsコマンドで叩いてみると暗号化されているのが確認できます。
ありがとうございました。