メインコンテンツまでスキップ

キー管理

このガイドでは、キーローテーション、移行シナリオ、キーライフサイクル管理を含む、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 の制限

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: HSM
  • STATUS: 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 ライブラリ

リストア手順​

  1. ウォレットファイルをコピーする (同じ 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/
  1. PKCS#11 構成をインストールする:
# Copy pkcs11.toml
scp /etc/duokey/pkcs11.toml target_server:/etc/duokey/
  1. ターゲットデータベースを構成する:
-- Set TDE configuration
ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=HSM|FILE'
SCOPE=BOTH;
  1. データベースをリストアする:
# RMAN restore
rman target /

RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN;
  1. ウォレットのステータスを確認する:
-- Check wallet is open
SELECT * FROM V$ENCRYPTION_WALLET;

プラガブルデータベースのクローン作成​

DuoKey KMS に保存された TDE 暗号化キーを使用して、プラガブルデータベース (PDB) をクローンできます。

前提条件​

  • DuoKey KMS と統合されたソースおよびターゲットデータベース
  • 両方のデータベースが同じ DuoKey グループ内のアプリケーションを使用している
  • 両方のデータベースからアクセス可能なマスターキー

ソース PDB からのホットクローン​

ソースデータベースで​

  1. ホットクローンを作成する:
-- 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>";
  1. ウォレットのステータスを確認する:
-- Check wallet status for all PDBs
SELECT con_id, wrl_type, status, wallet_type
FROM v$encryption_wallet;
  1. 暗号化されたデータを確認する:
-- 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;
  1. クローンされた PDB をアンプラグする:
-- Connect as SYSDBA
conn / as sysdba

-- Unplug the cloned PDB
ALTER PLUGGABLE DATABASE PDB2_CLONE UNPLUG INTO
'/u01/app/oracle/pdb2_clone.pdb';

ターゲットデータベースで​

  1. 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) にマスターキーが設定されている
  1. 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>";
  1. 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>";
  1. データアクセスを確認する:
-- 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 バージョンを維持する

サポート​

キー管理操作に関するサポートについて: