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 でクライアント認証を構成するには、以下のとおり実行します。

  1. LDAP サーバーを起動します。

  2. 次のとおり対象ユーザー名とパスワードを LDAP に追加します。

    dn: uid=client,ou=people,dc=planetexpress,dc=com
    userPassword: client-secret
    
  3. 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
    
  4. Kafka ブローカーを再起動します。

    /bin/kafka-server-start etc/kafka/server.properties
    
  5. 次のとおり、クライアント構成を 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 クライアント構成をテストします。

  1. 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
    
  2. 後続のテストに使用する ldapsearch ツールをインストールします。

    sudo yum install openldap-clients -y
    
  3. 認証情報を指定せずに基本アクセスを確認します。

    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)
    
  4. server.propertiesldap.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