Ansible Playbook を使用した Confluent Platform での暗号化の構成

Ansible Playbooks for Confluent Platform では、PLAINTEXT(暗号化なし)と TLS 暗号化がサポートされています。デフォルトは PLAINTEXT です。

TLS 暗号化

すべてのコンポーネントを対象にした TLS 構成

すべてのコンポーネントで TLS 暗号化を有効にするには、hosts.yml ファイルに以下を追加します。

all:
  vars:
    ssl_enabled: true

個々のコンポーネントでの TLS 構成

特定のコンポーネントで TLS 暗号化を有効または無効にするには、グローバルの ssl_enabled 設定に加えて、以下の設定を true または false にします。

  • zookeeper_ssl_enabled
  • kafka_connect_ssl_enabled
  • kafka_rest_ssl_enabled
  • schema_registry_ssl_enabled
  • control_center_ssl_enabled
  • ksql_ssl_enabled

たとえば、Schema Registry 以外のすべてのコンポーネントで TLS を有効にするには、以下のように設定します。

all:
  vars:
    ssl_enabled: true
    schema_registry_ssl_enabled: false

この構成では、証明書はデフォルトで自己署名されます。カスタムの証明書をデプロイする場合には、カスタムの証明書、またはカスタムのキーストアとトラストストアを用意します。

証明書

以下のいずれかを使用して TLS 暗号化を有効にできます。

  • 自己署名証明書: 認証機関が Ansible Playbook で生成され、各ホストの証明書の署名に使用されます。

    自己署名証明書は、テスト環境および開発環境のみで使用してください。セキュリティ上の懸念から、自己署名証明書は本稼働環境ではサポートされていません。

  • カスタム証明書: 証明書の署名に使用する証明機関の証明書の他に、署名済みの証明書とキーをホストごとに指定します。

  • カスタムのキーストアとトラストストア: キーストアとトラストストアをホストごとに指定します。

カスタム証明書を使用する TLS

各ホストでカスタム証明書を用意する場合には、Ansible コントロールノードの各ホストに証明機関の証明書、署名済み証明書、およびキーが必要です。

以下の手順により hosts.yml をアップデートします。

  1. カスタム証明書を提供することを指定します。

    all:
      vars:
        ssl_custom_certs: true
    
  2. 各ホストの証明書の署名に使用する、証明機関の証明書へのパスを入力します。

    all:
      vars:
        ssl_ca_cert_filepath: "/tmp/certs/ca.crt"
    
  3. 各ホストについて、署名済み証明書へのパスとキーファイルへのパスを設定します。

    all:
      vars:
        ssl_signed_cert_filepath: "/tmp/certs/{{inventory_hostname}}-signed.crt"
        ssl_key_filepath: "/tmp/certs/{{inventory_hostname}}-key.pem"
    

    この例の変数 {{inventory_hostname}} は、インベントリファイルに設定された各ホスト名を Ansible が読み出せるということを表しています。このため、署名済み証明書とキーファイルのファイル名にホスト名を使用すると、インベントリファイルを短くすることができます。

    または、ホストの直下に変数を設定することもできます。以下に例を示します。

    schema_registry:
       hosts:
          ip-192-24-10-207.us-west.compute.internal:
             ssl_signed_cert_filepath: "/tmp/certs/192-24-10-207-signed.crt
             ssl_key_filepath: "/tmp/certs/192-24-10-207-key.pem
    

カスタムのキーストアとトラストストアを使用する TLS

各ホストでカスタムのキーストアとトラストストアを用意する場合には、Ansible コントロールノードの各ホストにキーストアとトラストストア(およびそれらのパスワード)を用意し、さらに各ホストのパスワードを用意する必要があります。

以下の手順により hosts.yml をアップデートします。

  1. カスタムのキーストアとトラストストアを提供することを指定します。

    all:
      vars:
        ssl_provided_keystore_and_truststore: true
    
  2. キーストアとトラストストアのファイルパスとパスワードを指定します。

    all:
      vars:
        ssl_keystore_filepath: "/tmp/certs/{{inventory_hostname}}-keystore.jks"
        ssl_keystore_key_password: mystorepassword
        ssl_keystore_store_password: mystorepassword
        ssl_truststore_filepath: "/tmp/certs/truststore.jks"
        ssl_truststore_password: truststorepass
    

    変数 {{inventory_hostname}} を使用し、各ホストに同じパスワードを設定すれば、上記の変数を hosts.yml に一度設定するだけで済みます。

    または、各ホストの下に上記の変数を設定することもできます。以下に例を示します。

    schema_registry:
      hosts:
        ip-192-24-10-207.us-west.compute.internal:
          ssl_keystore_filepath: "/tmp/certs/{{inventory_hostname}}-keystore.jks"
          ssl_keystore_key_password: mystorepassword
          ssl_keystore_store_password: mystorepassword
          ssl_truststore_filepath: "/tmp/certs/truststore.jks"
          ssl_truststore_password: truststorepass
    

FIPS 用の構成

Ansible を使用すると、Confluent Platform 連邦情報処理標準(Federal Information Processing Standard: FIPS)モード を構成できます。この機能は Confluent Server ではサポートされていますが、Kafka の標準のデプロイでは利用できません。

以下は、FIPS 対応で Ansible Playbooks for Confluent Platform を構成する場合の要件です。

  • FIPS 対応の RHEL 7 システム
  • 乱数ジェネレーターサービスが実行中であること
  • Java 8(Java 11 はサポートされていません)
  • ssl_custom_certs を使用する場合、ssl_signed_cert_filepath に証明書チェーンへのパスを指定する必要があります。単一の署名済み証明書を単独で使用することはできません。
  • すべてのリスナーで ssl_enabled: true を設定しておく必要があります。

Confluent Server で FIPS 対応モードを構成するには、hosts.yml ファイル内で以下のように設定します。

all:
   vars:
     fips_enabled: true
     ssl_enabled: true