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 ステートメントを使用します。

新しい表領域の暗号化

新しい表領域を作成するときに暗号化を構成できます。

  1. 表領域暗号化の COMPATIBLE 初期化パラメータが 11.2.0.0 以降であることを確認します。

    SQL> SHOW PARAMETER COMPATIBLE
    
         NAME        TYPE     VALUE
         ----        ----     ------
         compatible  string   11.2.0.4.0
    
  2. TDE マスター暗号鍵が構成されていることを確認します。確認方法については、前提条件セクションの「初期マスター鍵を作成する」をご覧ください。

  3. 暗号化された表領域を作成する

    データファイルのパスを確認するには、次のコマンドを実行します。

    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
    
  4. 暗号化をテストする

    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)など、機密性の高い情報が格納されているデータベース テーブル内の特定の列を暗号化できます。

  1. 暗号化された列を使用してテーブルを作成する

    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 TABLESPACEENCRYPTION 句を省略すると、ALWAYSAES128 アルゴリズムまたは TABLESPACE_ENCRYPTION_DEFAULT_ALGORITHM 動的パラメータに指定されたアルゴリズムを使用して表領域を自動的に暗号化します。ただし、ENCRYPTION 句を指定すると、指定したアルゴリズムが AES128 よりも優先されます。

  • DDL は、クラウド環境とオンプレミス環境の両方で、CREATE TABLESPACEENCRYPTION 句で指定された設定を使用して表領域を暗号化します。

  • 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 バックアップ暗号化の構成

  1. Oracle ウォレットを設定します。

  2. 暗号化を使用するように 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 コマンドに指定された暗号化設定がオーバーライドされます。

  3. デフォルトのバックアップ暗号化アルゴリズムを構成します。

    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 キーストアを紛失した場合、透過的に暗号化されたバックアップを復元できなくなります。また、パスワードで暗号化されたバックアップの暗号化で使用したパスワードを忘れた場合、バックアップを復元できなくなります。