はじめに
このガイドは、Oracle Transparent Data Encryption (TDE) を DuoKey と統合するための Cockpit v2 クイックスタートです。最後まで進めると、Oracle は TDE マスターキーの外部 HSM キーストア として DuoKey を使用するようになり、マスターキーがデータベースホスト上に存在することはなくなります。
この統合では、単一の access_guid ベアラートークン、pkcs11.toml 構成ファイル、および libdke_pkcs11.so プロバイダーを使用します。
概念モデルについては インストールガイド を参照してください。構成の正式なリファレンスは PKCS#11 プロバイダー構成 (pkcs11.toml) です。
全体の仕組み
Oracle は、バルクなテーブルおよび表領域の暗号化を引き続き自身で、ハードウェア (AES-NI) を用いて実行します。DuoKey が関与するのは マスターキーのパス のみです。すなわち、キーストアのオープン、SET KEY、およびマスター暗号化キー (MEK) による表領域キーのラップ/アンラップです。
┌─────────────────────────────────────┐
│ Oracle Database Server │
│ │
│ Oracle TDE │
│ (bulk AES table/tablespace │
│ crypto stays local, AES-NI) │
│ │ PKCS#11 (master-key path) │
│ ▼ │
│ DuoKey PKCS#11 provider │
│ libdke_pkcs11.so / dke_pkcs11.dll │
│ │ HTTPS (one call per op) │
└────────┼────────────────────────────┘
▼
DuoKey Cockpit (v2 proxy endpoint)
│
▼
Tenant vault / HSM
(Securosys HSM in production)
前提条件
Oracle Database
- Oracle Database 11g R2、12c、18c、19c、21c、または 23ai
- Oracle Advanced Security オプションのライセンス
SYSDBAおよびADMINISTER KEY MANAGEMENTシステム権限を持つ DBA アクセス
Oracle 11g R2 では、パッチ 18948524 が適用されていることを確認してください。
DuoKey
- DuoKey Cockpit v2 Web インターフェイスへのアクセス
- DuoKey から提供される DuoKey PKCS#11 プロバイダーライブラリ
- データベースサーバーから Cockpit ホストへの HTTPS(ポート 443) によるネットワーク接続
プロバイダーは Oracle Linux 8 / glibc 2.28 向けにビルドされている必要があります。新しい glibc に対してコンパイルされたライブラリはロードに失敗し、Oracle は追加のログを出さずに ORA-28353 を報告します。ご使用のプラットフォーム向けに DuoKey が提供するビルドを使用してください。
システム
- Linux サーバー(Oracle Linux 8 を推奨)
- root または sudo アクセス、および Oracle インスタンスの所有者アカウント (
oracle)
ステップ 1: Cockpit で Oracle TDE アプリを作成する
- DuoKey Cockpit v2 の URL にサインインします。
- このデータベース用の Oracle TDE アプリを作成(または有効化)します。アプリは初期のアクティブなマスターキー (AES-256) をプロビジョニングし、
access_guidを発行します。 - アプリを開き、デプロイバンドルをダウンロード します。Cockpit は、このデータベースに必要なすべてを生成します。
pkcs11.tomlファイル(正しいserver_urlとaccess_guidを含む)- 環境変数のエクスポート(
DKE_PKCS11_CONFを含む) - Oracle SQL スクリプト
Cockpit v2 は、server_url のパスに埋め込まれた 単一の access_guid ベアラートークン を使用します。OAuth2、クライアント ID/シークレット、ユーザー名/パスワード、テナントヘッダーはいずれも使用されず、テナントはサーバー側で解決されます。バンドルは機密情報として扱い、決してバージョン管理にコミットしないでください。
ステップ 2: 接続性を確認する
データベースサーバーから、Cockpit ホストに HTTPS で到達できることを確認します。
curl -v https://<cockpit-host>
アプリのプロキシ URL に対する GET は、レディネスプローブとして機能します。接続に失敗する場合は、ポート 443 が開いていること、DNS が解決されること、TLS 証明書が信頼されていること(オンプレミスの Cockpit の場合は、その CA を OS のトラストストアに追加してください)を確認してください。
ステップ 3: DuoKey PKCS#11 プロバイダーをインストールする
ライブラリを 変更せずに Oracle の PKCS#11 ベンダーディレクトリに配置します。Oracle は、ベンダー/バージョンディレクトリ内で最初に見つかった共有オブジェクトを 任意の ファイル名でロードします。libpkcs11.so にリネームしないでください。
# Standard Oracle Database location
sudo mkdir -p /opt/oracle/extapi/64/hsm/DuoKey/1.0
sudo cp libdke_pkcs11.so /opt/oracle/extapi/64/hsm/DuoKey/1.0/
# Set ownership for the Oracle user
sudo chown -R oracle:oinstall /opt/oracle/extapi/64/hsm/DuoKey
sudo chmod -R 755 /opt/oracle/extapi/64/hsm/DuoKey
Windows では、成果物は dke_pkcs11.dll です。Oracle Key Vault では、ベンダーパスは代わりに /usr/local/okv/hsm/generic/ になります。
Oracle は、名前にかかわらず /opt/oracle/extapi/64/hsm/DuoKey/1.0/ 内の最初の .so をロードします。正しいプロバイダーがロードされるよう、そのディレクトリには DuoKey ライブラリのみを配置してください。
ステップ 4: 構成ファイルを配置する
デプロイバンドルの pkcs11.toml を保護された場所にコピーし、DKE_PKCS11_CONF 環境変数(Oracle ユーザーのプロファイルに設定)でプロバイダーにそのパスを指定します。ファイルへのアクセスを Oracle ユーザーに制限してください。
sudo chown oracle:oinstall /etc/dke/pkcs11.toml
sudo chmod 600 /etc/dke/pkcs11.toml
export DKE_PKCS11_CONF=/etc/dke/pkcs11.toml
バンドルの pkcs11.toml には、[http_config] の server_url(app_id と access_guid を含む)、access_token、timeout_secs、verify_tls、および [pkcs11] の slot_id、logging_level、logging_folder がすでに含まれています。個々のフィールドは、ホストごとに DKE_PKCS11_* 環境変数で上書きできます。完全なスキーマについては PKCS#11 プロバイダー構成 (pkcs11.toml) を参照してください。
ステップ 5: HSM ベースの TDE 向けに Oracle を構成する
SYSDBA として接続し、デプロイバンドルの SQL を実行します。キーストアタイプは HSM です。
5.1 ウォレットルートと TDE 構成を設定する
ALTER SYSTEM SET WALLET_ROOT='<oracle-base>/admin/<sid>/wallet' SCOPE=SPFILE;
-- Restart to apply WALLET_ROOT
SHUTDOWN IMMEDIATE;
STARTUP;
ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=HSM' SCOPE=BOTH;
5.2 HSM キーストアを開く
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "<pin>"
CONTAINER = ALL;
DuoKey プロバイダーでは、実際の認証情報は pkcs11.toml 内の access_guid であり、IDENTIFIED BY の値は補助的なものです。認証情報を外部ストアに保管している場合は、IDENTIFIED BY EXTERNAL STORE でキーストアを開くこともできます。
5.3 TDE マスターキーを設定する
ADMINISTER KEY MANAGEMENT SET KEY
IDENTIFIED BY "<pin>"
WITH BACKUP
CONTAINER = ALL;
マスターキーは AES-256 です。
最初にルートにキーを設定し、次に各 PDB をそれぞれのセッションでキー設定します。CONTAINER=ALL による再キー設定中に OPEN READ WRITE になっていない PDB があると、ORA-46664 が発生します。
ALTER SESSION SET CONTAINER = <pdb_name>;
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<pin>" WITH BACKUP;
ステップ 6: 検証する
SELECT wrl_type, status, wallet_type FROM V$ENCRYPTION_WALLET;
期待される結果:
WRL_TYPE: HSMSTATUS: OPEN
暗号化された表領域を作成して、エンドツーエンドで確認します。
CREATE TABLESPACE encrypted_ts
DATAFILE '<oradata-path>/encrypted_ts01.dbf' SIZE 128M
ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
続いて、このアプリの Cockpit 監査ログにキー操作が表示されることを確認してください。
キーローテーション
マスターキーは Cockpit からローテーションします。ローテーションでは新しいキーがアクティブになり、以前のキーは 無効化されますが保持されます。これにより、古い MEK でラップされた表領域キーは引き続き復号可能です。Cockpit は Oracle のローテーション SQL (ADMINISTER KEY MANAGEMENT SET KEY … WITH BACKUP) を返します。
次のステップ
- キー管理 — ローテーション、移行、RAC と Data Guard、バックアップとリカバリ。
- ベストプラクティス — セキュリティ、パフォーマンス、運用に関する推奨事項。
- Oracle TDE 統合 (Cockpit v2) — Cryptoki 操作と MEK ライフサイクルの詳細。
トラブルシューティング
ライブラリのロードに失敗する (ORA-28353、ログなし) — ライブラリが新しい glibc に対してビルドされています。DuoKey の Oracle Linux 8 / glibc 2.28 ビルドを使用してください。
ORA-28365: wallet is not open — キーストアを再度開きます。
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "<pin>" CONTAINER = ALL;
マルチテナントの再キー設定時の ORA-46664 — 対象の PDB が OPEN READ WRITE になっていませんでした。PDB を開く(または個別にキー設定する)か、再試行してください。
接続性 — <cockpit-host> へのポート 443、pkcs11.toml 内の server_url、および(オンプレミスの場合)CA の信頼を確認してください。プロバイダーのログは logging_folder(デフォルトは /var/log/dke-pkcs11)に書き込まれます。
サポート
- メール: [email protected]
- ドキュメント: DuoKey サポート
- ステータス: status.duokey.com