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 を有効にするには、次の手順に従います。
次の目的で、以下のプロパティをインベントリに設定します。
- 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 がアップデートされます。
これで 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
(省略可)
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 クラスターのローリングの手順と似ています。
サーバー/サーバー 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
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
前の手順が完了すると、すべての 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
(省略可)|ak| の
server.properties
でzookeeper.set.acl=true
が設定されている場合は、次のスクリプトを実行して ZooKeeper ノードの ACL を削除します。また、kafka_broker_custom_properties
でzookeeper.set.acl: false
を設定します。/usr/bin/zookeeper-security-migration --zookeeper.acl=unsecure \ --zookeeper.connect=zookeeper1:2182 \ --zk-tls-config-file /etc/kafka/server.properties
次の目的でインベントリをアップデートします。
- セキュアでないクライアントポートを 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
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
この時点で、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