Securing the data encryption key
================================

データ暗号化キー
----------------

透過的データ暗号化のキーデータキーは\ ``initdb``
によって生成され、データディレクトリの下のファイル\ ``pg_encryption/key.bin``
に保存されます。このファイルには、実際には、実行時にさまざまな目的に使用される複数のキーが含まれています。データキーは、ファイル内のランダムなバイトの単一シーケンスです。

これ以上のアクションがなければ、このファイルにはプレーンテキストのキーが含まれていますが、安全ではありません。暗号化されたデータディレクトリにアクセスできる人は誰でも平文キーにアクセスできます。これは、暗号化の目的を無効にします。

データ暗号化キーを保護するメカニズムの選択
------------------------------------------

データ暗号化キーを保護するには、TDEにデータ暗号化保護メカニズムを提供するwrapおよびunwrapコマンドを指定する必要があります。このパラメーターは、サーバーの起動時にのみ設定できます。

Wrapおよびunwrapコマンドを使用すると、次のことができます。

-  :ref:`Using a passphrase <Using a passphrase>` 
   。ラッピングキーはパスフレーズから取得され、データキーの暗号化に使用されます。

-  :ref:`Using a key store <Using a key store>` またはキーストア。この2番目のキーは、
   *キーラッピングキー* または *マスターキー* とも呼ばれます。

-  :ref:`Disabling the key wrapping <Disabling the key wrapping>`  を選択することもできます。
   TDEキーが保護されないままになるため、これはテスト環境でのみ行ってください。

ラッピングおよびアンラッピングコマンドの構成
--------------------------------------------

キーを保護する方法を選択したら、ラッピング/ラップ解除コマンドを作成できます。これらのコマンドの構成はユーザーに任されるため、セットアップをローカル要件に合わせて調整し、既存のキー管理ソフトウェアなどと統合できます。

:ref:`Using a passphrase <Using a passphrase>` トピックでは、OpenSSLとパスフレーズを使用してコマンドをラッピング/アンラップする例を提供してTDEデータキーを保護します。
:ref:`Using a key store <Using a key store>` トピックは、外部キーストアキーを使用してコマンドをラップ/アンラップしてTDEデータキーを保護する例を提供します。

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

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

TDEにラッピングおよびアンラップコマンドを提供する
-------------------------------------------------

TDEデータベースサーバーでコマンドを利用できるようにして、データ暗号化キーをラップおよびラップ解除できるようにする必要があります。次のオプションがあります。

-  データベースを作成する前に、ラッピングおよびアンラップコマンドを環境変数として構成できるため、TDEはサーバーの初期化時にこれらの変数にフォールバックできます。

.. raw:: html

   <details>

.. raw:: html

   <summary>

例

.. raw:: html

   </summary>

.. code:: shell

     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

.. raw:: html

   </details>

-  ``--key-wrap-command=<command>``
   および\ ``--key-unwrap-command=<command>``
   オプションを使用してサーバーを初期化するときに、コマンドラインで直接ラッピングおよびアンラップコマンドを提供できます。

.. raw:: html

   <details>

.. raw:: html

   <summary>

例

.. raw:: html

   </summary>

.. code:: shell

     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"

.. raw:: html

   </details>

-  ``--no-key-wrap``
   を使用してデータ暗号化キーの保護を無効にできます。これにより、キーは保護されないままになり、プロポーザルのテストにのみお勧めします。

.. raw:: html

   <details>

.. raw:: html

   <summary>

例

.. raw:: html

   </summary>

.. code:: shell

     initdb --data-encryption -D /var/lib/edb/as16/data --no-key-wrap

.. raw:: html

   </details>

.. toctree::
  :maxdepth: 3

  Administering--secure_key--passphrase
  Administering--secure_key--key_store
  Administering--secure_key--disabling_key
  Administering--secure_key--key_rotation
