3.4. 認証
デフォルトでは、ZooKeeper は認証形式を使用せず、匿名接続を許可します。ただし、Simple Authentication and Security Layer(SASL)を使用した認証の設定に使用できる Java Authentication and Authorization Service(JAAS)をサポートします。ZooKeeper は、ローカルで保存された認証情報を使用した DIGEST-MD5 SASL メカニズムを使用した認証をサポートします。
3.4.1. SASL での認証
JAAS は別の設定ファイルを使用して設定します。JAAS 設定ファイルを ZooKeeper 設定と同じディレクトリー(/opt/kafka/config/
)に配置することが推奨されます。推奨されるファイル名は zookeeper-jaas.conf
です。複数のノードで ZooKeeper クラスターを使用する場合は、すべてのクラスターノードに JAAS 設定ファイルを作成する必要があります。
JAAS はコンテキストを使用して設定されます。サーバーとクライアントなどの個別の部分は常に個別の コンテキスト で設定されます。コンテキストは 設定 オプションで、以下の形式になります。
ContextName { param1 param2; };
SASL 認証は、サーバー間通信(ZooKeeper インスタンス間の)とクライアント間の通信(Kafka と ZooKeeper の間)とクライアント間の通信(Kafka と ZooKeeper の間)に対して個別に設定されます。サーバー間の認証は、複数のノードを持つ ZooKeeper クラスターにのみ関連します。
サーバー間の認証
サーバー間の認証の場合、JAAS 設定ファイルには以下の 2 つの部分が含まれます。
- サーバー設定
- クライアント設定
DIGEST-MD5 SASL メカニズムを使用する場合、QuorumServer
コンテキストを使用して認証サーバーを設定します。暗号化されていない形式でパスワードと接続できるようにするには、すべてのユーザー名が含まれている必要があります。2 つ目のコンテキスト QuorumLearner
は、ZooKeeper に組み込まれているクライアントに設定する必要があります。また、パスワードを暗号化されていない形式で含んでいます。DIGEST-MD5 メカニズムの JAAS 設定ファイルの例を以下に示します。
QuorumServer { org.apache.zookeeper.server.auth.DigestLoginModule required user_zookeeper="123456"; }; QuorumLearner { org.apache.zookeeper.server.auth.DigestLoginModule required username="zookeeper" password="123456"; };
JAAS 設定ファイルの他に、以下のオプションを指定して、通常の ZooKeeper 設定ファイルでサーバー間の認証を有効にする必要があります。
quorum.auth.enableSasl=true quorum.auth.learnerRequireSasl=true quorum.auth.serverRequireSasl=true quorum.auth.learner.loginContext=QuorumLearner quorum.auth.server.loginContext=QuorumServer quorum.cnxn.threads.size=20
KAFKA_OPTS
環境変数を使用して、JAAS 設定ファイルを Java プロパティーとして ZooKeeper サーバーに渡します。
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
サーバー間の認証に関する詳細は、「 ZooKeeper wiki 」を参照してください。
クライアント間の認証
クライアント間の認証は、サーバー間の認証と同じ JAAS ファイルで設定されます。ただし、サーバー間の認証とは異なり、サーバー設定のみが含まれます。設定のクライアント部分は、クライアントで実行する必要があります。認証を使用して ZooKeeper に接続するように Kafka ブローカーを設定する方法は、「 Kafka のインストール 」を参照してください。
Server コンテキストを JAAS 設定ファイルに追加し、クライアント間の認証を設定します。DIGEST-MD5 メカニズムでは、すべてのユーザー名とパスワードを設定します。
Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="123456" user_kafka="123456" user_someoneelse="123456"; };
JAAS コンテキストの設定後、以下の行を追加して ZooKeeper 設定ファイルで client-to-server 認証を有効にします。
requireClientAuthScheme=sasl authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.2=org.apache.zookeeper.server.auth.SASLAuthenticationProvider authProvider.3=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
ZooKeeper クラスターの一部であるすべてのサーバーに対して authProvider.<ID>
プロパティーを追加する必要があります。
KAFKA_OPTS
環境変数を使用して、JAAS 設定ファイルを Java プロパティーとして ZooKeeper サーバーに渡します。
su - kafka export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/zookeeper-jaas.conf"; /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
Kafka ブローカーでの ZooKeeper 認証の設定に関する詳細は、「ZooKeeper の認証」 を参照してください。