Creating a database cluster with TDE enabled#

initdb を使用してデータベースクラスターを初期化するときに、透過的データの暗号化を有効にします。

initdb TDEオプションを使用する#

暗号化を有効にするには、 initdb コマンドまたはそのフォールバック環境変数で次のオプションを使用します。

-y, --data-encryption

透過的なデータ暗号化を使用して新しいデータベースクラスターを初期化します。詳細については、 を参照してください。オプションでAESキー長を指定します。有効な値は128および256です。デフォルトは128です。

--copy-key-from=<file>

指定された場所からデータ暗号化キーをコピーします。 pg_upgradeのターゲットとして新しいクラスターを準備するときに、このオプションを使用して既存のクラスターからキーをコピーできます。 --key-wrap-command=<command> 生成されたデータの暗号化キーをラップする(暗号化する)コマンドを指定します。コマンドには、ラップされたキーを書き込むファイルを指定するプレースホルダー %p を含める必要があります。ラップ解除されたキーは、標準入力でコマンドに提供されます。このオプションを指定しない場合、環境変数PGDATAKEYWRAPCMD が使用されます。 キーラッピングコマンドを適用したくない場合は、特別な値- を使用します。 データ暗号化を使用している場合、このオプションまたは環境変数フォールバックを指定する必要があります。詳細については、 Securing the data encryption key を参照してください。

--key-unwrap-command=<command>

データ暗号化キーのラップを解除するコマンドを指定します。コマンドには、ラップされたキーを読み取るファイルを指定するプレースホルダー %p を含める必要があります。コマンドは、ラップされていないキーを標準出力に書き込む必要があります。このオプションを指定しない場合、環境変数PGDATAKEYUNWRAPCMD が使用されます。 キーのラップ解除コマンドを適用したくない場合は、特別な値 - を使用します。 データ暗号化を使用している場合、このオプションまたは環境変数フォールバックを指定する必要があります。詳細については、 Securing the data encryption key を参照してください。 --no-key-wrap

キーラッピングを無効にします。データ暗号化キーは、代わりにデータディレクトリに平文で保存されます。 このオプションは、wrapコマンドとunwrapコマンドの両方を特別な値- に設定するためのショートカットです。

注釈

このオプションの使用は安全ではありません。テスト目的でのみ使用してください。 データの暗号化を選択し、このオプションを指定しない場合、key Wrapおよびunwrapコマンドを提供する必要があります。それ以外の場合、initdb はエラーで終了します。

環境変数を使用する#

操作を簡素化するために、環境変数にキーwrapおよびunwrapコマンドを設定できます。

例

PGDATAKEYWRAPCMD=openssl enc -e -aes128-wrap -pbkdf2 -out "%p"
PGDATAKEYUNWRAPCMD=openssl enc -d -aes128-wrap -pbkdf2 -in "%p"
export PGDATAKEYWRAPCMD PGDATAKEYUNWRAPCMD

postgresql.confのkeyパラメーターの設定#

クラスターでTDEを有効にすると、 initdb コマンドはpostgresql.conf 構成ファイルのdata_encryption_key_unwrap_command パラメーターを初期化します。 data_encryption_key_unwrap_command で指定された文字列は、データ暗号化キーをラップ解除します復号化します。

コマンドには、プレースホルダー %p が含まれる必要があります。これは、ラップ解除するキーを含むファイルの名前に置き換えられます。コマンドは、ラップされていない復号化されたキーを標準出力に出力する必要があります。

このパラメーターを指定しない場合、環境変数PGDATAKEYUNWRAPCMD が使用されます。

キーのラップ解除コマンドを適用したくない場合は、特別な値 - を使用します。

データ暗号化を使用している場合、このパラメーターまたは環境変数フォールバックを指定する必要があります。詳細については、 Securing the data encryption key を参照してください。

このパラメーターは、サーバーの起動時にのみ設定できます。

このパラメーターは、通常、initdb によって初期化されます。キーラップ方法を変更する場合にのみ変更します。

構成ファイルの詳細については、 PostgreSQL File Locations documentation を参照してください。

例#

この例では、Linuxプラットフォームで実行されているEDB Postgres Advanced Server 15を使用します。 opensslを使用してパスキーを定義し、生成されたデータ暗号化キーをラップおよびラップ解除します。

  1. データ暗号化キーwrapと復号化unwrap環境変数を設定します。

edb_notranlate_1 .. Note::

Windowsを使用している場合、変数値を一重引用符で囲む必要はありません。

  1. 暗号化を有効にしたinitdb を使用してクラスターを初期化します。このコマンドは、 postgresql.confファイルのdata_encryption_key_unwrap_command パラメーターを設定します。

/usr/edb/as15/bin/initdb --data-encryption -D /var/lib/edb/as15/data
  1. クラスターを起動します。

/usr/edb/as15/bin/pg_ctl -D /var/lib/edb/as15/data start
  1. postgresql.confでgrepを実行して、data_encryption_key_unwrap_command の設定を確認します。

grep data_encryption_key_unwrap_command /var/lib/edb/as15/data/postgresql.conf
__OUTPUT__
data_encryption_key_unwrap_command = openssl enc -d -aes-128-cbc -pass pass:ok -in %p

SQLを使用したTDEの存在のチェック#

pg_control_init テーブルのdata_encryption_version 列を照会することにより、サーバーにTDEが存在するかどうかを知ることができます。

値0は、TDEが有効になっていないことを意味します。ゼロ以外の値は、使用中のTDEのバージョンを反映しています。現在、TDEが有効になっている場合、この値は1です。

select data_encryption_version from pg_control_init();
__OUTPUT__
 data_encryption_version
- ------------------------
                       1
(1 row)