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

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create ~/vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
      Copy to Clipboard Toggle word wrap
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      pwd: <password>
      Copy to Clipboard Toggle word wrap
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Installing and configuring PostgreSQL
      hosts: managed-node-01.example.com
      vars_files:
        - ~/vault.yml
      tasks:
        - name: Create directory for TLS certificate and key
          ansible.builtin.file:
            path: /etc/postgresql/
            state: directory
            mode: 755
    
        - name: Copy CA certificate
          ansible.builtin.copy:
            src: "~/{{ inventory_hostname }}.crt"
            dest: "/etc/postgresql/server.crt"
    
        - name: Copy private key
          ansible.builtin.copy:
            src: "~/{{ inventory_hostname }}.key"
            dest: "/etc/postgresql/server.key"
            mode: 0600
    
        - name: PostgreSQL with an existing private key and certificate
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.postgresql
          vars:
            postgresql_version: "16"
            postgresql_password: "{{ pwd }}"
            postgresql_ssl_enable: true
            postgresql_cert_name: "/etc/postgresql/server"
            postgresql_server_conf:
              listen_addresses: "'*'"
              password_encryption: scram-sha-256
            postgresql_pg_hba_conf:
              - type: local
                database: all
                user: all
                auth_method: scram-sha-256
              - type: hostssl
                database: all
                user: all
                address: '127.0.0.1/32'
                auth_method: scram-sha-256
              - type: hostssl
                database: all
                user: all
                address: '::1/128'
                auth_method: scram-sha-256
              - type: hostssl
                database: all
                user: all
                address: '192.0.2.0/24'
                auth_method: scram-sha-256
    
    
        - name: Open the PostgresQL port in firewalld
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.firewall
          vars:
            firewall:
              - service: postgresql
                state: enabled
    Copy to Clipboard Toggle word wrap

    サンプル 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 ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml
    Copy to Clipboard Toggle word wrap

検証

  • postgres スーパーユーザーを使用して PostgreSQL サーバーに接続し、\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 Toggle word wrap

    出力に TLS プロトコルのバージョンと暗号の詳細が表示される場合、接続は機能し、TLS 暗号化が有効になっています。

アプリケーションに 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 に追加します。

前提条件

手順

  1. 機密性の高い変数を暗号化されたファイルに保存します。

    1. vault を作成します。

      $ ansible-vault create ~/vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
      Copy to Clipboard Toggle word wrap
    2. ansible-vault create コマンドでエディターが開いたら、機密データを <key>: <value> 形式で入力します。

      pwd: <password>
      Copy to Clipboard Toggle word wrap
    3. 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
  2. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Installing and configuring PostgreSQL
      hosts: managed-node-01.example.com
      vars_files:
        - ~/vault.yml
      tasks:
        - name: PostgreSQL with certificates issued by IdM
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.postgresql
          vars:
            postgresql_version: "16"
            postgresql_password: "{{ pwd }}"
            postgresql_ssl_enable: true
            postgresql_certificates:
              - name: postgresql_cert
                dns: "{{ inventory_hostname }}"
                ca: ipa
                principal: "postgresql/{{ inventory_hostname }}@EXAMPLE.COM"
            postgresql_server_conf:
              listen_addresses: "'*'"
              password_encryption: scram-sha-256
            postgresql_pg_hba_conf:
              - type: local
                database: all
                user: all
                auth_method: scram-sha-256
              - type: hostssl
                database: all
                user: all
                address: '127.0.0.1/32'
                auth_method: scram-sha-256
              - type: hostssl
                database: all
                user: all
                address: '::1/128'
                auth_method: scram-sha-256
              - type: hostssl
                database: all
                user: all
                address: '192.0.2.0/24'
                auth_method: scram-sha-256
    
    
        - name: Open the PostgresQL port in firewalld
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.firewall
          vars:
            firewall:
              - service: postgresql
                state: enabled
    Copy to Clipboard Toggle word wrap

    サンプル 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 ファイルを参照してください。

  3. Playbook の構文を検証します。

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  4. Playbook を実行します。

    $ ansible-playbook --ask-vault-pass ~/playbook.yml
    Copy to Clipboard Toggle word wrap

検証

  • postgres スーパーユーザーを使用して PostgreSQL サーバーに接続し、\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 Toggle word wrap

    出力に TLS プロトコルのバージョンと暗号の詳細が表示される場合、接続は機能し、TLS 暗号化が有効になっています。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat