第12章 KafkaListenerAuthenticationCustom スキーマリファレンス
KafkaListenerAuthenticationCustom スキーマプロパティーの全リスト
リスナーのカスタム認証を設定します。
カスタム認証を設定するには、type プロパティーを custom に設定します。カスタム認証では、Kafka でサポートされているあらゆるタイプの認証が使用できます。
カスタム OAuth 認証の設定例
spec:
kafka:
config:
principal.builder.class: SimplePrincipal.class
listeners:
- name: oauth-bespoke
port: 9093
type: internal
tls: true
authentication:
type: custom
sasl: true
listenerConfig:
oauthbearer.sasl.client.callback.handler.class: client.class
oauthbearer.sasl.server.callback.handler.class: server.class
oauthbearer.sasl.login.callback.handler.class: login.class
oauthbearer.connections.max.reauth.ms: 999999999
sasl.enabled.mechanisms: oauthbearer
oauthbearer.sasl.jaas.config: |
org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required ;
secrets:
- name: example
sasl および tls の値を使用して、リスナーにマップするプロトコルを判別するプロトコルマップが生成されます。
-
SASL = True, TLS = True
SASL_SSL -
SASL = False, TLS = True
SSL -
SASL = True, TLS = False
SASL_PLAINTEXT -
SASL = False, TLS = False
PLAINTEXT
シークレットは、Kafka ブローカーノードのコンテナー内の /opt/kafka/custom-authn-secrets/custom-listener-<listener_name>-<port>/<secret_name> にマウントされます。たとえば、設定例ではマウントされたシークレット (example) は /opt/kafka/custom-authn-secrets/custom-listener-oauth-bespoke-9093/example にあります。
12.1. カスタムプリンシパルビルダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Kafka クラスター設定でカスタムプリンシパルビルダーを設定できます。ただし、プリンシパルビルダーは以下の要件に依存します。
- 指定されたプリンシパルビルダークラスがイメージに存在している。独自に構築する 前 に、すでに存在しているかどうかを確認します。必要なクラスを使用して、Streams for Apache Kafka イメージを再ビルドする必要があります。
-
他のリスナーが
oauthタイプ認証をしていない。これは、OAuth リスナーが独自のプリンシパルビルダーを Kafka 設定に追加するためです。 - 指定したプリンシパルビルダーが、Streams for Apache Kafka と互換性がある。
カスタムプリンシパルビルダーは、認証用のピア証明書をサポートしている必要があります。Streams for Apache Kafka は、Kafka クラスターの管理にピア証明書を使用するためです。
Kafka のデフォルトのプリンシパルビルダークラス は、ピア証明書の名前を基にしたプリンシパルのビルドをサポートします。カスタムプリンシパルビルダーは、SSL ピア証明書の名前を使用して user タイプのプリンシパルを指定する必要があります。
次の例は、Streams for Apache Kafka の OAuth 要件を満たすカスタムプリンシパルビルダーを示しています。
カスタム OAuth 設定のプリンシパルビルダーの例
public final class CustomKafkaPrincipalBuilder implements KafkaPrincipalBuilder {
public KafkaPrincipalBuilder() {}
@Override
public KafkaPrincipal build(AuthenticationContext context) {
if (context instanceof SslAuthenticationContext) {
SSLSession sslSession = ((SslAuthenticationContext) context).session();
try {
return new KafkaPrincipal(
KafkaPrincipal.USER_TYPE, sslSession.getPeerPrincipal().getName());
} catch (SSLPeerUnverifiedException e) {
throw new IllegalArgumentException("Cannot use an unverified peer for authentication", e);
}
}
// Create your own KafkaPrincipal here
...
}
}