ベストプラクティス
このガイドでは、本番環境で Oracle TDE を DuoKey KMS とともに実装および運用するためのベストプラクティスと推奨事項を説明します。
セキュリティのベストプラクティス
職務分掌
セキュリティを強化するために、データベース管理者とセキュリティ管理者の間で職務分掌を実装します。
データベース管理者 (DBA):
- データベース操作を管理する
- データベースオブジェクトを作成および変更する
- バックアップとリストアを実行する
- データベースパフォーマンスをモニタリングする
セキュリティ管理者:
- DuoKey KMS で暗号化キーを管理する
- キー管理操作へのアクセスを制御する
- キー操作の監査ログをモニタリングする
- キーローテーションポリシーを適用する
実装:
-- Grant SYSKM privilege to security administrators
GRANT SYSKM TO security_admin IDENTIFIED BY password;
-- Security admin connects as SYSKM
sqlplus security_admin/password AS SYSKM
-- Perform key management operations
ADMINISTER KEY MANAGEMENT SET KEY
IDENTIFIED BY "<DKE_APP_PASSWORD>"
CONTAINER = ALL;
セキュアな構成管理
DuoKey KMS の認証情報を含む PKCS#11 構成ファイルを保護します。
# Strict permissions on pkcs11.toml
chmod 600 /etc/duokey/pkcs11.toml
chown oracle:oinstall /etc/duokey/pkcs11.toml
# Verify permissions
ls -la /etc/duokey/pkcs11.toml
# Expected: -rw------- oracle oinstall
以下には決して認証情報を保存しないでください。
- バージョン管理システム
- 暗号化されていないバックアップ
- 共有ネットワークの場所
- メールまたはドキュメント
キーローテーションのスケジュール
定期的なキーローテーションのスケジュールを確立し、維持します。
推奨頻度:
| 環境 | ローテーション頻度 | コンプライアンス要因 |
|---|---|---|
| 本番 | 6~12 か月 | PCI DSS、SOC 2 |
| 高セキュリティ | 3~6 か月 | HIPAA、FedRAMP |
| 開発 | 毎年 | 社内ポリシー |
| テスト | 必要に応じて | N/A |
自動化の例:
#!/bin/bash
# rotate_tde_keys.sh
# Set variables
ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
ORACLE_SID=PRODDB
DKE_APP_PASSWORD="your-app-password"
# Connect and rotate key
$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
ADMINISTER KEY MANAGEMENT SET KEY
FORCE KEYSTORE
IDENTIFIED BY "${DKE_APP_PASSWORD}"
CONTAINER = ALL;
EXIT;
EOF
# Verify rotation
$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
SELECT key_id, creation_time
FROM v\$encryption_keys
ORDER BY creation_time DESC
FETCH FIRST 1 ROWS ONLY;
EXIT;
EOF
監査ログ
包括的な監査ログを有効にします。
DuoKey KMS 監査:
- DuoKey Cockpit ですべてのキー操作をモニタリングする
- 監査ログを SIEM システムにエクスポートする
- 疑わしいアクティビティに対するアラートを設定する
- コンプライアンス要件に従ってログを保持する
Oracle Database 監査:
-- Enable unified auditing for TDE operations
CREATE AUDIT POLICY tde_audit_policy
ACTIONS
ADMINISTER KEY MANAGEMENT;
AUDIT POLICY tde_audit_policy;
-- Query TDE-related audit records
SELECT event_timestamp, dbusername, action_name, return_code
FROM unified_audit_trail
WHERE action_name LIKE '%KEY MANAGEMENT%'
ORDER BY event_timestamp DESC;
ネットワークセキュリティ
Oracle Database と DuoKey KMS の間の通信を保護します。
TLS 構成:
プロバイダーは常に HTTPS で DuoKey KMS に接続します。エンドポイントを pkcs11.toml の [http_config] ブロックに設定し、証明書の検証を有効なままにしてください。
# In pkcs11.toml
[http_config]
server_url = "https://duokey-instance.com"
access_token = "<access_guid>"
verify_tls = true
ファイアウォールルール:
# Allow outbound HTTPS to DuoKey KMS
iptables -A OUTPUT -p tcp --dport 443 \
-d duokey-instance.com -j ACCEPT
# Block other outbound traffic (if applicable)
iptables -A OUTPUT -p tcp --dport 443 -j DROP
ネットワークセグメンテーション:
- データベースサーバーをセキュアな VLAN に配置する
- DuoKey KMS エンドポイントへのアクセスを制限する
- VPN またはプライベートネットワーク接続を使用する
- ネットワークモニタリングを実装する
パフォーマンスのベストプラクティス
適切な暗号化タイプを選択する
ユースケースに基づいて適切な暗号化タイプを選択します。
表領域暗号化 (推奨)
使用するタイミング:
- ほとんどのシナリオ
- データベース全体の暗号化が必要
- 頻繁な更新を伴う OLTP ワークロード
- 列暗号化よりも優れたパフォーマンス
例:
-- Create encrypted tablespace
CREATE TABLESPACE sensitive_data_ts
DATAFILE '/u01/app/oracle/oradata/ORCL/sensitive_ts01.dbf'
SIZE 1G AUTOEXTEND ON
ENCRYPTION USING 'AES256'
DEFAULT STORAGE(ENCRYPT);
-- Move existing table to encrypted tablespace
ALTER TABLE hr.employees MOVE TABLESPACE sensitive_data_ts;
パフォーマンスへの影響: 2~5% のオーバーヘッド
列暗号化
使用するタイミング:
- 少数の特定の列に機密データが含まれている
- 列が事前に特定されている
- 最小限のストレージオーバーヘッドが必要
例:
-- Encrypt specific columns
CREATE TABLE employees (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
ssn VARCHAR2(11) ENCRYPT USING 'AES256' NO SALT,
salary NUMBER(10,2) ENCRYPT USING 'AES256' NO SALT
);
パフォーマンスへの影響: 暗号化された列に対して 5~15% のオーバーヘッド
インデックスの使用を有効にするため、WHERE 句や JOIN で使用される列には NO SALT を使用します。SALT は追加のセキュリティを提供しますが、インデックス範囲スキャンを妨げます。
ハードウェアアクセラレーション
パフォーマンス向上のためにハードウェアアクセラレーションを活用します。
# Verify AES-NI support
grep -m 1 -o aes /proc/cpuinfo
# Expected output: aes
# Check if Oracle is using AES-NI
# In Oracle 12.2+, AES-NI is automatically used if available
パフォーマンス上のメリット:
- 暗号化/復号化が 50~70% 高速化
- CPU 使用率の低減
- スケーラビリティの向上
バッファキャッシュの最適化
頻繁にアクセスされる暗号化テーブルの場合:
-- Enable KEEP buffer pool for frequently accessed encrypted tables
ALTER SYSTEM SET DB_KEEP_CACHE_SIZE=2G SCOPE=BOTH;
-- Assign table to KEEP pool
ALTER TABLE hr.employees STORAGE (BUFFER_POOL KEEP);
メリット:
- 暗号化データのディスク I/O を削減
- 復号化操作を最小化
- クエリパフォーマンスを向上
インデックス戦略
暗号化された列のインデックスを最適化します。
SALT を使用した列暗号化の場合:
-- Index range scans don't work with SALT
-- Use NO SALT for searchable columns
ALTER TABLE employees MODIFY (ssn ENCRYPT NO SALT);
-- Create index
CREATE INDEX idx_emp_ssn ON employees(ssn);
表領域暗号化の場合:
-- Indexes work normally
CREATE INDEX idx_emp_name ON employees(last_name, first_name);
並列操作
大規模な暗号化テーブルの並列処理を有効にします。
-- Set parallel degree for table
ALTER TABLE large_encrypted_table PARALLEL 4;
-- Use parallel hints in queries
SELECT /*+ PARALLEL(large_encrypted_table, 4) */
* FROM large_encrypted_table;
接続タイムアウトのチューニング
高レイテンシのネットワークでは、pkcs11.toml の [http_config] ブロックにある timeout_secs を大きくすることで、DuoKey KMS への各リクエストに割り当てる時間を増やせます。
# In pkcs11.toml
[http_config]
server_url = "https://duokey-instance.com"
access_token = "<access_guid>"
timeout_secs = 30
verify_tls = true
ハートビートそのものは Oracle の動作です。データベースの Gen0 バックグラウンドプロセスが外部キーストアを定期的に ping します。以下の設定は、プロバイダーとは独立して、そのハートビートに対する Oracle の許容度をチューニングするものです。
Oracle Database の設定 (12.1 以降):
-- Increase heartbeat tolerance
ALTER SYSTEM SET "_heartbeat_period_multiplier"=20 SCOPE=SPFILE;
ALTER SYSTEM SET "_heartbeat_config"=AUTOCONNECT SCOPE=SPFILE;
-- Restart required
SHUTDOWN IMMEDIATE;
STARTUP;
計算:
- デフォルトのハートビート: 3 秒
- 乗数: 20
- 合計許容値: 20 × 3 + 3 = 63 秒
Oracle 11g R2 の場合:
-- Set event for heartbeat tolerance
ALTER SYSTEM SET EVENT=
'28420 trace name context forever, level 10:
28421 trace name context forever, level 3'
COMMENT='HSM heartbeat timeout and reconnect'
SCOPE=SPFILE;
-- Restart required
SHUTDOWN IMMEDIATE;
STARTUP;
運用のベストプラクティス
ドキュメント
包括的なドキュメントを維持します。
構成ドキュメント:
- DuoKey KMS のエンドポイントと認証情報の場所
- PKCS#11 ライブラリのバージョンと場所
- データベースウォレットの構成
- キーローテーションのスケジュール
- バックアップおよびリカバリ手順
ランブックの例:
# Oracle TDE with DuoKey KMS Runbook
## Configuration
- DuoKey KMS: https://duokey-prod.company.com
- PKCS#11 Version: 4.34.2503
- PKCS#11 Config: /etc/duokey/pkcs11.toml
- Wallet Location: $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde
## Key Rotation Procedure
1. Verify DuoKey KMS connectivity
2. Execute key rotation SQL
3. Verify in DuoKey audit logs
4. Schedule database restart
5. Document rotation in CMDB
## Emergency Contacts
テストと検証
定期的なテスト手順を確立します。
本番前テスト:
#!/bin/bash
# test_tde_operations.sh
echo "Testing TDE Operations..."
# Test 1: Connectivity
echo "1. Testing DuoKey KMS connectivity..."
curl -v https://duokey-instance.com
# Test 2: Wallet status
echo "2. Checking wallet status..."
sqlplus -s / as sysdba <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT status FROM v\$encryption_wallet;
EXIT;
EOF
# Test 3: Create test encrypted table
echo "3. Testing encryption operations..."
sqlplus -s / as sysdba <<EOF
CREATE TABLESPACE test_tde_ts
DATAFILE '/tmp/test_tde.dbf' SIZE 10M
ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
DROP TABLESPACE test_tde_ts INCLUDING CONTENTS AND DATAFILES;
EXIT;
EOF
echo "TDE testing complete."
検証チェックリスト:
- 再起動時にウォレットが自動的に開く
- 暗号化されたデータにアクセスできる
- キーローテーションが成功する
- バックアップとリストアが正しく動作する
- パフォーマンスが要件を満たす
- 監査ログが生成される
モニタリング
包括的なモニタリングを実装します。
モニタリングすべき主要メトリクス:
-- Wallet status
SELECT wrl_type, status, wallet_type
FROM v$encryption_wallet;
-- Encrypted tablespaces
SELECT tablespace_name, encrypted, bytes/1024/1024 as mb
FROM dba_tablespaces
WHERE encrypted = 'YES';
-- Encrypted columns
SELECT owner, table_name, COUNT(*) as encrypted_columns
FROM dba_encrypted_columns
GROUP BY owner, table_name;
-- Key usage
SELECT key_id, activation_time,
ROUND((SYSDATE - activation_time)) as days_active
FROM v$encryption_keys
ORDER BY activation_time DESC;
PKCS#11 ログのモニタリング:
# Monitor for errors
tail -f /var/log/dke-pkcs11/*.log | grep -i error
# Monitor for connection issues
tail -f /var/log/dke-pkcs11/*.log | grep -i "connection\|timeout"
アラートルール:
- 再起動後にウォレットが開かない
- DuoKey KMS への接続失敗
- キーローテーションの失敗
- ハートビートのタイムアウト
- PKCS#11 ライブラリのエラー
バックアップ戦略
包括的なバックアップ戦略を実装します。
バックアップ対象:
- データベース (RMAN):
# Encrypted tablespaces are backed up encrypted
rman target / <<EOF
BACKUP DATABASE PLUS ARCHIVELOG;
DELETE NOPROMPT OBSOLETE;
EXIT;
EOF
- ウォレットファイル:
# Backup wallet directory
tar -czf wallet_backup_$(date +%Y%m%d).tar.gz \
$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
# Store in secure location
scp wallet_backup_*.tar.gz backup_server:/secure/backups/
- PKCS#11 構成:
# Backup configuration
cp /etc/duokey/pkcs11.toml \
/secure/backups/pkcs11.toml.$(date +%Y%m%d)
- ドキュメント:
- DuoKey アプリの認証情報 (セキュアなボールト内)
- 構成ドキュメント
- ランブックと手順
バックアップ頻度:
- データベース: 毎日 (または RPO 要件に応じて)
- ウォレットファイル: 変更のたびに
- PKCS#11 構成: 変更のたびに
- ドキュメント: 更新のたびに
リストアのテスト:
# Quarterly restore test procedure
1. Restore database to test environment
2. Copy wallet files
3. Configure PKCS#11 connection
4. Open database and verify data access
5. Document results
災害復旧
災害復旧シナリオに備えて計画します。
シナリオ 1: データベースサーバーの障害
復旧手順:
- 新しいデータベースサーバーをプロビジョニングする
- Oracle Database ソフトウェアをインストールする
- DuoKey PKCS#11 ライブラリをインストールする
- バックアップからウォレットファイルをコピーする
- バックアップから pkcs11.toml をコピーする
- RMAN バックアップからデータベースをリストアする
- ウォレットが開き、データにアクセスできることを確認する
シナリオ 2: DuoKey KMS が利用できない
緩和策:
- 自動ログインウォレットを使用する (データベースの起動を可能にする)
- 再接続について PKCS#11 ログをモニタリングする
- DuoKey サポートに問い合わせる
- HA のためにセカンダリ DuoKey インスタンスを検討する
RTO/RPO の目標:
- RTO (目標復旧時間): 4 時間
- RPO (目標復旧時点): 15 分 (アーカイブログ転送)
高可用性のベストプラクティス
Oracle RAC 構成
Oracle RAC 環境の場合:
インストール:
# Install PKCS#11 library on all nodes
for node in node1 node2 node3; do
ssh $node "mkdir -p /opt/oracle/extapi/64/hsm/DuoKey/1.0"
scp libdke_pkcs11.so $node:/opt/oracle/extapi/64/hsm/DuoKey/1.0/
done
# Distribute wallet files
for node in node2 node3; do
scp $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/* \
$node:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
done
# Distribute PKCS#11 configuration
for node in node1 node2 node3; do
scp /etc/duokey/pkcs11.toml $node:/etc/duokey/
done
構成:
-- Set parameters for all instances
ALTER SYSTEM SET WALLET_ROOT='$ORACLE_BASE/admin/$ORACLE_SID/wallet'
SCOPE=SPFILE SID='*';
ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=HSM|FILE'
SCOPE=BOTH SID='*';
ベストプラクティス:
- ウォレットファイルに共有ストレージを使用する (可能な場合)
- ノード間でウォレットファイルを同期する
- すべてのノードを個別にモニタリングする
- フェイルオーバーシナリオをテストする
Data Guard 構成
Data Guard 環境の場合:
スタンバイデータベースのセットアップ:
# Copy configuration from primary
scp primary:/etc/duokey/pkcs11.toml standby:/etc/duokey/
scp primary:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/* \
standby:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
検証:
-- On standby database
SELECT * FROM V$ENCRYPTION_WALLET;
-- Expected: HSM wallet open with auto-login
フェイルオーバーのテスト:
-- 1. Switchover primary to standby
DGMGRL> SWITCHOVER TO standby_db;
-- 2. Verify wallet opens automatically
SELECT * FROM V$ENCRYPTION_WALLET;
-- 3. Verify encrypted data accessible
SELECT * FROM encrypted_table FETCH FIRST 1 ROWS ONLY;
コンプライアンスのベストプラクティス
PCI DSS コンプライアンス
Payment Card Industry コンプライアンスの場合:
要件:
- カード会員データを保存時に暗号化する
- 暗号化キーを毎年ローテーションする
- キーへのアクセスを制限する
- 監査証跡を維持する
- 暗号化を定期的にテストする
実装:
-- Encrypt credit card data
CREATE TABLE payments (
payment_id NUMBER PRIMARY KEY,
card_number VARCHAR2(19) ENCRYPT USING 'AES256' NO SALT,
cvv VARCHAR2(4) ENCRYPT USING 'AES256',
expiry_date VARCHAR2(5) ENCRYPT USING 'AES256'
) TABLESPACE secure_payments_ts;
HIPAA コンプライアンス
保護対象保健情報の場合:
要件:
- ePHI を保存時に暗号化する
- アクセス制御と監査証跡
- ビジネスアソシエイト契約
- 定期的なリスク評価
実装:
-- Encrypt patient data
CREATE TABLE patient_records (
patient_id NUMBER PRIMARY KEY,
ssn VARCHAR2(11) ENCRYPT USING 'AES256' NO SALT,
medical_history CLOB ENCRYPT USING 'AES256',
diagnosis VARCHAR2(500) ENCRYPT USING 'AES256'
) TABLESPACE phi_tablespace;
GDPR コンプライアンス
EU のデータ保護の場合:
要件:
- 個人データを暗号化する
- データの最小化
- 消去の権利 (暗号消去)
- 侵害の通知
暗号消去:
-- Create separate key per tenant/user
-- Deletion = key destruction in DuoKey KMS
-- Example: Tenant-specific encryption
CREATE TABLESPACE tenant_123_ts
ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
-- To "delete" data: rotate/destroy the key
-- Data becomes permanently unreadable
トラブルシューティングのベストプラクティス
一般的な問題と解決策
問題 1: 再起動後にウォレットが開かない
-- Check wallet status
SELECT * FROM V$ENCRYPTION_WALLET;
-- If closed, open manually
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "<DKE_APP_PASSWORD>"
CONTAINER = ALL;
問題 2: DuoKey KMS への接続に失敗した
# Test connectivity
curl -v https://duokey-instance.com
# Check PKCS#11 logs
tail -100 /var/log/dke-pkcs11/*.log
# Verify configuration
cat /etc/duokey/pkcs11.toml
問題 3: パフォーマンスの低下
-- Check for full table scans on encrypted tables
SELECT * FROM v$sql_plan
WHERE operation = 'TABLE ACCESS'
AND options = 'FULL'
AND object_name IN (
SELECT table_name FROM dba_encrypted_columns
);
-- Consider adding indexes or using KEEP buffer pool
サポートへのエスカレーション
サポートに問い合わせるタイミング:
- DuoKey KMS に接続できない
- PKCS#11 ライブラリのエラー
- キーローテーションの失敗
- 予期しないウォレットのクローズ
- パフォーマンスの問題
提供すべき情報:
- Oracle のバージョンとプラットフォーム
- PKCS#11 ライブラリのバージョン
- エラーメッセージとログ
- pkcs11.toml 構成 (認証情報は編集して隠す)
- データベースアラートログの抜粋
サマリーチェックリスト
初期実装
- グループとアプリケーションで DuoKey KMS を構成した
- PKCS#11 ライブラリをインストールおよび構成した
- DuoKey KMS で TDE マスターキーを作成した
- 自動ログインウォレットを構成した
- テスト暗号化が正しく動作している
セキュリティ
- 職務分掌を実装した
- PKCS#11 構成を保護した (chmod 600)
- 監査ログを有効にしてモニタリングしている
- キーローテーションのスケジュールを定義した
- ネットワークセキュリティを構成した
パフォーマンス
- 表領域暗号化を選択した (適切な場合)
- ハードウェアアクセラレーションを有効にした
- 暗号化された列のインデックスを最適化した
- バッファキャッシュを適切に構成した
- パフォーマンスをテストおよび検証した
運用
- ドキュメントを完成させた
- ランブックを作成した
- モニタリングを構成した
- バックアップ戦略を実装した
- 災害復旧計画を文書化した
コンプライアンス
- 規制要件を特定した
- 暗号化の範囲を定義した
- 監査証跡を構成した
- コンプライアンス検証を実施した
- 年次レビューをスケジュールした
追加リソース
サポート
Oracle TDE のベストプラクティスに関するサポートについて:
- メール: [email protected]
- ドキュメント: DuoKey サポート
- プロフェッショナルサービス: [email protected]