ZooKeeper TLS の再構成

このトピックでは、デプロイ後に ZooKeeper TLS を有効化および無効化するプロセスについて説明します。

ZooKeeper のクライアント/サーバー TLS 暗号化および認証の有効化

ZooKeeper のクライアント/サーバー TLS を有効にする場合、変更が完全にロールアウトされるまで、セキュアなポートとセキュアでないポートの両方を有効にしておく必要があります。

TLS を有効にする前のインベントリは以下のようになっています。

all:
  vars:
    zookeeper_ssl_enabled: false
    zookeeper_client_authentication_type: none
    zookeeper_quorum_authentication_type: none

クライアント/サーバー TLS を有効にするには、次の手順に従います。

  1. 次の目的で、以下のプロパティをインベントリに設定します。

    • ZooKeeper の TLS 暗号化を有効にする。
    • クライアントの相互 TLS(mTLS)認証を有効にする。
    • セキュアでない ZooKeeper のクライアントポートを有効にする。
    all:
      vars:
        zookeeper_ssl_enabled: true
        zookeeper_client_authentication_type: mtls
        zookeeper_quorum_authentication_type: none
        deployment_strategy: rolling
        zookeeper_custom_properties:
          clientPort: 2181
    

    前述の設定をロールアウトします。

    ansible-playbook -i hosts.yml all.yml \
      --tags kafka_broker,zookeeper \
      --skip-tags package
    

    これによって ZooKeeper の再構成の実行中にセキュアでないポートが ZooKeeper で有効化されたままになり、その後セキュアなポートを使用するように Kafka がアップデートされます。

  2. これで Kafka の接続がセキュアになったため、セキュアでないクライアントポート clientPort を削除します。

    all:
      vars:
        zookeeper_ssl_enabled: true
        zookeeper_client_authentication_type: mtls
        zookeeper_quorum_authentication_type: none
        deployment_strategy: rolling
    

    前述の設定をロールアウトします。

    ansible-playbook -i hosts.yml all.yml \
      --tags kafka_broker,zookeeper \
      --skip-tags package
    
  3. (省略可) zookeeper.set.acl=true を Kafka の server.properties で設定する場合は、以下のスクリプトを実行して ACL を ZooKeeper ノードに追加します。

    /usr/bin/zookeeper-security-migration \
      --zookeeper.acl=secure \
      --zookeeper.connect=zookeeper1:2182 \
      --zk-tls-config-file /etc/kafka/server.properties
    

ZooKeeper のサーバー/サーバー TLS 暗号化および認証の有効化

ZooKeeper のサーバー/サーバー暗号化および認証を有効にする手順は、複数の ZooKeeper クラスターのローリングの手順と似ています。

  1. サーバー/サーバー mTLS 認証を有効にします。その際、カスタムプロパティを使用して、mTLS を実行せず(sslQuorum: "false")、TLS 接続と非 TLS 接続の両方を同じポートで許可するようにします(portUnification: "true")。

    all:
      vars:
        zookeeper_ssl_enabled: true
        zookeeper_client_authentication_type: mtls
        zookeeper_quorum_authentication_type: mtls
        deployment_strategy: rolling
        zookeeper_custom_properties:
          portUnification: "true"
          sslQuorum: "false"
    

    前述の設定をロールアウトします。

    ansible-playbook -i hosts.yml all.yml --tags zookeeper --skip-tags package
    
  2. sslQuorum カスタムプロパティを削除して mTLS を有効にします。ポートの結合が必要なのは、この変更をロールアウトする際に、TLS を経由する ZooKeeper ノードとそうでないノードができてしまうためです。

    all:
      vars:
        zookeeper_ssl_enabled: true
        zookeeper_client_authentication_type: mtls
        zookeeper_quorum_authentication_type: mtls
        deployment_strategy: rolling
        zookeeper_custom_properties:
          portUnification: "true"
    

    前述の設定をロールアウトします。

    ansible-playbook -i hosts.yml all.yml --tags zookeeper --skip-tags package
    
  3. 前の手順が完了すると、すべての ZooKeeper ノードが接続に mTLS を使用するようになるため、ポートの結合は不要になります。portUnification: "true" カスタムプロパティを削除し、もう一度ロールアウトしてください。

    all:
      vars:
        zookeeper_ssl_enabled: true
        zookeeper_client_authentication_type: mtls
        zookeeper_quorum_authentication_type: mtls
        deployment_strategy: rolling
    

    前述の設定をロールアウトします。

    ansible-playbook -i hosts.yml all.yml --tags zookeeper --skip-tags package
    

ZooKeeper の TLS 暗号化および認証の無効化

このセクションでは、サーバー/サーバー接続とクライアント/サーバー接続の両方から TLS を無効にする方法について説明します。

TLS を無効にする前のインベントリは以下のようになっています。

all:
  vars:
    zookeeper_ssl_enabled: true
    zookeeper_client_authentication_type: mtls
    zookeeper_quorum_authentication_type: mtls
  1. (省略可)|ak| の server.propertieszookeeper.set.acl=true が設定されている場合は、次のスクリプトを実行して ZooKeeper ノードの ACL を削除します。また、kafka_broker_custom_propertieszookeeper.set.acl: false を設定します。

    /usr/bin/zookeeper-security-migration --zookeeper.acl=unsecure \
      --zookeeper.connect=zookeeper1:2182 \
      --zk-tls-config-file /etc/kafka/server.properties
    
  2. 次の目的でインベントリをアップデートします。

    • セキュアでないクライアントポートを ZooKeeper に追加する。
    • Kafka に ZooKeeper の TLS が無効になっていることを通知する。
    • ZooKeeper クォーラムのポートの結合を追加する。これは、サーバー/サーバー接続が TLS と非 TLS のどちらでも構わないことを意味します。
    all:
      vars:
        zookeeper_ssl_enabled: true
        zookeeper_client_authentication_type: mtls
        zookeeper_quorum_authentication_type: mtls
        deployment_strategy: rolling
        zookeeper_custom_properties:
          clientPort: 2181
          portUnification: "true"
    
    kafka_broker:
      vars:
        zookeeper_ssl_enabled: false
        zookeeper_client_authentication_type: none
    

    前述の設定をロールアウトします。

    ansible-playbook -i hosts.yml all.yml \
      --tags kafka_broker,zookeeper \
      --skip-tags package
    
  3. ZooKeeper サーバー/サーバー SSL クォーラムの実行を停止します。

    all:
      vars:
        zookeeper_ssl_enabled: true
        zookeeper_client_authentication_type: mtls
        zookeeper_quorum_authentication_type: mtls
        deployment_strategy: rolling
        zookeeper_custom_properties:
          clientPort: 2181
          portUnification: "true"
          sslQuorum: "false"
    kafka_broker:
      vars:
        zookeeper_ssl_enabled: false
        zookeeper_client_authentication_type: none
    

    前述の設定をロールアウトします。

    ansible-playbook -i hosts.yml all.yml \
      --tags kafka_broker,zookeeper \
      --skip-tags package
    
  4. この時点で、ZooKeeper のクライアント(Kafka)および ZooKeeper は暗号化されていないトラフィックを使用しているため、カスタムプロパティを削除し、もう一度ロールアウトしてください。

    all:
      vars:
        zookeeper_ssl_enabled: false
        zookeeper_client_authentication_type: none
        zookeeper_quorum_authentication_type: none
        deployment_strategy: rolling
    
    ansible-playbook -i hosts.yml all.yml \
      --tags kafka_broker,zookeeper \
      --skip-tags package