MDS の LDAP グループベース認可の構成

重要

グループロールバインディングに指定するユーザー ID では大文字と小文字が区別され、AD レコードでの指定と一致する必要があります。スーパーユーザーとしてログインするときは、ログイン ID の大文字と小文字も区別され、ロールバインディング内のユーザー ID の指定と一致する必要があることにも注意してください。

LDAP コンテキストの構成

すべての標準 Java LDAP 構成がサポートされています。ldap.java.naming または ldap.com.sun.jndi から始まるブローカー構成については、プレフィックス ldap. が除去され、LDAP サーバーへの接続には標準の Java LDAP 構成が使用されます。ldap.java.naming.provider.url は、LDAP サーバーの URL で構成する必要があります。以下に例を示します。

ldap.java.naming.provider.url=ldap://somehost:389

以下は、Kafka でバインドユーザーによるディレクトリサービスへの認証に使用される、必要なベースライン JNDI LDAP 構成オプションの詳しい説明です。

ldap.java.naming.provider.url
このオプションは、LDAP サーバーへの接続に使用する URL を定義します。デフォルトのホスト名は localhost、デフォルトのポートは 389 です。このオプションは MDS 構成に指定する必要があります。
ldap.java.naming.security.authentication
LDAP サーバーでパスワード認証が有効になっている場合は、ブローカーが単純認証を使用して LDAP サーバーで認証できるようにユーザープリンシパルとパスワードを構成できます。LDAP サーバーでの認証を行わない場合は、none を指定します。MDS を稼働させるための推奨値は simple (セキュリティを提供しない PLAINTEXT 認証プロトコル)です。本稼働環境のインスタンスの場合は、LDAP サーバーでサポートされている、より安全な SASL メソッド( SASL_GSSAPI など)を指定する必要があります。
ldap.java.naming.security.credentials
LDAP 検索を実行するプリンシパルのセキュリティ認証情報(パスワード)を指定します。
ldap.java.naming.security.principal
LDAP 検索を実行する LDAP ユーザーの識別名であるセキュリティプリンシパルを指定します。この構成では、DN を使用して MDS ユーザーを指定します。DN とは LDAP 識別名であり、コンマで接続された相対識別名(RDN: Relative Distinguished Name)のシーケンスです。

LDAP ネームサービスプロバイダーおよび Java Naming and Directory Interface(JNDI)用の標準 Java 構成の一覧については、『LDAP Naming Service Provider for the Java Naming and Directory Interface (JNDI)』を参照してください。

LDAP 用の TLS/SSL の構成

LDAP Authorizer から LDAP サーバーへの接続用に TLS/SSL を有効にするには、ldap.java.naming.security.protocol=SSL を設定します。TLS/SSL が有効になっている場合は、LDAP プロバイダーの URL にプロトコル ldaps を使用する必要があります。Kafka クライアントのすべての TLS/SSL 構成オプションがサポートされますが、これらにはプレフィックスとして ldap. を付ける必要があります。例を次に示します。

# Configure provider URL with `ldaps` as protocol
ldap.java.naming.provider.url=ldaps://somehost:389
# Enable SSL for connections to LDAP server
ldap.java.naming.security.protocol=SSL
# Path of truststore for connections to LDAP
ldap.ssl.truststore.location=/path/to/truststore.jks
# Password of LDAP truststore
ldap.ssl.truststore.password=truststore-secret

サポートされている TLS/SSL 構成のリストについては、「TLS での暗号化と認証」を参照してください。

GSSAPI の LDAP 用構成

LDAP サーバーで Kerberos が有効になっている場合は、LDAP サーバーで GSSAPI を使用して LDAP Authorizer を認証できます。GSSAPI の JAAS 構成は、構成オプション ldap.sasl.jaas.config を使用して構成できます。認証プロトコルとセキュリティプリンシパルも、プレフィックスとして ldap. を付けた標準 Java LDAP 構成を使用して構成する必要があります。以下に例を示します。

# Configure SASL/GSSAPI as the authentication protocol for LDAP context.
ldap.java.naming.security.authentication=GSSAPI
# Security principal for LDAP context
ldap.java.naming.security.principal=ldap@EXAMPLE.COM
# JAAS configuration for Kerberos authentication with LDAP server
ldap.sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
  keyTab="/tmp/keytabs/ldap.keytab" \
  principal="ldap@EXAMPLE.COM" \
  storeKey="true" \
  useKeyTab="true";

ldap.sasl.jaas.config が構成されていない場合は、ブローカーのデフォルトの JAAS 構成が使用されます。デフォルトの JAAS 構成(システムプロパティ java.security.auth.login.config を使用した構成など)は、ブローカーのログインコンテキストとして使用されるログインコンテキスト KafkaServer から単一の共有ログインを使用して読み込まれます。LDAP でのこの方法の使用は、このコンテキストのプリンシパルを使用して LDAP を検索できる場合に限定してください。

パスワード認証情報の LDAP 用構成

LDAP サーバーでパスワード認証が有効になっている場合は、ブローカーが単純認証を使用して LDAP サーバーで認証できるようにユーザープリンシパルとパスワードを構成できます。ブローカーの LDAP 認証情報を構成するには、プレフィックスとして ldap. を付けた標準 Java 構成を使用します。以下に例を示します。

# Configure simple LDAP binding for authentication
ldap.java.naming.security.authentication=SIMPLE
# Security principal is the distinguished name of the LDAP user that performs LDAP search
ldap.java.naming.security.principal=CN=Kafka Broker,OU=Users,DC=EXAMPLE,DC=COM
# Security credential is the password of the user that performs LDAP search
ldap.java.naming.security.credentials=broker-secret

LDAP フィルターの構成による検索結果の制限

LDAP サーバーのユーザー数が多い場合、Confluent Platform へのアクセスを必要とするユーザーは、その一部のみである可能性があります。そのような場合、ブローカーに必要となるのは、Confluent Platform に接続するごく一部のユーザーに対するグループマッピングのみであるため、フィルターを構成して検索結果のサイズを縮小することができます。LDAP フィルターは、ユーザーモード検索で、LDAP サーバーで定義されているすべてのユーザーをブローカーの処理対象にする必要がない場合に特に便利です。

Confluent Platform にアクセスするすべてのユーザーをグループに追加することにより、単純なフィルターを構成できます。たとえば、次の構成では、Kafka グループに属するユーザーが除外されます。

ldap.user.search.filter=(memberOf=CN=Kafka,CN=Users,DC=EXAMPLE,DC=COM)

Confluent Platform のユーザーが既に小さなグループセットに属している場合に、グループセットに属するユーザーを処理する単純なフィルターを構成することもできます。たとえば、次のフィルターでは、グループ Administrators および Kafka Developers に属するユーザーが処理されます。

ldap.user.search.filter=(|(memberOf=CN=Administrators,CN=Users,DC=EXAMPLE,DC=COM)(memberOf=CN=Kafka Developers,CN=Users,DC=example,DC=com))

Confluent Platform に接続するユーザーまたはグループに一致する他の属性が LDAP サーバーに既に存在する場合は、それらに基づいてフィルター処理を行うことができます。ユーザー検索モードとグループ検索モードの両方で、有効な LDAP 検索フィルターを使用して検索結果を制限できます。

LDAP Authorizer の構成オプション

LDAP 検索の構成

ldap.refresh.interval.ms

LDAP グループのキャッシュ更新間隔(単位: ミリ秒)。ゼロに設定されている場合は、LDAP 永続検索が使用されます。

  • 型: int
  • デフォルト: 60000
  • 重要度: 中
ldap.search.page.size

永続検索が無効になっている場合(つまり、更新間隔がゼロより大きい場合)の LDAP 検索のページサイズ。デフォルトではページングが無効になっています。

  • 型: int
  • デフォルト: 0
  • 重要度: 中
ldap.search.mode

グループまたはユーザーエントリを検索することでユーザーからグループへのマッピングを取得できるかどうかを示す LDAP 検索モード。有効な値は USERS または GROUPS です。

  • 型: string
  • デフォルト: GROUPS
  • 指定可能な値: [GROUPS, USERS]
  • 重要度: 中

グループによる LDAP 検索

ldap.group.search.base

グループベース検索用の LDAP 検索ベース。

  • 型: string
  • デフォルト: ou=groups
  • 重要度: 高
ldap.group.search.filter

グループベース検索用の LDAP 検索フィルター。

  • 型: string
  • デフォルト: ""
  • 重要度: 中
ldap.group.search.scope

グループベース検索用の LDAP 検索スコープです。有効な値は 0(OBJECT)、1(ONELEVEL)、2(SUBTREE)です。

  • 型: int
  • デフォルト: 1
  • 重要度: 中
ldap.group.object.class

グループの LDAP オブジェクトクラスです。

  • 型: string
  • デフォルト: groupOfNames
  • 重要度: 中
ldap.group.name.attribute

LDAP 検索を使用して取得したグループエントリ内でグループの名前が格納されている属性の名前です。ldap.group.name.attribute.pattern を構成することにより、ACL で使用されるグループ名をこの属性から抽出するための正規表現パターンを指定できます。

  • 型: string
  • デフォルト: cn
  • 重要度: 高
ldap.group.name.attribute.pattern

ldap.group.name.attribute を使用して指定された LDAP 属性からグループの名前を取得し、その名前から、ACL で使用されるグループ名を抽出する Java 正規表現パターン。デフォルトでは、属性の完全な値が使用されます。

  • 型: string
  • デフォルト: ""
  • 重要度: 低
ldap.group.member.attribute

LDAP 検索を使用して取得したグループエントリ内でグループのメンバーが格納されている属性の名前です。ldap.group.member.attribute.pattern を構成することにより、ユーザープリンシパルをこの属性から抽出するための正規表現パターンを指定できます。

  • 型: string
  • デフォルト: member
  • 重要度: 高
ldap.group.member.attribute.pattern

ldap.group.member.attribute を使用して指定された LDAP 属性からグループメンバーエントリを取得し、そのエントリからグループメンバーのユーザープリンシパルを抽出する Java 正規表現パターン。デフォルトでは、属性の完全な値が使用されます。

  • 型: string
  • デフォルト: ""
  • 重要度: 中
ldap.group.dn.name.pattern

グループの名前が変更されたときに、グループの識別名(DN)からグループ名を抽出する Java 正規表現パターンです。永続検索が有効になっている場合にのみ使用されます。デフォルトでは、DN から ldap.group.name.attribute が抽出されます。

  • 型: string
  • デフォルト: ""
  • 重要度: 低
ldap.user.dn.name.pattern

ユーザーの名前が変更されたときに、ユーザーの識別名(DN)からユーザー名を抽出するために使用される Java 正規表現パターンです。永続検索が有効になっている場合にのみ使用されます。デフォルトでは、DN から ldap.user.name.attribute が抽出されます。

  • 型: string
  • デフォルト: ""
  • 重要度: 低

ユーザーによる LDAP 検索

ldap.user.search.base

ユーザーベース検索用の LDAP 検索ベースです。

  • 型: string
  • デフォルト: ou=users
  • 重要度: 中
ldap.user.search.filter

ユーザーベース検索用の LDAP 検索フィルターです。

  • 型: string
  • デフォルト: ""
  • 重要度: 中
ldap.user.search.scope

ユーザーベース検索用の LDAP 検索スコープです。指定可能な値は 0(OBJECT)、1(ONELEVEL)、2(SUBTREE)です。

  • 型: int
  • デフォルト: 1
  • 重要度: 中
ldap.user.object.class

ユーザーの LDAP オブジェクトクラスです。

  • 型: string
  • デフォルト: person
  • 重要度: 中
ldap.user.name.attribute

LDAP 検索を使用して取得したユーザーエントリ内でユーザープリンシパルが格納されている属性の名前。ldap.user.name.attribute.pattern を構成することにより、ユーザープリンシパルをこの属性から抽出するための正規表現パターンを指定できます。

  • 型: string
  • デフォルト: uid
  • 重要度: 中
ldap.user.name.attribute.pattern

ldap.user.name.attribute を使用して指定された LDAP 属性からユーザーの名前を取得し、その名前からユーザープリンシパルを抽出するために使用される Java 正規表現パターン。デフォルトでは、属性の完全な値が使用されます。

  • 型: string
  • デフォルト: ""
  • 重要度: 中
ldap.user.memberof.attribute

LDAP 検索を使用して取得したユーザーエントリ内でグループが格納されている属性の名前です。ldap.user.memberof.attribute.pattern を構成することにより、ACL で使用されるグループ名をこの属性から抽出するための正規表現パターンを指定できます。

  • 型: string
  • デフォルト: memberof
  • 重要度: 中
ldap.user.memberof.attribute.pattern

ldap.user.memberof.attribute を使用して指定された LDAP 属性からユーザーエントリを取得し、そのエントリからグループの名前を抽出するために使用される Java 正規表現パターン。デフォルトでは、属性の完全な値が使用されます。

  • 型: string
  • デフォルト: ""
  • 重要度: 中

エラー処理の構成

ldap.retry.backoff.ms

再試行のバックオフの初期値(単位: ミリ秒)です。ldap.retry.backoff.max.ms が大きな値に設定されている場合は、指数関数的なバックオフが使用されます。

  • 型: int
  • デフォルト: 100
  • 重要度: 中
ldap.retry.backoff.max.ms

再試行のバックオフの最大値(単位: ミリ秒)です。ldap.retry.backoff.ms が小さな値に設定されている場合は、指数関数的なバックオフが使用されます。

  • 型: int
  • デフォルト: 1000
  • 重要度: 中
ldap.retry.timeout.ms

LDAP Authorizer が失敗としてマークされるまでの LDAP 検索再試行のタイムアウトです。この時間内にキャッシュの更新を正常に実行できない場合、すべてのリクエストについてアクセスが拒否されます。

  • 型: long
  • デフォルト: 3600000
  • 重要度: 中

LDAP 接続の TLS/SSL 構成

ldap.ssl.protocol

SSLContext の生成に使用する TLS/SSL プロトコル。デフォルト設定は TLS であり、ほとんどのケースに適しています。最新の JVM で使用できる値は、TLS、TLSv1.1、TLSv1.2 です。古い JVM では SSL、SSLv2、および SSLv3 がサポートされている場合もありますが、セキュリティに関する既知の脆弱性があるため、使用しないことをお勧めします。

  • 型: string
  • デフォルト: TLS
  • 重要度: 中
ldap.ssl.provider

TLS/SSL 接続に使用するセキュリティプロバイダーの名前。デフォルト値は、JVM のデフォルトのセキュリティプロバイダーです。

  • 型: string
  • デフォルト: null
  • 重要度: 中
ldap.ssl.enabled.protocols

TLS/SSL 接続で有効なプロトコルのリストです。

  • 型: リスト
  • デフォルト: TLSv1.2,TLSv1.1,TLSv1
  • 重要度: 中
ldap.ssl.keystore.type

キーストアファイルのファイルフォーマット。クライアントでは省略可能な属性です。

  • 型: string
  • デフォルト: JKS
  • 重要度: 中
ldap.ssl.truststore.type

トラストストアファイルのファイルフォーマット。

  • 型: string
  • デフォルト: JKS
  • 重要度: 中
ldap.ssl.key.password

キーストアファイル内のプライベートキーのパスワード。クライアントでは省略可能な属性です。

  • 型: password
  • デフォルト: null
  • 重要度: 高
ldap.ssl.keystore.location

キーストアファイルの場所。クライアントでは省略可能な属性です。クライアントの相互認証に使用できます。

  • 型: string
  • デフォルト: null
  • 重要度: 高
ldap.ssl.keystore.password

キーストアファイルのストアパスワード。クライアントでは省略可能な属性です。 ssl.keystore.location を構成した場合にのみ必要となります。

  • 型: password
  • デフォルト: null
  • 重要度: 高
ldap.ssl.truststore.location

トラストストアファイルの場所。

  • 型: string
  • デフォルト: null
  • 重要度: 高
ldap.ssl.truststore.password

トラストストアファイルのパスワード。パスワードが設定されていなくてもトラストストアにアクセスできますが、整合性チェックが無効になります。

  • 型: password
  • デフォルト: null
  • 重要度: 高
ldap.ssl.cipher.suites

暗号スイートのリストです。これは、認証、暗号化、MAC、およびキー交換アルゴリズムの名前付き組み合わせで、TLS/SSL ネットワークプロトコルを使用したネットワーク接続のセキュリティ設定をネゴシエートするために使用されます。デフォルトでは、使用可能なすべての暗号スイートがサポートされます。

  • 型: リスト
  • デフォルト: null
  • 重要度: 低
ldap.ssl.keymanager.algorithm

TLS/SSL 接続のキーマネージャーファクトリで使用されるアルゴリズムです。デフォルト値は、Java 仮想マシン用に構成されているキーマネージャーファクトリアルゴリズムです。

  • 型: string
  • デフォルト: SunX509
  • 重要度: 低
ldap.ssl.secure.random.implementation

TLS/SSL 暗号化操作に使用する SecureRandom PRNG 実装。

  • 型: string
  • デフォルト: null
  • 重要度: 低
ldap.ssl.trustmanager.algorithm

TLS/SSL 接続のトラストマネージャーファクトリで使用されるアルゴリズム。デフォルト値は、Java 仮想マシン用に構成されているトラストマネージャーファクトリアルゴリズムです。

  • 型: string
  • デフォルト: PKIX
  • 重要度: 低

LDAP 接続の SASL 構成

ldap.sasl.jaas.config

JAAS の構成ファイルで使用される形式で記述された、SASL 接続の JAAS ログインコンテキストパラメーター。JAAS の構成ファイルの形式は、JAAS ログイン構成ファイルのドキュメント に記載されています。値の形式は、loginModuleClass controlFlag (optionName=optionValue)*; です。

  • 型: password
  • デフォルト: null
  • 重要度: 中
ldap.sasl.login.callback.handler.class

AuthenticateCallbackHandler インターフェイスを実装する SASL ログインコールバックハンドラークラスの完全修飾名です。

  • 型: class
  • デフォルト: null
  • 重要度: 中
ldap.sasl.login.class

Login インターフェイスを実装するクラスの完全修飾名。

  • 型: class
  • デフォルト: null
  • 重要度: 中
ldap.sasl.kerberos.kinit.cmd

Kerberos の kinit コマンドパス。

  • 型: string
  • デフォルト: /usr/bin/kinit
  • 重要度: 低
ldap.sasl.kerberos.min.time.before.relogin

更新試行から次の更新試行までの、ログインスレッドのスリープ時間です。

  • 型: long
  • デフォルト: 60000
  • 重要度: 低
ldap.sasl.kerberos.ticket.renew.jitter

更新時間に追加されたランダムジッターのパーセンテージ。

  • 型: double
  • デフォルト: 0.05
  • 重要度: 低
ldap.sasl.kerberos.ticket.renew.window.factor

最後の更新からチケットの有効期限までの時間が指定のウィンドウ係数に達するまでの間に、ログインスレッドがスリープする時間の長さです。この時間の経過後、チケットの更新が試行されます。

  • 型: double
  • デフォルト: 0.8
  • 重要度: 低