4.8. RHEL システムロールを使用した PostgreSQL データベースサーバーのインストールおよび設定
postgresql
RHEL システムロールを使用すると、PostgreSQL データベースサーバーのインストールと管理を自動化できます。デフォルトでは、このロールは、PostgreSQL サービス設定ファイルでパフォーマンス関連の設定を自動的に指定することで、PostgreSQL を最適化します。
4.8.1. postgresql RHEL システムロールを使用した、既存の TLS 証明書による PostgreSQL の設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションに PostgreSQL データベースサーバーが必要な場合は、TLS 暗号化を使用して PostgreSQL サービスを設定し、アプリケーションとデータベース間のセキュアな通信を有効にできます。postgresql
RHEL システムロールを使用すると、このプロセスを自動化し、TLS 暗号化を使用して PostgreSQL をリモートでインストールおよび設定できます。Playbook で、既存の秘密鍵と、認証局 (CA) によって発行された TLS 証明書を使用できます。
postgresql
ロールは、firewalld
サービスでポートを開くことができません。PostgreSQL サーバーへのリモートアクセスを許可するには、firewall
RHEL システムロールを使用するタスクを Playbook に追加します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 管理対象ノードの秘密鍵と証明書が、コントロールノードの次のファイルに保存されている。
-
秘密鍵:
~/<FQDN_of_the_managed_node>.key
-
証明書:
~/<FQDN_of_the_managed_node>.crt
-
秘密鍵:
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
pwd: <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
postgresql_version: <version>
インストールする PostgreSQL のバージョンを設定します。設定できるバージョンは、管理対象ノードで実行されている Red Hat Enterprise Linux で使用可能な PostgreSQL バージョンによって異なります。
postgresql_version
変数を変更して Playbook を再度実行しても、PostgreSQL をアップグレードまたはダウングレードすることはできません。postgresql_password: <password>
postgres
データベーススーパーユーザーのパスワードを設定します。POSTGRESQL_PASSWORD
変数を変更して Playbook を再度実行しても、パスワードを変更することはできません。postgresql_cert_name: <private_key_and_certificate_file>
管理対象ノード上の証明書と秘密鍵の両方のパスとベース名を、
.crt
およびkey
接尾辞なしで定義します。PostgreSQL の設定中に、ロールが/var/lib/pgsql/data/
ディレクトリーにこれらのファイルを参照するシンボリックリンクを作成します。証明書と秘密鍵は管理対象ノード上にローカルに存在している必要があります。Playbook に示されているように、
ansible.builtin.copy
モジュールのタスクを使用して、コントロールノードから管理対象ノードにファイルを転送できます。postgresql_server_conf: <list_of_settings>
ロールが設定する必要がある
postgresql.conf
設定を定義します。ロールはこれらの設定を/etc/postgresql/system-roles.conf
ファイルに追加し、このファイルを/var/lib/pgsql/data/postgresql.conf
の最後に含めます。その結果、postgresql_server_conf
変数の設定により、/var/lib/pgsql/data/postgresql.conf
内の設定がオーバーライドされます。postgresql_server_conf
で異なる設定を使用して Playbook を再実行すると、/etc/postgresql/system-roles.conf
ファイルが新しい設定で上書きされます。postgresql_pg_hba_conf: <list_of_authentication_entries>
/var/lib/pgsql/data/pg_hba.conf
ファイル内のクライアント認証エントリーを設定します。詳細は、PostgreSQL のドキュメントを参照してください。この例では、PostgreSQL への次の接続を許可します。
- ローカル UNIX ドメインソケットを使用した暗号化されていない接続。
- IPv4 および IPv6 ローカルホストアドレスへの TLS 暗号化接続。
-
192.0.2.0/24 サブネットからの TLS 暗号化接続。リモートアドレスからのアクセスは、
postgresql_server_conf
変数のlisten_addresses
設定も適切に設定した場合にのみ可能であることに注意してください。
postgresql_pg_hba_conf
で異なる設定を使用して Playbook を再実行すると、/var/lib/pgsql/data/pg_hba.conf
ファイルが新しい設定で上書きされます。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.postgresql/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
postgres
スーパーユーザーを使用して PostgreSQL サーバーに接続し、\conninfo
メタコマンドを実行します。psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo'
# psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に TLS プロトコルのバージョンと暗号の詳細が表示される場合、接続は機能し、TLS 暗号化が有効になっています。
4.8.2. postgresql RHEL システムロールを使用した、IdM から発行された TLS 証明書による PostgreSQL の設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションに PostgreSQL データベースサーバーが必要な場合は、TLS 暗号化を使用して PostgreSQL サービスを設定し、アプリケーションとデータベース間のセキュアな通信を有効にできます。PostgreSQL ホストが Red Hat Enterprise Linux Identity Management (IdM) ドメインのメンバーである場合、certmonger
サービスによって証明書要求と将来の更新を管理できます。
postgresql
RHEL システムロールを使用すると、このプロセスを自動化できます。TLS 暗号化を使用して PostgreSQL をリモートでインストールおよび設定できます。postgresql
ロールは、certificate
RHEL システムロールを使用して certmonger
を設定し、IdM から証明書を要求します。
postgresql
ロールは、firewalld
サービスでポートを開くことができません。PostgreSQL サーバーへのリモートアクセスを許可するには、firewall
RHEL システムロールを使用するタスクを Playbook に追加します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - 管理対象ノードを IdM ドメインに登録した。
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
pwd: <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル Playbook で指定されている設定は次のとおりです。
postgresql_version: <version>
インストールする PostgreSQL のバージョンを設定します。設定できるバージョンは、管理対象ノードで実行されている Red Hat Enterprise Linux で使用可能な PostgreSQL バージョンによって異なります。
postgresql_version
変数を変更して Playbook を再度実行しても、PostgreSQL をアップグレードまたはダウングレードすることはできません。postgresql_password: <password>
postgres
データベーススーパーユーザーのパスワードを設定します。POSTGRESQL_PASSWORD
変数を変更して Playbook を再度実行しても、パスワードを変更することはできません。postgresql_certificates: <certificate_role_settings>
-
certificate
ロールの設定を含む YAML ディクショナリーのリスト。 postgresql_server_conf: <list_of_settings>
ロールが設定する必要がある
postgresql.conf
設定を定義します。ロールはこれらの設定を/etc/postgresql/system-roles.conf
ファイルに追加し、このファイルを/var/lib/pgsql/data/postgresql.conf
の最後に含めます。その結果、postgresql_server_conf
変数の設定により、/var/lib/pgsql/data/postgresql.conf
内の設定がオーバーライドされます。postgresql_server_conf
で異なる設定を使用して Playbook を再実行すると、/etc/postgresql/system-roles.conf
ファイルが新しい設定で上書きされます。postgresql_pg_hba_conf: <list_of_authentication_entries>
/var/lib/pgsql/data/pg_hba.conf
ファイル内のクライアント認証エントリーを設定します。詳細は、PostgreSQL のドキュメントを参照してください。この例では、PostgreSQL への次の接続を許可します。
- ローカル UNIX ドメインソケットを使用した暗号化されていない接続。
- IPv4 および IPv6 ローカルホストアドレスへの TLS 暗号化接続。
-
192.0.2.0/24 サブネットからの TLS 暗号化接続。リモートアドレスからのアクセスは、
postgresql_server_conf
変数のlisten_addresses
設定も適切に設定した場合にのみ可能であることに注意してください。
postgresql_pg_hba_conf
で異なる設定を使用して Playbook を再実行すると、/var/lib/pgsql/data/pg_hba.conf
ファイルが新しい設定で上書きされます。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.postgresql/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
postgres
スーパーユーザーを使用して PostgreSQL サーバーに接続し、\conninfo
メタコマンドを実行します。psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo'
# psql "postgresql://postgres@managed-node-01.example.com:5432" -c '\conninfo' Password for user postgres: You are connected to database "postgres" as user "postgres" on host "192.0.2.1" at port "5432". SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に TLS プロトコルのバージョンと暗号の詳細が表示される場合、接続は機能し、TLS 暗号化が有効になっています。