LDAP Authorizer の構成

構成の概要

LDAP のグループベースの認可を有効にするには、ブローカー構成(server.properties ファイル内)で authorizer.class.nameio.confluent.kafka.security.ldap.authorizer.LdapAuthorizer に設定する必要があります。

authorizer.class.name=io.confluent.kafka.security.ldap.authorizer.LdapAuthorizer
authorizer.class.name

kafka.security.auth.Authorizer インターフェイスを実装する Apache Kafka® ブローカーオーソライザー実装クラスの完全修飾クラス名。

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

LDAP Authorizer では、以下に示す SimpleAclAuthorizer の構成オプションも処理されます。

super.users

すべてのホスト、すべてのアクションですべてのリソースへのアクセスを許可されているスーパーユーザーまたはスーパーグループのプリンシパルを示すセミコロン区切りのリスト。リソースに ACL が関連付けられていない場合は、スーパーユーザーのみがリソースにアクセスできます。設定方法の例については、「ブローカーの構成」を参照してください。

  • 型: string
  • デフォルト: ""
  • 重要度: 中
allow.everyone.if.no.acl.found

ユーザープリンシパル用またはユーザーが属するグループ用の ACL が見つからない場合に、すべてのユーザーにリソースへのアクセスが許可されるかどうかを示すブール値フラグ。

注釈

本稼働環境では allow.everyone.if.no.acl.found 構成オプションを使用しないことを強くお勧めします。

  • ACL があるという前提でこのオプションを指定し、最後の ACL が削除される場合、実質的にすべてのユーザーに対して Kafka クラスターを開きます。
  • このオプションを使用して ACL を無効にする場合は、次の点に注意してください。ACL が追加されると、以前にアクセス権を持っていたすべてのユーザーがそのアクセス権を失います。
  • 型: boolean
  • デフォルト: false
  • 重要度: 中

注釈

LDAP Authorizer でユーザープリンシパルからグループへのマッピングを LDAP サーバーから取得できるようにするには、LDAP サーバーの設定と一致するようにこれらのオプションを構成します。5.3.0 以降では、LDAP Authorizer を使用する場合にプレフィックス ldap. または ldap.authorizer. を使用できます( ldap.authorizer. は後方互換性のためにサポートされています)。

LDAP コンテキストの構成

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

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

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

注釈

ネスト化された LDAP グループはサポートされていない点にご注意ください。

SSL の LDAP 用構成

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

# 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

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

注釈

Java 8 Update 181 以降では、LDAPS 接続でのホスト名の検証がデフォルトで有効になっています。KAFKA_OPTS=-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true を設定することにより、この検証を無効にできますが、プロダクション環境のシステムではこのオプションの使用を避けてください。Java 8 Update 181 より前のリリースでは、LDAPS 接続でのホスト名の検証がデフォルトで無効になっていました。セキュリティを強化するために、Java 8 181 以降へのアップグレードを検討してください。

GSSAPI の LDAP 用構成

LDAP サーバーで Kerberos が有効になっている場合は、LDAP サーバーで GSSAPI を使用して LDAP Authorizer を認証できます。GSSAPI の JAAS 構成は、構成オプション ldap.sasl.jaas.config を使用して構成できます。認証プロトコルとセキュリティプリンシパルも、プレフィックスとして ldap. または ldap.authorizer. を付けた標準 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 を検索できる場合に限定してください。

Kerberos を使用して LDAP に認証するように Kafka を構成する場合、LDAP クライアント構成のテストと基本的なトラブルシューティングを実行するには、「LDAP クライアント認証のテストとトラブルシューティング」を参照してください。

パスワード資格情報の LDAP 用構成

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

# Specify the LDAP security authentication protocol
ldap.java.naming.security.authentication=SIMPLE
# Identify the principal for the LDAP context
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 検索フィルターでは、正規表現は使用できません。代わりに、LDAP 検索フィルターでは 'substring' 検索がサポートされます(ワイルドカードとは異なり、正規表現でもありません)。これは、Confluent Platform ではなく LDAP サーバー側で実行されます。有効な部分文字列 LDAP 検索フィルターの例は、'(uid=abc*)''(mail=`john@*.com')`)' のようになります。

memberOfdistinguishedName を指定するときは、オブジェクトの完全な DN(識別名)を指定する必要があります。Active Directory の使用中、LDAP 検索フィルターを設定するときに完全な DN を指定する方法の詳細については、『Active Directory: LDAP Syntax Filters』を参照してください。

LDAP Authorizer の構成オプション

Confluent ライセンス

ldap.authorizer.license

Confluent では、各契約者にライセンスキーを発行します。ライセンスキーは、コピーアンドペーストできる短いテキストです。ライセンスキーがなくても、Confluent セキュリティプラグインを 30 日間試用できます。既にご契約されていてライセンスキーをお持ちでない場合は、Confluent サポート(support@confluent.io)にお問い合わせください。

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

LDAP 検索の構成

ldap.refresh.interval.msldap.authorizer.refresh.interval.ms

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

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

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

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

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

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

グループによる LDAP 検索

ldap.group.search.baseldap.authorizer.group.search.base

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ユーザーによる LDAP 検索

ldap.user.search.baseldap.authorizer.user.search.base

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

エラー処理の構成

ldap.retry.backoff.msldap.authorizer.retry.backoff.ms

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

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

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

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

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

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

LDAP 接続の SSL 構成

ldap.ssl.protocolldap.authorizer.ssl.protocol

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

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

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

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

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

  • 型: list
  • デフォルト: TLSv1.2、TLSv1.1、TLSv1
  • 重要度: 中
ldap.ssl.keystore.typeldap.authorizer.ssl.keystore.type

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 型: list
  • デフォルト: null
  • 重要度: 低
ldap.ssl.keymanager.algorithmldap.authorizer.ssl.keymanager.algorithm

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

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

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

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

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

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

LDAP 接続の SASL 構成

ldap.sasl.jaas.configldap.authorizer.sasl.jaas.config

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

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

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

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

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

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

Kerberos の kinit コマンドパス。

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

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

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

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

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

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

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