Oracle Transparent Data Encryption(TDE)を Bare Metal Solution にデプロイして管理する
このページでは、Bare Metal Solution に Oracle Advanced Security Transparent Data Encryption(TDE)をデプロイし、Oracle Wallet と鍵を管理する方法について説明します。
概要
Oracle Advanced Security TDE は、Oracle Database に保管されているデータを透過的に暗号化し、データベース ファイルへの不正アクセスを防ぎます。TDE は、データベース バックアップ全体(RMAN)と Data Pump のエクスポートを暗号化します。また、特定の表領域と列を暗号化することもできます。
透過的データ暗号化の仕組み
TDE は、暗号化に使用する複数の鍵を作成し、管理します。暗号化されたデータとそれに対応する鍵があれば、データを簡単に復号し、クリアデータを表示できてしまいます。これらの鍵は厳重に保護しなければなりません。
TDE では 2 層構造のアーキテクチャが採用され、データ暗号鍵は 1 つのデータベース マスター鍵によってラップされています。このマスター鍵は、暗号化されたデータと分離されています。Oracle ソフトウェア キーストア ウォレットやハードウェア セキュリティ モジュール(HSM)キーストアなど、データベースの外部に保管され、キーストア内でデータベース セキュリティ管理者によって直接管理されます。
ユーザーの多様な環境に対応するため、TDE では 2 つのキーストア オプションが用意されています。デフォルトでは、PKCS#12 標準ベースの鍵ストレージ ファイルである Oracle ウォレットにマスター鍵が格納されます。ウォレットは、暗号化された少数のデータベース向けの簡単なソリューションです。
Bare Metal Solution サーバーで Oracle データベース 11g の TDE を有効する:
暗号化は列レベルと表領域レベルで実行できます。RMAN のバックアップに TDE を適用することもできます。
TDE の前提条件を有効にする
キーストア(11g の場合は Oracle Wallet
)を設定してデータベースを準備し、初期のマスター鍵を作成する必要があります。
Bare Metal Solution サーバーで Oracle ウォレットを構成する
プロジェクトの
jump host
またはbastion
マシンから Bare Metal Solution サーバーの 1 つに接続します。$ ssh customeradmin@192.168.1.10 $ su - oracle
環境変数を設定します。
[oracle@svr002 ~]$ . oraenv ORACLE_SID = [tdedb] ? DB11G The Oracle base has been changed from /u01/app/oracle to /apps/oracle/oracle_base [oracle@svr002 ~]$ export ORACLE_SID=DB11G1
sysdba として接続します。
[oracle@svr002 ~]$ sqlplus / as sysdba
次の環境変数がすべて適切に設定されていることを確認します。
$ echo $ORACLE_HOME $ echo $ORACLE_BASE $ echo $DB_UNIQUE_NAME
ウォレット ファイル用に新しいディレクトリを作成します。
$ mkdir -p $ORACLE_BASE/admin/DB11G/wallet
orapki ユーティリティを使用してウォレットを作成し、自動ログインを有効にします。これにより、再起動時にウォレットを有効にする必要がなくなります。
$ orapki wallet create -wallet $ORACLE_BASE/admin/DB11G/wallet -auto_login -pwd Oracle2020
Oracle では、ウォレットにデフォルトのパスを使用します。
$ ORACLE_BASE/admin/$DB_UNIQUE_NAME/wallet $ ORACLE_HOME/admin/$DB_UNIQUE_NAME/wallet
デフォルトのパスを使用しない場合は、
sqlnet.ora
ファイルに代替パスを設定する必要があります。ENCRYPTION_WALLET_LOCATION
またはWALLET_LOCATION
のいずれかのパラメータを設定する必要があります。ウォレットのパスを確認するには:
SQL> COL wrl_type FORMAT a12 COL wrl_parameter FORMAT a35 COL status FORMAT a15 SQL> select * from v$encryption_wallet; WRL_TYPE WRL_PARAMETER STATUS -------- ------------- ------- file /apps/oracle/oracle_base OPEN_NO_MASTER_KEY /admin/DB11G/wallet
sqlnet.ora
ファイルでウォレットのパスを設定するには:$ vi sqlnet.ora ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/apps/oracle/oracle_base/admin/DB11G/wallet)) Or WALLET_LOCATION = (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/apps/oracle/oracle_base/admin/DB11G/wallet))
ウォレットにユーザー名とパスワードを追加します。既存のウォレットにユーザー名とパスワードを追加するには、次のように
-createCredential
オプションを指定してmkstore
コマンドを実行します。mkstore -wrl <wallet_location> -createCredential <TNS_alias> <username> <password> $ mkstore -wrl apps/oracle/oracle_base/admin/DB11G/wallet -createCredential DB11G testuser testtest123
testuser@SID
を使用すると、パスワードを入力せずにログインできます。初期のマスター鍵を作成します。
SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY Oracle2020;
ウォレットのステータスが
OPEN
であることを確認します。SQL> COL wrl_type FORMAT a12 COL wrl_parameter FORMAT a35 COL status FORMAT a15 SQL> select * from v$encryption_wallet; WRL_TYPE WRL_PARAMETER STATUS -------- ------------- ------ file /apps/oracle/oracle_base/ OPEN admin/DB11G/wallet
ウォレットをオープンまたはクローズするには:
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "Password"; SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
表領域レベルで TDE を有効にする
暗号化操作を実行するには、CREATE TABLESPACE SQL
ステートメントを使用します。
新しい表領域の暗号化
新しい表領域を作成するときに暗号化を構成できます。
表領域暗号化の COMPATIBLE 初期化パラメータが 11.2.0.0 以降であることを確認します。
SQL> SHOW PARAMETER COMPATIBLE NAME TYPE VALUE ---- ---- ------ compatible string 11.2.0.4.0
TDE マスター暗号鍵が構成されていることを確認します。確認方法については、前提条件セクションの「初期マスター鍵を作成する」をご覧ください。
暗号化された表領域を作成する
データファイルのパスを確認するには、次のコマンドを実行します。
SQL> select * from dba_data_files ;
暗号化句を使用して CREATE TABLESPACE ステートメントを実行します。
SQL> create TABLESPACE encrypted_ts DATAFILE '+DATA/db11g/datafile/encrypted_ts01.dbf' SIZE 5 M AUTOEXTEND on NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
ENCRYPTION USING 'AES256' ENCRYPT により、暗号化アルゴリズムと暗号鍵の長さを指定します。ENCRYPT 句により、表領域を暗号化します。
USING 句を省略すると、暗号化アルゴリズムとしてデフォルトの AES128 が使用されます。また、ENCRYPT にデフォルトのストレージ句も指定する必要があります。また、TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM 動的パラメータを設定すると、ALTER SYSTEM ステートメントによる今後の表領域作成操作にデフォルトの暗号化アルゴリズムを定義できます。
sql> ALTER SYSTEM SET TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM = value;
使用可能な暗号化アルゴリズムは、AES128、AES192、AES256、3DES168、ARIA128、ARIA192、ARIA256、SEED128、GOST256 のいずれかです。デフォルトは AES128 です。
また、
init.ora
ファイルで初期化パラメータとしてTABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM
を設定することもできます。表領域ペースの暗号化が構成されているかどうかを確認するには、DBA_TABLESPACES ビューと USER_TABLESPACES ビューの ENCRYPTED 列を確認します。この列には、表領域が暗号化されているかどうかが示されます。
SQL> SELECT tablespace_name, encrypted FROM dba_tablespaces; TABLESPACE_NAME ENC ----------------------------------- SYSTEM NO SYSAUX NO UNDOTBS1 NO TEMP NO USERS NO UNDOTBS2 NO ENCRYPTED_TS YES
暗号化をテストする
SQL> CREATE TABLE test (id NUMBER(10),data VARCHAR2(50))TABLESPACE encrypted_ts; Table created. SQL> CREATE INDEX test_idx ON test(data) TABLESPACE encrypted_ts; Index created. SQL> INSERT INTO test (id, data) VALUES (1, 'Test Encryptio'); 1 row created. SQL> COMMIT; Commit complete
バッファ キャッシュを更新して、データをデータファイルに書き込みます。
SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;
strings コマンドを使用して、datafile 内のデータを読み取ります。
export ORACLE_SID=+ASM asmcmd ASMCMD> strings +DATA/db11g/datafile/encrypted_ts01.dbf
データはバイナリ形式で表示されます。
テーブル列レベルで TDE を有効にする
TDE の列暗号化を使用すると、クレジットカード番号、社会保障番号(SSN)、個人口座番号(PAN)など、機密性の高い情報が格納されているデータベース テーブル内の特定の列を暗号化できます。
暗号化された列を使用してテーブルを作成する
SQL> CREATE TABLE employee ( first_name VARCHAR2(128), last_name VARCHAR2(128), empID NUMBER ENCRYPT NO SALT, salary NUMBER(6) ENCRYPT USING '3DES168' ); Table created.
SALT
を使用すると、暗号化されたデータのセキュリティを強化できます。これは、暗号化前のデータにランダムに追加される文字列で、暗号化前のテキストの繰り返しが別の形式で表されます。SALT
により、攻撃者がデータの復号で使用する一つの手口(暗号化されたテキストのパターン マッチング)を防ぐことができます。この機能は、ENCRYPT
句にSALT
パラメータまたはNO SALT
パラメータを指定して制御できます。ALTER TABLE
コマンドを使用すると、既存のテーブルの列を暗号化できます。暗号化された列を追加することも、既存の列を暗号化することもできます。暗号化された列をデータベース内の既存のテーブルに追加するには:
SQL> ALTER TABLE employee ADD (credit_card_number VARCHAR2(16) ENCRYPT NO SALT); Table altered.
データベース内のテーブルの既存の列を暗号化するには:
SQL> ALTER TABLE employee MODIFY (last_name encrypt); Table altered.
データベース内のテーブルの暗号化された列に
SALT
を追加するには:SQL> ALTER TABLE employee MODIFY (last_name encrypt salt); Table altered.
データベース内のテーブルの既存の列を復号するには:
SQL> ALTER TABLE employee MODIFY (last_name decrypt); Table altered.
データベース内のテーブルの暗号化された列から SALT を削除するには:
SQL> ALTER TABLE employee MODIFY (last_name encrypt no salt); Table altered.
暗号化された列を含むテーブルの暗号鍵を変更するには:
SQL> ALTER TABLE employee rekey; Table altered.
暗号化された列を含むテーブルの暗号化アルゴリズムを変更するには:
SQL> ALTER TABLE employee rekey USING '3DES168'; Table altered.
将来の表領域の暗号化
今後 ENCRYPT_NEW_TABLESPACES
データベース初期化パラメータで作成する表領域を自動的に暗号化するように Oracle Database を構成できます。
次の ALTER SYSTEM
コマンドを使用します。
SQL> ALTER SYSTEM SET ENCRYPT_NEW_TABLESPACES=value;
可能な値:
クラウドとオンプレミスの両方のシナリオで
CREATE TABLESPACE
のENCRYPTION
句を省略すると、ALWAYS
はAES128
アルゴリズムまたはTABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM
動的パラメータに指定されたアルゴリズムを使用して表領域を自動的に暗号化します。ただし、ENCRYPTION
句を指定すると、指定したアルゴリズムがAES128
よりも優先されます。DDL
は、クラウド環境とオンプレミス環境の両方で、CREATE TABLESPACE
のENCRYPTION
句で指定された設定を使用して表領域を暗号化します。CLOUD_ONLY
は Oracle Cloud 環境にのみ適用されます(このユースケースには適用されません)。CLOUD_ONLY
がデフォルトです。
TDE 表領域暗号化または TDE 列暗号化
TDE 列暗号化を選択する場合 | TDE 表領域暗号化を選択する場合 |
---|---|
機密情報の場所がわかっている | 機密情報の場所が不明 |
すべてのアプリケーション列の 5% 未満が暗号化の対象になっている | ほとんどのアプリケーション データが機密情報に分類されるか、業界に国内外の複数のセキュリティ / プライバシー規制が適用されている |
TDE の列暗号化でデータ型と長さがサポートされている | 機密情報が含まれる一部のデータ型が TDE の列暗号化でサポートされていない |
暗号化の対象が外部キー列ではない | 暗号化の対象が外部キー列である |
暗号化の対象の索引が通常の B ツリー索引である | 暗号化の対象の索引がファンクション索引である |
アプリケーションが暗号化されたデータに範囲スキャンを実行しない | アプリケーションがセンシティブ データの範囲を検索する |
暗号化された値あたりストレージが 1~52 バイト単位で増分する | ストレージの増分はできない |
パフォーマンスに対する影響は、暗号化された列の割合、暗号化された値が選択または更新される頻度、暗号化されたデータのサイズ、その他の変数に依存する | パフォーマンスに対する影響は常に 10% を下回る |
ハードウェア暗号化アクセラレーションによるメリットを利用したい | |
暗号化と圧縮のメリットを同時に利用したい |
RMAN バックアップの暗号化
バックアップ セットは、V$RMAN_ENCRYPTION_ALGORITHMS
に指定されているアルゴリズムによって暗号化されます。RMAN は、バックアップ セットに書き込まれたデータを透過的に暗号化します。また、RESTORE
操作で必要になると、これらのバックアップ セットを復号します。RMAN には、透過的、パスワード、デュアルモードの 3 つの暗号化モードがあります。
透過モードの暗号化(デフォルト)を使用するには、Oracle Encryption Wallet を使用する必要があります。
パスワード モードを使用するには、暗号化で使用するパスワードを DBA が提供する必要があります。パスワード モードは
SET ENCRYPTION ON IDENTIFIED BY password only
で設定できます。デュアルモードの暗号化を使用すると、Oracle ウォレットまたはパスワードのいずれかを使用して復号できます。デュアルモードは
SET ENCRYPTION ON IDENTIFIED BY password
で設定できます。
RMAN バックアップ暗号化の構成
Oracle ウォレットを設定します。
暗号化を使用するように RMAN を構成します。
RMAN 暗号化モードを構成します。次の例ではデュアルモードを使用するため、RMAN ターゲット データベースに接続して
SET ENCRYPTION ON IDENTIFIED BY password
コマンドを実行します。[oracle@svr002 ~]$ . oraenv ORACLE_SID = [tdedb] ? DB11G The Oracle base has been changed from /u01/app/oracle to /apps/oracle/oracle_base export ORACLE_SID=DB11G1
RMAN に接続します。
rman target / RMAN> SET ENCRYPTION ON IDENTIFIED BY <password>; executing command: SET encryption
デフォルトでは透過的暗号化が使用されますが、
SET ENCRYPTION
により、CONFIGURE ENCRYPTION
コマンドに指定された暗号化設定がオーバーライドされます。デフォルトのバックアップ暗号化アルゴリズムを構成します。
RMAN 暗号化アルゴリズムのリストを取得するには、
v$rman_encryption_algorithms
ビューにクエリを実行します。SQL> COL algorithm_name FORMAT a15 COL algorithm_description FORMAT a15 COL is_default FORMAT a15 SQL> select algorithm_id, algorithm_name, algorithm_description, is_default from v$rman_encryption_algorithms; ALGORITHM_ID ALGORITHM_NAME ALGORITHM_DESCR IS_DEFAULT ----------- -------------- --------------- ---------- 1 AES128 AES 128-bit key YES 2 AES192 AES 192-bit key NO 3 AES256 AES 256-bit key NO
デフォルトのアルゴリズムを変更するには:
RMAN> CONFIGURE ENCRYPTION ALGORITHM 'AES256'; using target database control file instead of recovery catalog new RMAN configuration parameters: CONFIGURE ENCRYPTION ALGORITHM 'AES256'; new RMAN configuration parameters are successfully stored
通常の RMAN バックアップ コマンドを使用して暗号化されたバックアップを取得します。次に例を示します。
RMAN> backup tablespace users;
暗号化パスワードを使用してバックアップを復元するには:
RMAN> set decryption identified by <password>; RMAN> restore tablespace users;
注意事項
必要な復号鍵が使用可能であれば、暗号化されたバックアップが復元とリカバリ時に自動的に復号されます。バックアップ セットごとに別の鍵を使用します。鍵は、暗号化された状態でバックアップ領域に格納されます。バックアップは、ユーザー指定のパスワードまたは Oracle ソフトウェア キーストアによって取得された鍵で復号されます。
透過的なバックアップ暗号化は、自動ログイン ソフトウェア キーストアとパスワード ベースのソフトウェア キーストアの両方に対応しています。自動ログイン ソフトウェア キーストアを使用している場合は、自動ログイン キーストアが常に開いているため、バックアップの暗号化をいつでも実行できます。パスワード ベースのソフトウェア キーストアを使用している場合は、バックアップの暗号化を実行する前にキーストアを開く必要があります。
自動ログイン キーストアを使用する場合は、暗号化されたバックアップ データと一緒にキーストアをバックアップしないでください。バックアップと自動ログイン キーストアの両方があれば、暗号化されたバックアップの読み取りが可能になります。Oracle キーストアは、キーストアのパスワードがなければ使用できないため、安全にバックアップできます。
データベース内の一部の列が透過的データ暗号化(TDE)の列暗号化で暗号化されているときに、その列をバックアップ暗号化によってバックアップすると、これらの列はバックアップ時に 2 回暗号化されます。復元中にバックアップ セットが復号されると、暗号化された列は元の暗号化された形式に戻ります。
Oracle キーストアを紛失した場合、透過的に暗号化されたバックアップを復元できなくなります。また、パスワードで暗号化されたバックアップの暗号化で使用したパスワードを忘れた場合、バックアップを復元できなくなります。