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

はじめに

このガイドは、Oracle Transparent Data Encryption (TDE) を DuoKey と統合するための Cockpit v2 クイックスタートです。最後まで進めると、Oracle は TDE マスターキーの外部 HSM キーストア として DuoKey を使用するようになり、マスターキーがデータベースホスト上に存在することはなくなります。

Cockpit v2

この統合では、単一の 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 のパッチ

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 アプリを作成する​

  1. DuoKey Cockpit v2 の URL にサインインします。
  2. このデータベース用の Oracle TDE アプリを作成(または有効化)します。アプリは初期のアクティブなマスターキー (AES-256) をプロビジョニングし、access_guid を発行します。
  3. アプリを開き、デプロイバンドルをダウンロード します。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;
PIN は補助的なもの

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 です。

マルチテナント (CDB / PDB)

最初にルートにキーを設定し、次に各 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: HSM
  • STATUS: 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) を返します。

次のステップ​

トラブルシューティング​

ライブラリのロードに失敗する (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)に書き込まれます。

サポート​