すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:LDAP 認証の使用

最終更新日:Aug 21, 2026

このトピックでは、EMR Kafka の LDAP 認証を有効化する方法について説明し、詳細な例を示します。

前提条件

Dataflow クラスターを作成し、Kafka および OpenLDAP サービスを選択しました。詳細については、「Dataflow Kafka クラスターの作成」をご参照ください。

制限事項

  • この機能は、EMR V3.44.0 以降または EMR V5.10.0 以降を実行する EMR Kafka クラスターで利用できます。

  • クラスター内で EMR OpenLDAP サービスまたは外部 LDAP サービスが利用可能である必要があります。

    このトピックでは、EMR OpenLDAP サービスを例として使用します。

注意事項

ユーザーグループ認証を使用する場合は、LDAP サービスで memberOf オーバーレイ機能が有効化されているか、LDAP ユーザーに対して memberOf 属性がサポートされていることを確認してください。

LDAP 認証の有効化

  1. スーパーユーザーを作成します。

    説明

    すでにスーパーユーザーを作成している場合は、この手順をスキップできます。

    Kafka スーパーユーザーは、すべての Kafka リソースにアクセスできます。スーパーユーザーは、ブローカーノードと他のコンポーネント間の通信を処理します。この例では、EMR OpenLDAP サービスを使用して Kafka スーパーユーザーを追加する方法を示します。

    1. SSH を使用してクラスターの master-1-1 ノードに接続します。詳細については、「クラスターにログオンする」をご参照ください。

    2. 次の内容で kafka.ldif という名前のファイルを作成します。

      このトピックでは、ldap コマンドを使用して、UID が kafka、パスワードが kafka-secret の LDAP ユーザーを追加します。

      dn: uid=kafka,ou=people,o=emr
      cn: kafka
      sn: kafka
      objectClass: inetOrgPerson
      userPassword: kafka-secret
      uid: kafka
    3. 次のコマンドを実行して、LDAP ユーザーを追加します。

      ldapadd -H ldap://master-1-1:10389 -f kafka.ldif -D ${uid} -w ${rootDnPW}
      説明
      • ${uid}: EMR コンソールの OpenLDAP サービスの Configure ページにある admin_dn パラメーターの値。

      • ${rootDnPW}:EMR コンソールの OpenLDAP サービスのConfigureページにあるadmin_pwd パラメーターの値。

      • 10389:OpenLDAP サービスのリッスンポート。

      ユーザーを追加した後、次のコマンドを実行してユーザー情報を表示します。

      ldapsearch -w ${rootDnPW}  -D ${uid} -H ldap://master-1-1:10389 -b uid=kafka,ou=people,o=emr
  2. Kafka 設定ページに移動します。

    1. EMR on ECS コンソールにログインします。

    2. 上部メニューで、必要なリージョンとリソースグループを選択します。

    3. 対象のクラスターのServices列で、[サービス] をクリックします。

    4. Services ページで、Kafka サービスセクションの Configure をクリックします。

  3. 設定を変更して保存します。

    1. Configure ページで、[server.properties] タブをクリックします。

    2. kafka.ssl.config.type 設定項目の値を CUSTOM に変更します。

    3. authorizer.class.name 設定項目の値を kafka.security.ldap.authorizer.SimpleLdapAuthorizer に変更します。

    4. 設定を保存します。

      1. Saveをクリックします。

      2. ダイアログボックスで、Execution Reason フィールドに理由を入力します。

  4. カスタムパラメータを追加して保存します。

    1. [server.properties] タブで、Add Configuration Item をクリックします。

    2. [Add Configuration Item] ダイアログボックスで、次の項目を追加します。

      パラメータ

      値

      説明

      super.users

      User:kafka

      kafka は、作成したユーザー名です。必要に応じて置き換えてください。

      詳細については、「ステップ 1」をご参照ください。

      listener.name.${listener}.sasl.enabled.mechanisms

      PLAIN

      ${listener} を、sasl_ssl などの特定のリスナー名に置き換えます。

      listener.name.${listener}.plain.sasl.jaas.config

      org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="kafka-secret" emr.kafka.security.ldap.user.name.attribute="uid" emr.kafka.security.ldap.user.base.dn="ou=people,o=emr" emr.kafka.security.ldap.group.name.attribute="cn" emr.kafka.security.ldap.group.base.dn="ou=groups,o=emr" emr.kafka.security.ldap.admin.name.attribute="uid" emr.kafka.security.ldap.admin.base.dn="o=emr" emr.kafka.security.ldap.url="ldaps://master-1-1:10636" emr.kafka.security.ldap.bind.user="admin" emr.kafka.security.ldap.bind.user.password="WMMuhh3P**********" emr.kafka.security.ldap.user.member.of.attribute="memberOf" emr.kafka.security.ldap.group.authorization.support="true" ;

      ${listener} を、sasl_ssl などの特定のリスナー名に置き換えます。

      また、次の LDAP 関連の設定値も置き換える必要があります:

      • username:Kafka サービスがノード間通信に使用するスーパーユーザー。

      • emr.kafka.security.ldap.user.name.attribute:ユーザー名を取得するために使用される LDAP ユーザー名属性。

      • emr.kafka.security.ldap.user.base.dn:LDAP ユーザーのベース識別名 (DN)。

      • emr.kafka.security.ldap.group.name.attribute:LDAP ユーザーグループ名の属性。

      • emr.kafka.security.ldap.group.base.dn:LDAP ユーザーグループのベース DN。

      • emr.kafka.security.ldap.admin.name.attribute:LDAP 管理者ユーザー属性。

      • emr.kafka.security.ldap.admin.base.dn:LDAP 管理者ユーザーのベース DN。

      • emr.kafka.security.ldap.url:LDAP URL。

      • emr.kafka.security.ldap.bind.user:ユーザーグループ認証に使用される LDAP 管理者ユーザー名。

      • emr.kafka.security.ldap.bind.user.password:LDAP 管理者のパスワード。

      • emr.kafka.security.ldap.user.member.of.attribute:ユーザーが属するグループを示す属性。

      • emr.kafka.security.ldap.group.authorization.support:グループ認可を有効にするかどうかを指定します。このパラメータが true に設定されている場合、ユーザーは割り当てられたユーザーグループから権限を継承します。

      listener.name.${listener}.plain.sasl.server.callback.handler.class

      kafka.security.ldap.authenticator.LdapAuthenticateCallbackHandler

      ${listener} を、sasl_ssl などの特定のリスナー名に置き換えます。

      sasl.mechanism.inter.broker.protocol

      PLAIN

      なし

      sasl.enabled.mechanisms

      PLAIN

      なし

    3. その他のパラメータを変更します。

      要件に基づいて、次の設定を変更します。

      説明

      kafka.client.jaas.content パラメータの値に含まれるユーザー名とパスワードは、必要に応じて置き換える必要があります。スーパーユーザーを使用することを推奨します。

      設定ファイル

      パラメータ

      値

      説明

      kafka_client_jaas.conf

      kafka.client.jaas.content

      KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka" password="kafka-secret"; };

      値はセミコロン (;) で終わる必要があります。

      schema-registry.properties

      schema_registry_opts

      -Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf

      このパラメータにすでに値がある場合は、新しい内容を追記します。

      kafka-rest.properties

      kafkarest_opts

      -Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf

      このパラメータにすでに値がある場合は、新しい内容を追記します。

  5. Kafka サービスを再起動します。

    1. Kafka サービスの Configure ページで、More > 再起動 を選択します。

    2. 表示されるダイアログボックスに操作の理由を入力し、OK をクリックします。

    3. Confirm ダイアログボックスで、OK をクリックします。

使用例

この例の操作は、オープンソースの Kafka 2.4.1 に適用されます。他の Kafka バージョンについては、「Apache Kafka」をご参照ください。

  1. テストユーザーとユーザーグループを作成します。

    1. OpenLDAP で memberOf オーバーレイ機能が有効化されていない場合は、次の手順に従って有効化します。

      説明
      • 次の設定方法は参考用です。memberOf オーバーレイを有効化する方法は、LDAP サービスによって異なります。

      • この設定をすべての OpenLDAP ノードに適用します。

      • 次のすべての設定ファイルのパラメータを、必要に応じて変更します。例:

        • olcModulepath:32 ビットオペレーティングシステムの場合、パスは /usr/lib/openldap です。

        • dn: cn=module{0},cn=config:/etc/openldap/slapd.d/cn=config ディレクトリにすでに cn=module{0}.ldif ファイルが含まれている場合は、module の後の番号を 1 に変更します。cn=module{1}.ldif ファイルが含まれている場合は、番号を 2 に変更します。以下同様です。

        • dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config は、/etc/openldap/slapd.d/cn=config ディレクトリにある olcDatabase の値に基づいて設定します。 たとえば、olcDatabase={2}hdb.ldif が存在する場合、値を hdb に設定します。

      1. vim memberof_config.ldif コマンドを実行して、新しい設定ファイル memberof_config.ldif を作成します。ファイルの内容は次のとおりです。

        dn: cn=module{0},cn=config
        cn: module{0}
        objectClass: olcModuleList
        objectclass: top
        olcModuleload: memberof.la
        olcModulePath: /usr/lib64/openldap
        
        dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
        objectClass: olcConfig
        objectClass: olcMemberOf
        objectClass: olcOverlayConfig
        objectClass: top
        olcOverlay: memberof
        olcMemberOfDangling: ignore
        olcMemberOfRefInt: TRUE
        olcMemberOfGroupOC: groupOfNames
        olcMemberOfMemberAD: member
        olcMemberOfMemberOfAD: memberOf
      2. vim refint1.ldif コマンドを実行して、設定ファイル refint1.ldif を作成します。ファイルの内容は次のとおりです。

        dn: cn=module{0},cn=config
        add: olcmoduleload
        olcmoduleload: refint
      3. vim refint2.ldif コマンドを実行して、次の内容で新しい設定ファイル refint2.ldif を作成します。

        dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
        objectClass: olcConfig
        objectClass: olcOverlayConfig
        objectClass: olcRefintConfig
        objectClass: top
        olcOverlay: refint
        olcRefintAttribute: memberof member manager owner
      4. 次のコマンドを実行して、設定ファイルを読み込みます。

        ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
        ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
        ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
    2. テストユーザーを作成します。

      次の内容で kafka-users.ldif という名前のファイルを作成し、ldapadd コマンドを使用してテストユーザーを追加します。

      dn: uid=kafka-user1,ou=people,o=emr
      cn: kafka-user1
      sn: kafka-user1
      uid: kafka-user1
      objectClass: inetOrgPerson
      userPassword: kafka-secret
      
      dn: uid=kafka-user2,ou=people,o=emr
      cn: kafka-user2
      sn: kafka-user2
      uid: kafka-user2
      objectClass: inetOrgPerson
      userPassword: kafka-secret
    3. テストユーザーグループを作成します。

      次の内容で kafka-groups.ldif という名前のファイルを作成し、ldapadd コマンドを使用してテストユーザーグループを追加します。

      dn: cn=kafka-group1,ou=groups,o=emr
      cn: kafka-group1
      objectClass: groupOfNames
      member: uid=kafka-user1,ou=people,o=emr
      member: uid=kafka-user2,ou=people,o=emr
      
      dn: cn=kafka-group2,ou=groups,o=emr
      cn: kafka-group2
      objectClass: groupOfNames
      member: uid=kafka-user1,ou=people,o=emr
    4. LDAP が実行されているサーバーで、次のコマンドを実行して、テストユーザーの memberOf 属性を確認します。

      ldapsearch -Q -Y EXTERNAL -H ldapi:///  -b ou=people,o=emr memberOf

      出力は、kafka-user1 の memberOf 属性には kafka-group1 と kafka-group2 が含まれ、kafka-user2 の memberOf 属性には kafka-group1 が含まれることを示しています。

  2. クライアント設定ファイルを作成します。

    1. 次の内容で client.properties という名前のクライアント設定ファイルを作成します。

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      # クライアントの識別に合わせてユーザー名とパスワードを置き換えます。
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka" password="kafka-secret";
    2. 次の内容で kafka-user1.properties という名前のクライアント設定ファイルを作成します。

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      # クライアントの識別に合わせてユーザー名とパスワードを置き換えます。
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka-user1" password="kafka-secret";
    3. 次の内容で kafka-user2.properties という名前のクライアント設定ファイルを作成します。

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      # クライアントの識別に合わせてユーザー名とパスワードを置き換えます。
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka-user2" password="kafka-secret";
  3. test という名前のテストトピックを作成します。

    kafka-topics.sh  --bootstrap-server core-1-1:9092 --command-config  client.properties --create --topic test --replication-factor 3 --partitions 2
  4. 権限を付与します。

    認可コマンドの詳細については、「認可と ACL」をご参照ください。

    # kafka-group2 の権限
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-group2 --allow-host "*" --operation All --cluster kafka-cluster
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-group2 --allow-host "*" --operation All --topic test
    # kafka-group1 の権限
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-group1 --deny-host "*" --operation All --topic test
    # kafka-user1 の権限
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-user1 --deny-host "*" --operation Read --topic test
    # kafka-user2 の権限
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user2 --allow-host "*" --operation Read --topic test

    次のコマンドを実行して、認可結果を表示できます。

    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --list --topic test

    次の情報が返されます:

    Current ACLs for resource `Topic:LITERAL:test`:
            User:kafka-group2 has Allow permission for operations: All from hosts: *
            User:kafka-user2 has Allow permission for operations: Read from hosts: *
            User:kafka-user1 has Deny permission for operations: Read from hosts: *
            User:kafka-group1 has Deny permission for operations: All from hosts: *
  5. 権限を検証します。

    • ユーザー kafka-user1 は test トピックに書き込むことができません。

      kafka-console-producer.sh --broker-list core-1-1:9092 --producer.config ./kafka-user1.properties  --topic test

      プロンプトでテストメッセージを入力します。書き込み操作は、kafka-group1 に設定された Deny ルールが kafka-group2 の Allow ルールより優先されるため失敗します。

      # プロンプトの後にテストメッセージを入力します。
      >test
      # 認可が失敗します。
    • ユーザー kafka-user1 は test トピックから読み取ることができません。

      # コンシューマーグループに権限を付与します。
      kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user1 --allow-host "*" --operation All --group kafka-user1-consumer
      kafka-console-consumer.sh --bootstrap-server core-1-1:9092 --consumer.config ./kafka-user1.properties --topic test --group kafka-user1-consumer

      認可が失敗し、ユーザーは test トピックにアクセスできません。

    • ユーザー kafka-user2 は test トピックに書き込むことができません。

      kafka-console-producer.sh --broker-list core-1-1:9092 --producer.config ./kafka-user2.properties  --topic test
      # プロンプトの後にテストメッセージを入力します。
      >a
      # 認可が失敗します。

      認可が失敗します。

    • ユーザー kafka-user2 は test トピックから読み取ることができません。

      # コンシューマーグループに権限を付与します。
      kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user2 --allow-host "*" --operation All --group kafka-user2-consumer
      kafka-console-consumer.sh --bootstrap-server core-1-1:9092 --consumer.config ./kafka-user2.properties --topic test --group kafka-user2-consumer --from-beginning
      # kafka-group1 に設定された Deny ルールが優先されるため、認可が失敗しデータは消費されません。