Enabling TDE on an existing EDB Postgres Advanced Server cluster#

EDB Postgres Advanced ServerクラスターでのTDEの有効化#

TDEを有効にして新しいEDB Postgres Advanced Serverクラスターを作成し、 pg_upgrade を使用して既存のソースクラスターから新しい暗号化されたクラスターにデータを転送します。

  • アップグレードの準備 既存のインスタンスのバックアップを実行する。

  • 暗号化されたサーバーの作成

    • 新しいサーバーの空のディレクトリを作成し、 enterprisedb がそれを所有していることを確認します。

    • 暗号化のためにwrap およびunwrap コマンドをエクスポートするように環境変数を設定します。

    • 暗号化を有効にしてサーバーを初期化します。

    • デフォルトポートを変更して、新しいサーバーが別のポートで利用できるようにします。

    • データベースサーバーを起動します。

    • データベースサーバーに接続し、機能していることを確認します。

  • 暗号化されたサーバーへのアップグレード

    • ソースと新しいサーバーの両方を停止します。

    • pg_upgrade を--copy-by-block オプションとともに使用して、ソースサーバーから新しいサーバーにデータをコピーします。ソース、ターゲットのbin、およびデータディレクトリを指定します。

    • 新しい暗号化されたデータベースサーバーを起動します。

    • 暗号化されたデータベースサーバーに接続し、データが転送されたことを確認します。

  • アップグレード後のクリーンアップ

    • データベースとその統計をクリーンアップします。

    • pg_upgrade が提供するスクリプトを使用して、ソースEDB Postgres Advanced Serverクラスターを削除します。

実際の例#

この例では、Ubuntu 22.04マシンで実行されているEDB Postgres Advanced Serverバージョン16で透過的データの暗号化を有効にします。

同様のワークフローは、 EDB Postgres Advanced ServerおよびEDB Postgres Extended Serverの他のバージョンに適用されます。 BINおよびCONFIGディレクトリの場所は、オペレーティングシステムとPostgresバージョンによって異なることに注意してください。

アップグレードの準備#

pg_dumpall 、 pgBackRest 、または

Barman を使用して、暗号化されていないソースサーバーのバックアップを作成します。

暗号化されたサーバーの作成#

  1. 新しいサーバーの空のディレクトリを作成します。この例では、ディレクトリ名は TDE です。

mkdir /var/lib/edb-as/16/TDE
  1. enterprisedb ユーザーがディレクトリを所有していることを確認します。

sudo chown enterprisedb /var/lib/edb-as/16/TDE
sudo chgrp /var/lib/edb-as/16/TDE
  1. wrap およびunwrap コマンドをエクスポートするように環境変数を設定します。

export PGDATAKEYWRAPCMD=openssl enc -e -aes-128-cbc -pass pass:ok -out %p
export PGDATAKEYUNWRAPCMD=openssl enc -d -aes-128-cbc -pass pass:ok -in %p

注釈

または、暗号化されたサーバーを初期化するときに`--key-unwrap-command=<command>` および`--key-wrap-command=<command>` 引数を使用して、 wrap および`unwrap` コマンドを含めます。 考えられる構成の詳細については、 initdb TDEオプションを使用する を参照してください。

  1. 暗号化を使用して新しいサーバーを初期化します。

/usr/lib/edb-as/16/bin/initdb --data-encryption -D /var/lib/edb-as/16/TDE

このコマンドは、暗号化されたサーバーのすべての構成ファイルでCONFIGディレクトリを初期化します。

  1. 暗号化されたインスタンスの構成ファイルのポート番号を変更します。 #port という行のコメントを外し、ポート番号を変更します。例

port                    5590
  1. 暗号化されたサーバーを起動します。

/usr/lib/edb-as/16/bin/pg_ctl -D /var/lib/edb-as/16/TDE -l logfile start
  1. サーバーに接続します。

/usr/lib/edb-as/16/bin/psql -p 5590 edb

注釈

2つの異なるPostgresバージョンを使用している場合、暗号化されたサーバーのpsqlユーティリティを使用します。それ以外の場合、システムは以前のインスタンスからpsqlを使用しようとします。

  1. 新しいサーバーが暗号化されるように保証には、 SQLを使用したTDEの存在のチェック 。

暗号化されたサーバーへのアップグレード#

  1. 両方のサーバーを停止します。

/usr/lib/edb-as/16/bin/pg_ctl -D /var/lib/edb-as/16/non-TDE stop
/usr/lib/edb-as/16/bin/pg_ctl -D /var/lib/edb-as/16/TDE stop
  1. 非互換性をテストするには、 checkモードでpg_upgrade コマンドを実行します。 -b および-B では、ソースおよびターゲットBINディレクトリを指定します。 -d および-D では、ソースおよびターゲットのCONFIGディレクトリを指定します。 --copy-by-block オプションを含めます。

/usr/lib/edb-as/16/bin/pg_upgrade -b /usr/lib/edb-as/16/bin -B /usr/lib/edb-as/16/bin -d /var/lib/edb-as/16/non-TDE -D /var/lib/edb-as/16/TDE --copy-by-block --check

注釈

--check モードは、コマンドを実行せずに事前チェックを実行します。

  1. ソースサーバーからターゲットサーバーにデータをコピーするには、通常モードでpg_upgrade コマンドを実行します。

/usr/lib/edb-as/16/bin/pg_upgrade -b /usr/lib/edb-as/16/bin -B /usr/lib/edb-as/16/bin -d /var/lib/edb-as/16/non-TDE -D /var/lib/edb-as/16/TDE --copy-by-block
  1. 暗号化されたサーバーを再起動します。

/usr/lib/edb-as/16/bin/pg_ctl -D /var/lib/edb-as/16/TDE start
  1. 暗号化されたデータベースサーバーに接続します。

/usr/lib/edb-as/16/bin/psql -p 5590 edb
  1. スポットチェックを実行して、暗号化されていないサーバーにあったデータベース、テーブル、スキーマ、およびリソースが新しいサーバーで利用できることを確認します。例、すべてのデータベースをリストします。

\l

データベースたとえば hr に接続し、既存のテーブルを検索します。

\c hr
SELECT * FROM dept;

アップグレード後のクリーンアップ#

pg_upgrade がデータを正常に暗号化したことを確認した後、クリーンアップを実行します。

  1. データベースとその統計をクリーンアップします。

/usr/lib/edb-as/16/bin/vacuumdb --all --analyze-in-stages
  1. pg_upgrade によって生成されたスクリプトを使用して、暗号化されていないサーバーのすべてのデータファイルを削除します。

./delete_old_cluster.sh