6.6. ZooKeeper の認可
Kafka と ZooKeeper の間で認証が有効になっている場合、ZooKeeper アクセス制御リスト (ACL) ルールを使用して、ZooKeeper に格納されている Kafka のメタデータへのアクセスを自動的に制御できます。
6.6.1. ACL 設定
ZooKeeper ACL ルールの適用は、config/server.properties
Kafka 設定ファイルの zookeeper.set.acl
プロパティーによって制御されます。
プロパティーはデフォルトで無効になっていて、true
に設定することにより有効になります。
zookeeper.set.acl=true
ACL ルールが有効になっている場合、ZooKeeper で znode
が作成されると、作成した Kafka ユーザーのみがこれを変更または削除することができます。その他のすべてのユーザーには読み取り専用アクセスがあります。
Kafka は、新しく作成された ZooKeeper znodes
に対してのみ ACL ルールを設定します。ACL がクラスターの最初の起動後にのみ有効である場合、zookeeper-security-migration.sh
ツールは既存のすべての znodes
に ACL を設定できます。
ZooKeeper のデータの機密性
ZooKeeper に保存されるデータには以下が含まれます。
- トピック名およびその設定
- SASL SCRAM 認証が使用される場合のソルト化およびハッシュ化されたユーザークレデンシャル
しかし、ZooKeeper は Kafka を使用して送受信されたレコードを保存しません。ZooKeeper に保存されるデータは機密ではないと想定されます。
データが機密として考慮される場合 (たとえば、トピック名にカスタマー ID が含まれるなど)、保護に使用できる唯一のオプションは、ネットワークレベルで ZooKeeper を分離し、Kafka ブローカーにのみアクセスを許可することです。
6.6.2. 新しい Kafka クラスターでの ZooKeeper ACL の有効化
この手順では、新しい Kafka クラスターの Kafka 設定で ZooKeeper ACL を有効にする方法を説明します。この手順は、Kafka クラスターの最初の起動前にのみ使用してください。すでに実行中のクラスターで ZooKeeper ACL を有効にする場合は、「既存の Kafka クラスターでの ZooKeeper ACL の有効化」 を参照してください。
前提条件
- Streams for Apache Kafka が 各ホストにインストールされており、設定ファイルが使用可能である。
- ZooKeeper クラスターが 設定され、実行されている。
- ZooKeeper でクライアント/サーバー間の認証が 有効である。
- Kafka ブローカーで ZooKeeper の認証が 有効である。
- Kafka ブローカーがまだ起動していない。
手順
Kafka 設定プロパティーファイルを編集して、すべてのクラスターノードで
zookeeper.set.acl
フィールドをtrue
に設定します。zookeeper.set.acl=true
- Kafka ブローカーを起動します。
6.6.3. 既存の Kafka クラスターでの ZooKeeper ACL の有効化
この手順では、稼働している Kafka クラスターの Kafka 設定で ZooKeeper ACL を有効にする方法を説明します。zookeeper-security-migration.sh
ツールを使用して、既存のすべての znodes
に ZooKeeper の ACL を設定します。zookeeper-security-migration.sh
は、Streams for Apache Kafka の一部として利用でき、bin
ディレクトリーにあります。
前提条件
- Kafka クラスターが 設定され、実行されている。
ZooKeeper ACL の有効化
Kafka 設定プロパティーファイルを編集して、すべてのクラスターノードで
zookeeper.set.acl
フィールドをtrue
に設定します。zookeeper.set.acl=true
すべての Kafka ブローカーを 1 つずつ再起動します。
マルチノードクラスターでブローカーを再起動する方法は、「Kafka ブローカーの正常なローリング再起動の実行」 を参照してください。
zookeeper-security-migration.sh
ツールを使用して、既存のすべての ZooKeeperznodes
に ACL を設定します。su - kafka cd /opt/kafka KAFKA_OPTS="-Djava.security.auth.login.config=./config/jaas.conf"; ./bin/zookeeper-security-migration.sh --zookeeper.acl=secure --zookeeper.connect=<ZooKeeperURL> exit
以下に例を示します。
su - kafka cd /opt/kafka KAFKA_OPTS="-Djava.security.auth.login.config=./config/jaas.conf"; ./bin/zookeeper-security-migration.sh --zookeeper.acl=secure --zookeeper.connect=zoo1.my-domain.com:2181 exit