キー管理
このガイドでは、キーローテーション、移行シナリオ、キーライフサイクル管理を含む、Oracle TDE を DuoKey KMS とともに使用する際のマスターキー操作について説明します。
キーローテーション
定期的なキーローテーションは、重要なセキュリティのベストプラクティスです。DuoKey KMS を使用すると、TDE マスター暗号化キーのローテーションが簡単になります。
キーをローテーションする理由
- セキュリティコンプライアンス: 規制要件を満たす (通常は 6~12 か月)
- 露出の制限: キーが侵害された場合のリスクを軽減する
- ベストプラクティス: 暗号鍵管理の業界標準
ローテーション頻度
推奨スケジュール:
- 本番データベース: 6~12 か月ごと
- 高セキュリティ環境: 3~6 か月ごと
- コンプライアンス要件: 規制で義務付けられているとおり
マスターキーのローテーション
自動ログインウォレットなし
コンテナデータベース (CDB) の場合:
-- Rotate master key for all containers
ADMINISTER KEY MANAGEMENT SET KEY
IDENTIFIED BY "<DKE_APP_PASSWORD>"
CONTAINER = ALL;
非コンテナデータベースの場合:
-- Rotate master key
ADMINISTER KEY MANAGEMENT SET KEY
IDENTIFIED BY "<DKE_APP_PASSWORD>";
自動ログインウォレットあり
コンテナデータベース (CDB) の場合:
-- Rotate master key with auto-login
ADMINISTER KEY MANAGEMENT SET KEY
FORCE KEYSTORE
IDENTIFIED BY "<DKE_APP_PASSWORD>"
CONTAINER = ALL;
一部のデータベースバージョンでは、各プラガブルデータベース (PDB) 内で個別にキーをローテーションする必要がある場合があります。
非コンテナデータベースの場合:
-- Rotate master key with auto-login
ADMINISTER KEY MANAGEMENT SET KEY
FORCE KEYSTORE
IDENTIFIED BY "<DKE_APP_PASSWORD>";
キーローテーションの確認
-- Check master key history
SELECT key_id, creation_time, activation_time
FROM v$encryption_keys
ORDER BY creation_time DESC;
-- Verify current key
SELECT * FROM v$encryption_wallet;
ローテーション後の考慮事項
キーローテーション後、古いマスターキーは、ハートビート操作のためにデータベースの Gen0 プロセスによってアクセスされる場合があります。新しいキーは、次のデータベース再起動後に使用されます。
新しいキーを使用するためにデータベースを再起動します。
SHUTDOWN IMMEDIATE;
STARTUP;
ローカルウォレットから DuoKey KMS への移行
ローカルウォレットを使用する既存の TDE データベースがある場合は、DuoKey KMS に移行できます。
前提条件
- TDE が構成された既存の Oracle Database
- ローカル TDE ウォレット (ewallet.p12)
- はじめにガイドに従って構成された DuoKey KMS
- インストールおよび構成された PKCS#11 ライブラリ
移行手順
ステップ 1: 現在のウォレットをバックアップする
# Backup existing wallet
cp $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/ewallet.p12 \
$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/ewallet.p12.backup
ステップ 2: 自動ログインウォレットを移動する (存在する場合)
# Rename auto-login wallet
cd $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde
mv cwallet.sso cwallet.sso_backup
ステップ 3: ローカルウォレットのパスワードを変更する
ローカルウォレットのパスワードを DuoKey アプリのパスワードと一致するように変更します。
-- Change wallet password
ADMINISTER KEY MANAGEMENT ALTER KEYSTORE PASSWORD
IDENTIFIED BY "<old_wallet_password>"
SET "<DKE_APP_PASSWORD>"
WITH BACKUP;
Oracle 11g R2 の場合:
# Use orapki utility
orapki wallet change_pwd \
-wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde \
-oldpwd old_password \
-newpwd DKE_APP_PASSWORD
ステップ 4: ウォレットメソッドを構成する
Oracle 18c 以前の場合:
-- Set wallet method to both FILE and HSM
ALTER SYSTEM SET ENCRYPTION_WALLET_LOCATION=
'(SOURCE=(METHOD=HSM)(METHOD_DATA=(DIRECTORY=<wallet_location>)))'
SCOPE=SPFILE;
-- Restart database
SHUTDOWN IMMEDIATE;
STARTUP;
Oracle 19c 以降の場合:
-- Set TDE configuration for HSM and FILE
ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=HSM|FILE'
SCOPE=BOTH;
ステップ 5: 両方のウォレットを開く
-- Open both HSM and local wallets
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "<DKE_APP_PASSWORD>";
-- Verify both wallets are open
SELECT * FROM V$ENCRYPTION_WALLET;
期待される出力: FILE と HSM の両方がステータス OPEN を表示するはずです。
ステップ 6: キーを DuoKey KMS に移行する
-- Migrate master key from local wallet to DuoKey KMS
ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY
IDENTIFIED BY "<DKE_APP_PASSWORD>"
MIGRATE USING "<DKE_APP_PASSWORD>"
WITH BACKUP USING 'LocalWalletMigration';
Oracle 11g R2 の場合:
-- Migrate key
ALTER SYSTEM SET ENCRYPTION KEY
IDENTIFIED BY "<DKE_APP_PASSWORD>"
MIGRATE USING "<DKE_APP_PASSWORD>";
ステップ 7: 移行を確認する
-- Check that keys are in DuoKey KMS
SELECT key_id, creation_time, activation_time
FROM v$encryption_keys
ORDER BY creation_time DESC;
DuoKey Cockpit の監査ログでキー移行イベントを確認します。
ステップ 8: 自動ログインを構成する (オプション)
はじめにガイドの自動ログイン構成手順に従ってください。
逆移行: DuoKey KMS からローカルウォレットへ
DuoKey KMS からローカルウォレットへ逆移行する必要がある場合:
Oracle 11g R2 は逆移行をサポートしていません。逆移行は、11g R2 から 12c 以降にアップグレードする場合にのみ利用できます。
前提条件
- Oracle Database 12c 以降
- DuoKey KMS で構成された TDE
- HSM ウォレットとローカルウォレットの両方へのアクセス
逆移行の手順
ステップ 1: 自動ログインウォレットを移動する
# Backup auto-login wallet
cd $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde
mv cwallet.sso cwallet.sso_backup
ステップ 2: 両方のウォレットを開く
-- Open both HSM and local wallets manually
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "<DKE_APP_PASSWORD>"
CONTAINER=ALL;
-- Verify both are open
SELECT * FROM V$ENCRYPTION_WALLET;
ステップ 3: FILE メソッドに変更する
Oracle 18c 以前の場合:
-- Change to FILE method only
ALTER SYSTEM SET ENCRYPTION_WALLET_LOCATION=
'(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=<wallet_location>)))'
SCOPE=SPFILE;
-- Restart database
SHUTDOWN IMMEDIATE;
STARTUP;
Oracle 19c 以降の場合:
-- Change to FILE method
ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=FILE'
SCOPE=BOTH;
ステップ 4: キーを逆移行する
-- Reverse migrate from HSM to local wallet
ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY
IDENTIFIED BY "<DKE_APP_PASSWORD>"
REVERSE MIGRATE USING "<DKE_APP_PASSWORD>"
WITH BACKUP USING 'ReverseMigration';
ステップ 5: 逆移行を確認する
-- Verify wallet status
SELECT * FROM V$ENCRYPTION_WALLET;
-- Should show FILE wallet only
Oracle Data Guard の統合
Oracle Data Guard 環境の場合、以下の手順に従ってスタンバイデータベースを DuoKey KMS と統合します。
前提条件
- DuoKey KMS と統合されたプライマリデータベース
- Data Guard で構成されたスタンバイデータベース
- スタンバイサーバーにインストールされた PKCS#11 ライブラリ
統合手順
ステップ 1: ウォレットファイルをコピーする
プライマリからスタンバイにウォレットファイルをコピーします。
# On primary server
cd $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde
# Copy to standby server
scp cwallet.sso standby_server:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
scp ewallet.p12 standby_server:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
ステップ 2: スタンバイに PKCS#11 をインストールする
スタンバイサーバーで:
# Copy PKCS#11 library
sudo mkdir -p /opt/oracle/extapi/64/hsm/DuoKey/1.0
sudo cp /path/to/libdke_pkcs11.so \
/opt/oracle/extapi/64/hsm/DuoKey/1.0/libdke_pkcs11.so
# Set permissions
sudo chown -R oracle:oinstall /opt/oracle
sudo chmod -R 775 /opt/oracle
ステップ 3: PKCS#11 構成をコピーする
# Copy pkcs11.toml from primary to standby
scp /etc/duokey/pkcs11.toml \
standby_server:/etc/duokey/pkcs11.toml
# On standby, set permissions
sudo chown oracle:oinstall /etc/duokey/pkcs11.toml
sudo chmod 600 /etc/duokey/pkcs11.toml
ステップ 4: スタンバイデータベースを構成する
スタンバイデータベースで:
-- Point to both HSM and FILE
ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=HSM|FILE'
SCOPE=BOTH;
ステップ 5: 自動ログインを確認する
自動ログインウォレットは、スタンバイ上でウォレットを自動的に開くはずです。
-- Check wallet status on standby
SELECT * FROM V$ENCRYPTION_WALLET;
期待される出力:
WRL_TYPE: HSMSTATUS: OPEN (自動ログインあり)WALLET_TYPE: AUTO_LOGIN
バックアップとリカバリ
TDE バックアップの考慮事項
TDE で暗号化されたデータベースをバックアップする場合:
表領域暗号化:
- バックアップはデフォルトで暗号化されます
- RMAN バックアップは暗号化を維持します
列暗号化:
- バックアップはデフォルトでは暗号化されません
- エクスポートダンプ (expdp) 内のデータは暗号化されていません
暗号化された RMAN バックアップ
# RMAN backups of encrypted tablespaces are encrypted automatically
rman target /
RMAN> BACKUP DATABASE;
暗号化されたエクスポート (Data Pump)
列暗号化の場合、エクスポート時に暗号化を明示的に有効にします。
# Encrypted export
expdp hr DIRECTORY=dpump_dir1 \
DUMPFILE=hr_enc.dmp \
ENCRYPTION=all \
ENCRYPTION_ALGORITHM=AES256 \
ENCRYPTION_MODE=TRANSPARENT
TDE データベースのリストア
ターゲットシステムで TDE データベースをリストアするには:
前提条件
- ターゲットシステムで構成された DuoKey KMS
- 同じウォレットファイル、または同じ DuoKey アプリケーションへのアクセス
- インストールされた PKCS#11 ライブラリ
リストア手順
- ウォレットファイルをコピーする (同じ DuoKey アプリを使用しない場合):
# Copy from source to target
scp cwallet.sso target_server:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
scp ewallet.p12 target_server:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
- PKCS#11 構成をインストールする:
# Copy pkcs11.toml
scp /etc/duokey/pkcs11.toml target_server:/etc/duokey/
- ターゲットデータベースを構成する:
-- Set TDE configuration
ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=HSM|FILE'
SCOPE=BOTH;
- データベースをリストアする:
# RMAN restore
rman target /
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;
- ウォレットのステータスを確認する:
-- Check wallet is open
SELECT * FROM V$ENCRYPTION_WALLET;
プラガブルデータベースのクローン作成
DuoKey KMS に保存された TDE 暗号化キーを使用して、プラガブルデータベース (PDB) をクローンできます。
前提条件
- DuoKey KMS と統合されたソースおよびターゲットデータベース
- 両方のデータベースが同じ DuoKey グループ内のアプリケーションを使用している
- 両方のデータベースからアクセス可能なマスターキー
ソース PDB からのホットクローン
ソースデータベースで
- ホットクローンを作成する:
-- Connect as SYSDBA
sqlplus / as sysdba
-- Create hot clone of encrypted PDB
CREATE PLUGGABLE DATABASE PDB2_CLONE
FROM PDB2
FILE_NAME_CONVERT = (
'/u01/app/oracle/oradata/ORCLDB/pdb2',
'/u01/app/oracle/oradata/ORCLDB/pdb2_clone'
)
KEYSTORE IDENTIFIED BY "<DKE_APP_PASSWORD>";
- ウォレットのステータスを確認する:
-- Check wallet status for all PDBs
SELECT con_id, wrl_type, status, wallet_type
FROM v$encryption_wallet;
- 暗号化されたデータを確認する:
-- Switch to source PDB
ALTER SESSION SET CONTAINER=PDB2;
-- Check encrypted columns
SELECT * FROM dba_encrypted_columns;
-- Verify data is accessible
SELECT * FROM schema.encrypted_table;
- クローンされた PDB をアンプラグする:
-- Connect as SYSDBA
conn / as sysdba
-- Unplug the cloned PDB
ALTER PLUGGABLE DATABASE PDB2_CLONE UNPLUG INTO
'/u01/app/oracle/pdb2_clone.pdb';
ターゲットデータベースで
- PDB ファイルをコピーする:
# Copy .pdb file to target server
scp /u01/app/oracle/pdb2_clone.pdb \
target_server:/u01/app/oracle/oradata/ORCLDB/
ターゲットデータベースは以下を満たす必要があります。
- 暗号化され、DuoKey KMS と統合されている
- ソース PDB のキーを持つ同じ DuoKey グループへのアクセス権がある
- ルートコンテナ (CDB) にマスターキーが設定されている
- PDB をプラグインする:
-- Connect to target database as SYSDBA
sqlplus / as sysdba
-- Create PDB from .pdb file
CREATE PLUGGABLE DATABASE PDB2 USING
'/u01/app/oracle/oradata/ORCLDB/pdb2_clone.pdb'
COPY FILE_NAME_CONVERT=(
'/u01/app/oracle/oradata/ORCLDB/pdb2_clone',
'/u01/app/oracle/oradata/ORCLDB/pdb2'
)
KEYSTORE IDENTIFIED BY "<DKE_APP_PASSWORD>";
- PDB とウォレットを開く:
-- Switch to new PDB
ALTER SESSION SET CONTAINER=PDB2;
-- Check wallet status
SELECT * FROM V$ENCRYPTION_WALLET;
-- Open wallet if needed (external keystore; the PIN is advisory —
-- the access_guid bearer token in pkcs11.toml authenticates the request)
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "<DKE_APP_PASSWORD>";
- データアクセスを確認する:
-- Verify encrypted columns
SELECT * FROM dba_encrypted_columns;
-- Test data access
SELECT * FROM schema.encrypted_table;
PKCS#11 ライブラリのアップグレード
PKCS#11 ライブラリを定期的に更新すると、新機能とセキュリティ強化が提供されます。
PKCS#11 ライブラリのアップグレードには、データベースのダウンタイムが必要です。
アップグレード手順
ステップ 1: 新しいライブラリを入手する
DuoKey サポートから最新の DuoKey PKCS#11 ライブラリ(libdke_pkcs11.so)を入手し、データベースホストにコピーします。
ステップ 2: 現在のライブラリをバックアップする
# Backup current library
cd /opt/oracle/extapi/64/hsm/DuoKey/1.0
cp libdke_pkcs11.so libdke_pkcs11.so.backup
ステップ 3: データベースをシャットダウンする
-- Shutdown database
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
ステップ 4: ライブラリを置き換える
# Copy the new library into place (overwriting the backed-up copy)
sudo cp libdke_pkcs11.so \
/opt/oracle/extapi/64/hsm/DuoKey/1.0/libdke_pkcs11.so
# Set permissions
sudo chown -R oracle:oinstall \
/opt/oracle/extapi/64/hsm/DuoKey/1.0
sudo chmod -R 775 \
/opt/oracle/extapi/64/hsm/DuoKey/1.0
ステップ 5: データベースを起動する
-- Start database
sqlplus / as sysdba
STARTUP;
ステップ 6: 操作を確認する
# Check PKCS#11 logs
tail -f /var/log/dke-pkcs11/*.log
以下を探します。
- DuoKey KMS への接続の成功
- キーアクセス操作
ロールバック手順
アップグレード後に問題が発生した場合:
# Shutdown database
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
exit
# Restore previous version
cd /opt/oracle/extapi/64/hsm/DuoKey/1.0
mv libdke_pkcs11.so.backup libdke_pkcs11.so
# Restart database
sqlplus / as sysdba
STARTUP;
アップグレードの支援や問題については、[email protected] の DuoKey サポートにお問い合わせください。
ベストプラクティスのサマリー
キーローテーション
- 6~12 か月ごとにキーをローテーションする
- ローテーションスケジュールを文書化する
- 最初に非本番環境でローテーションをテストする
- ローテーション後にデータベースを再起動する
バックアップ戦略
- 暗号化されたデータベースの定期的な RMAN バックアップ
- ウォレットファイルを個別にバックアップする
- リストア手順をテストする
- リカバリ手順を文書化する
高可用性
- 自動ログインウォレットを使用する
- RAC/Data Guard でウォレットファイルを配布する
- DuoKey KMS の可用性をモニタリングする
- 再試行タイムアウトを適切に構成する
セキュリティ
- 職務を分離する: DBA とセキュリティ管理者
- pkcs11.toml へのアクセスを制限する
- DuoKey Cockpit で監査ログをモニタリングする
- データベースごとに一意のアプリを使用する
運用
- すべての構成を文書化する
- 非本番環境でアップグレードをテストする
- PKCS#11 ログをモニタリングする
- 最新の PKCS#11 バージョンを維持する
サポート
キー管理操作に関するサポートについて:
- メール: [email protected]
- ドキュメント: DuoKey サポート
- ステータス: status.duokey.com