LDAP でのクライアント認証の構成¶
Active Directory(AD)および LDAP あるいはその一方を使用して、SASL/PLAIN を使用するすべての Kafka クラスターの間でクライアント認証を構成できます。SASL/PLAIN を LDAP にバインドするには、クライアントからパスワードを指定する必要があります。クライアント認証情報(パスワード)をクライアントから送信できないため、SASL/SCRAM は LDAP にバインドできないことに注意してください。
Kafka クラスターを起動する前に、LDAP サーバー(AD など)をセットアップする必要があります。以下の構成は、ブローカーが実行されているホストから DNS ルックアップを使用してアクセスできる LDAP サーバーが URL LDAPSERVER.EXAMPLE.COM:3268
にあることを前提としています。この構成では Kerberos 対応の LDAP サーバーを想定しています(Kerberos は必須ではないが、使用する LDAP がサポートしている場合、単にバインドすることが可能)。さらに LDAP Authorizer 構成で認証に GSSAPI
を使用します。これらのセキュリティ設定は、使用する LDAP サーバーの構成と一致する必要があります。
LDAP サーバーが Kerberos を使用してクライアントを認証する場合は、LDAP オーソライザー用にキータブファイルが必要になり、オーソライザーの JAAS 構成オプション ldap.sasl.jaas.config
でキータブファイルとプリンシパルを更新する必要があります。
LDAP を構成するには、「MDS の LDAP グループベース認可の構成」を参照してください。
AD または LDAP でクライアント認証を構成するには、以下のとおり実行します。
LDAP サーバーを起動します。
次のとおり対象ユーザー名とパスワードを LDAP に追加します。
dn: uid=client,ou=people,dc=planetexpress,dc=com userPassword: client-secret
LDAP コールバックハンドラーをブローカーの
server.properties
に追加して、LDAP 認証を Kafka クライアントに対して有効にします。次のとおり SASL 構成を追加します。
listener.name.sasl_plaintext.sasl.enabled.mechanisms=PLAIN listener.name.sasl_plaintext.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required; listener.name.sasl_plaintext.plain.sasl.server.callback.handler.class= io.confluent.security.auth.provider.ldap.LdapAuthenticateCallbackHandler
ブローカー間通信で LDAP 認証を使用する場合は、使用する SASL 構成に、ブローカーのユーザー名とパスワードを含める必要があります。
次のとおり LDAP 構成を追加します。
ldap.java.naming.provider.url=ldap://openldap:389 # Authenticate to LDAP ldap.java.naming.security.principal=CN=admin,DC=planetexpress,DC=com ldap.java.naming.security.credentials=GoodNewsEveryone ldap.java.naming.security.authentication=simple # Locate users ldap.user.search.base=ou=people,dc=planetexpress,dc=com ldap.user.name.attribute=uid ldap.user.object.class=user ldap.user.password.attribute=userPassword
Kafka ブローカーを再起動します。
/bin/kafka-server-start etc/kafka/server.properties
次のとおり、クライアント構成を
producer.properties
およびconsumer.properties
に指定します。sasl.mechanism=PLAIN security.protocol=SASL_PLAINTEXT sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="client" password="client-secret";
クライアント構成のパスワードを シークレット管理 を使用して暗号化することを推奨します。次の例では、暗号化されたクライアント構成を示しています。
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="client" password=${securepass:/secretsDemo/server.properties:server.properties/sasl.jaas.config/=org.apache.kafka.common.security.plain.PlainLoginModule /password};
注釈
認証情報はプレーンテキストで送信されます。したがって TLS を LDAP で必ず使用してください。
LDAP クライアント認証のテストとトラブルシューティング¶
このセクションでは、LDAP クライアント認証の構成時に想定される一般的なエラーに対処するための基本的なトラブルシューティングのヒントを示します。
以下の手順を使用して、LDAP クライアント構成をテストします。
LDAP 接続を確認します。
# Ping the LDAP host to verify connectivity ping ldap.hostname.com # Connect to the LDAP host (this command uses the default port) telnet ldap.hostname.com 389
後続のテストに使用する
ldapsearch
ツールをインストールします。sudo yum install openldap-clients -y
認証情報を指定せずに基本アクセスを確認します。
ldapsearch -LLL -x -H ldap://ldap.hostname.com -s "base" -b "" supportedSASLMechanisms
このコマンドを実行すると、成功応答または認証エラーが返されるはずです。それ以外のエラーが発生した場合は、LDAP が正しく設定されていません。
成功応答は次のようになります。
ldapsearch -LLL -x -H ldap://localhost -s "base" -b "" supportedSASLMechanisms dn: supportedSASLMechanisms: GS2-IAKERB supportedSASLMechanisms: GS2-KRB5 supportedSASLMechanisms: SCRAM-SHA-1 supportedSASLMechanisms: SCRAM-SHA-256 supportedSASLMechanisms: GSS-SPNEGO supportedSASLMechanisms: GSSAPI supportedSASLMechanisms: DIGEST-MD5 supportedSASLMechanisms: OTP supportedSASLMechanisms: NTLM supportedSASLMechanisms: CRAM-MD5
認証エラーは次のようになります。
ldapsearch -LLL -x -W -H ldap://localhost -s "base" -b "" supportedSASLMechanisms Enter LDAP Password: ldap_bind: Invalid credentials (49)
LDAP サーバーと通信できない場合や、LDAP サーバーが LDAP 要求を受け入れるように正しく設定されていない場合は、次のようなエラーが表示されます。
ldapsearch -LLL -x -H ldap://localhost:8090 -s "base" -b "" supportedSASLMechanisms ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
server.properties
のldap.java.naming.security.principal
で指定されているユーザーを使用して、基本認証情報ベースのアクセスを確認します。ldapsearch -LLL -x -H ldap://ldap.hostname.com -s "base" -b "" -D CN=kafka_user,CN=Users,DC=hostname,DC=com -w 'pa55word' supportedSASLMechanisms
ldap.java.naming.security.principal
の値が Kerberos プリンシパルを指している場合は、必ず LDAP から対応するユーザーを指定してください。
上記の検証テストに合格した場合は、MDS で LDAP に対する認証を実行できます。
LDAPS 経由で通信するように Kafka を構成する場合は、次のように LDAP サーバーへの TLS 接続を確認します。
# To verify the LDAP configuration
ldapsearch -LLL -x -H ldaps://ldap.hostname.com -s "base" -b "" supportedSASLMechanisms
# If using self-signed certificates from the LDAP server
LDAPTLS_CACERT=/path/to/CA.cert ldapsearch -LLL -x -H ldaps://ldap.hostname.com -s "base" -b "" supportedSASLMechanisms
Kerberos を使用して LDAP に対して認証するように Kafka を構成する場合は、次のように LDAP サーバーへの認証を確認します。
# To verify the Kerberos configuration
kinit -k -t ./filename.keytab kafka_broker/kafka1.hostname.com@EXAMPLE.COM
ldapsearch -LLL -Y GSSAPI -H ldap://ldap.hostname.com -s "base" -b "" supportedSASLMechanisms