Securing the data encryption key#
データ暗号化キー#
透過的データ暗号化のキーデータキーはinitdb
によって生成され、データディレクトリの下のファイルpg_encryption/key.bin
に保存されます。このファイルには、実際には、実行時にさまざまな目的に使用される複数のキーが含まれています。データキーは、ファイル内のランダムなバイトの単一シーケンスです。
これ以上のアクションがなければ、このファイルにはプレーンテキストのキーが含まれていますが、安全ではありません。暗号化されたデータディレクトリにアクセスできる人は誰でも平文キーにアクセスできます。これは、暗号化の目的を無効にします。
データ暗号化キーを保護するメカニズムの選択#
データ暗号化キーを保護するには、TDEにデータ暗号化保護メカニズムを提供するwrapおよびunwrapコマンドを指定する必要があります。このパラメーターは、サーバーの起動時にのみ設定できます。
Wrapおよびunwrapコマンドを使用すると、次のことができます。
Using a passphrase 。ラッピングキーはパスフレーズから取得され、データキーの暗号化に使用されます。
Using a key store またはキーストア。この2番目のキーは、 キーラッピングキー または マスターキー とも呼ばれます。
Disabling the key wrapping を選択することもできます。 TDEキーが保護されないままになるため、これはテスト環境でのみ行ってください。
ラッピングおよびアンラッピングコマンドの構成#
キーを保護する方法を選択したら、ラッピング/ラップ解除コマンドを作成できます。これらのコマンドの構成はユーザーに任されるため、セットアップをローカル要件に合わせて調整し、既存のキー管理ソフトウェアなどと統合できます。
Using a passphrase トピックでは、OpenSSLとパスフレーズを使用してコマンドをラッピング/アンラップする例を提供してTDEデータキーを保護します。 Using a key store トピックは、外部キーストアキーを使用してコマンドをラップ/アンラップしてTDEデータキーを保護する例を提供します。
TDEでサーバーを初期化すると、initdb
コマンドはpostgresql.conf
構成ファイルにdata_encryption_key_unwrap_command
パラメーターを追加します。 data_encryption_key_unwrap_command
で指定された文字列は、データ暗号化キーをラップ解除または復号化できます。
コマンドには、プレースホルダー %p
が含まれる必要があります。これは、ラップ解除するキーを含むファイルの名前に置き換えられます。コマンドは、ラップされていない復号化されたキーを標準出力に出力する必要があります。
TDEにラッピングおよびアンラップコマンドを提供する#
TDEデータベースサーバーでコマンドを利用できるようにして、データ暗号化キーをラップおよびラップ解除できるようにする必要があります。次のオプションがあります。
データベースを作成する前に、ラッピングおよびアンラップコマンドを環境変数として構成できるため、TDEはサーバーの初期化時にこれらの変数にフォールバックできます。
例
PGDATAKEYWRAPCMD=openssl enc -e -aes128-wrap -pbkdf2 -out "%p"
PGDATAKEYUNWRAPCMD=openssl enc -d -aes128-wrap -pbkdf2 -in "%p"
export PGDATAKEYWRAPCMD PGDATAKEYUNWRAPCMD
#After these variables are set, you can initialize the server:
initdb --data-encryption -D /var/lib/edb/as16/data
--key-wrap-command=<command>および--key-unwrap-command=<command>オプションを使用してサーバーを初期化するときに、コマンドラインで直接ラッピングおよびアンラップコマンドを提供できます。
例
initdb --data-encryption -D /var/lib/edb/as16/data --key-wrap-command=openssl enc -e -aes128-wrap -pbkdf2 -out "%p" --key-unwrap-command=openssl enc -d -aes128-wrap -pbkdf2 -in "%p"
--no-key-wrapを使用してデータ暗号化キーの保護を無効にできます。これにより、キーは保護されないままになり、プロポーザルのテストにのみお勧めします。
例
initdb --data-encryption -D /var/lib/edb/as16/data --no-key-wrap