Compliance
==========

TPAは、クラスターがSTIGまたはCIS標準に準拠することを簡単にするように設計された構成を生成できます。
``--compliance stig`` または\ ``--compliance cis``
を\ ``tpaexec configure`` に渡すと、TPAは次のことを行います。

- 他のオプションが適切な規格と互換性があることを確認します。

- これが特定の標準に準拠するクラスターであることのマーキングや、標準の要求に応じてPostgres構成の設定を含む、生成された\ ``config.yml``
  にさまざまなエントリを追加します。

- コンプライアンスを適用するように一部の展開タスクを調整します。

- 展開の最後にチェックを実行します。

オプション\ ``--excluded_tasks=compliance`` 〜\ ``tpaexec deploy``
を指定することにより、展開時チェックをスキップできます。この機能は、完全なコンプライアンスが不可能なテストシステムを使用する場合、SSL証明書が使用できない場合など、テストのみを対象としています。

TPAが選択した標準に意図的に準拠しない場合があります。これらは以下の例外に文書化されています。

STIG
----

STIG準拠は、 ``tpaexec configure`` への\ ``--compliance stig``
オプションによって示されます。

オプションの互換性
^^^^^^^^^^^^^^^^^^

STIGコンプライアンスには、\ ``bare`` プラットフォームと\ ``epas``
フレーバーが必要です。バージョン8または9のRedHat OSが必要です。

config.ymlの設定
^^^^^^^^^^^^^^^^

EDB Postgres Advanced ServerのSQL
/Protect機能を使用するために、次のエントリが\ ``cluster_vars``
に追加されます。

.. code:: yaml

   extra_postgres_extensions: [ sql_protect ]

次のエントリが\ ``cluster_vars``
に追加されて、クライアントにSSL認証を使用するように強制します。

.. code:: yaml

   hba_force_hostssl: True
   hba_force_certificate_auth: True
   hba_cert_authentication_map: sslmap

次のエントリが\ ``cluster_vars``
に追加されて、postgresql.confでGUCが設定されます。

.. code:: yaml

   tcp_keepalives_idle: 10
   tcp_keepalives_interval: 10
   tcp_keepalives_count: 10
   log_destination: "stderr"
   postgres_log_file_mode: "0600"

次のエントリが\ ``cluster_vars`` の\ ``postgres_conf_settings``
に追加されて、postgresql.confでGUCを設定します。

.. code:: yaml

   edb_audit: "xml"
   edb_audit_statement: "all"
   edb_audit_connect: "all"
   edb_audit_disconnect: "all"
   statement_timeout: 1000
   client_min_messages: "ERROR"

デプロイメントの違い
^^^^^^^^^^^^^^^^^^^^

TPAは、展開中に、通常の操作に必要な接続数に対応して、作成するデータベースユーザーの接続制限を設定します。各ユーザーが設定されると、SSLクライアント証明書が提供されたことも確認します。

クライアントSSL証明書の提供
^^^^^^^^^^^^^^^^^^^^^^^^^^^

STIGは、クライアント接続に国防総省承認のssl証明書を必要とします。これらの証明書はTPAでは生成できないため、提供する必要があります。クラスター内のノードからユーザーの認証を設定すると、TPAはノードで証明書/キーペアを検索します。証明書とキーは、\ ``ssl_client_cert_dir``
設定で指定されたディレクトリの\ ``<username>.crt``
および\ ``<username>.key``
というファイルにある必要があります。この設定のデフォルトは\ ``/``
であるため、ファイルは、たとえば、 ``barman``
ユーザーがセットアップされている場合の\ ``/barman.crt``
および\ ``/barman.key`` になります。

最終チェック
^^^^^^^^^^^^

展開の最後に、TPAはサーバーでFIPSが有効になっていることを確認します。

例外
^^^^

フェールオーバーマネージャーとしてEFMを選択すると、TPAはEFMユーザーのパスワード認証を構成します。これは、すべてのTCP接続が証明書認証を使用するというSTIG要件に反しています。この例外の理由は、EFMが証明書認証をサポートしていないためです。

CIS
---

CIS準拠は、 ``tpaexec configure`` への\ ``--compliance cis``
オプションによって示されます。

.. _config.ymlの設定-1:

config.ymlの設定
^^^^^^^^^^^^^^^^

次のエントリが\ ``cluster_vars``
に追加されて、postgresql.confでGUCが設定されます。

.. code:: yaml

   log_connections: "on"
   log_disconnections: "on"

次のエントリーが\ ``cluster_vars``
に追加されて、必要な拡張機能を有効にします。

.. code:: yaml

   extra_postgres_extensions: ["passwordcheck", "pgaudit"]

次のエントリーが\ ``cluster_vars`` に追加されて、postgres
OSユーザーのumaskを設定します。

.. code:: yaml

   extra_bash_rc_lines: "umask 0077"

次のエントリが\ ``cluster_vars`` の\ ``postgres_conf_settings``
に追加されて、postgresql.confでGUCを設定します。

.. code:: yaml

   log_error_verbosity: "verbose"
   log_line_prefix: "%m [%p]: [%l-1] db=%d,user=%u,app=%a,client=%h "
   log_replication_commands: "on"
   temp_file_limit: "1GB"

.. _最終チェック-1:

最終チェック
^^^^^^^^^^^^

展開の最後に、TPAはサーバーでFIPSが有効になっていることを確認します。

.. _例外-1:

例外
^^^^

CIS仕様で記載されているように、TPAはpgBackRestをサポートしていません。代わりに、TPAはBarmanをインストールします。

TPAは、CIS仕様で必要とされる\ ``set_user``
のインストールと構成を行いません。これは、
Postgresユーザーによるログオンを防止すると、TPAがデータベースに接続および構成できなくなるためです。
