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を使用してパスキーを定義し、生成されたデータ暗号化キーをラップおよびラップ解除します。
データ暗号化キーwrapと復号化unwrap環境変数を設定します。
- edb_notranlate_1 .. Note::
Windowsを使用している場合、変数値を一重引用符で囲む必要はありません。
暗号化を有効にした
initdbを使用してクラスターを初期化します。このコマンドは、 postgresql.confファイルのdata_encryption_key_unwrap_commandパラメーターを設定します。
/usr/edb/as15/bin/initdb --data-encryption -D /var/lib/edb/as15/data
クラスターを起動します。
/usr/edb/as15/bin/pg_ctl -D /var/lib/edb/as15/data start
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)