4.10.2.2. Kafka クラスターでの OAuth 2.0 認証設定
Kafka クラスターで OAuth 2.0 認証を使用するには、Kafka server.properties
ファイルで Kafka クラスターのリスナー設定を有効にします。最小設定が必要です。また、TLS が inter-broker 通信に使用される TLS リスナーを設定することもできます。
以下を使用して、承認サーバーによるトークンの検証用にブローカーを設定できます。
- JWKS エンドポイントと署名済み JWT 形式のアクセストークンの組み合わせ
- イントロスペクション エンドポイント
ここで示される最低限の設定は、グローバル リスナー設定を適用します。つまり、ブローカー間の通信はアプリケーションクライアントと同じリスナーを通過します。
特定のリスナーの OAuth 2.0 設定を有効にするには、以下のリスナー設定の例に記載されている sasl.enabled.mechanisms
の代わりに listener.name.LISTENER-NAME.sasl.enabled.mechanisms
を指定します。LISTENER-NAME はリスナーの名前です(大文字小文字の区別なし)。以下の例では、リスナーに CLIENT
という名前を付け、プロパティー名は listener.name.client.sasl.enabled.mechanisms
になります。
JWKS エンドポイントを使用した OAuth 2.0 認証の最小リスナー設定
sasl.enabled.mechanisms=OAUTHBEARER 1 listeners=CLIENT://0.0.0.0:9092 2 listener.security.protocol.map=CLIENT:SASL_PLAINTEXT 3 listener.name.client.sasl.enabled.mechanisms=OAUTHBEARER 4 sasl.mechanism.inter.broker.protocol=OAUTHBEARER 5 inter.broker.listener.name=CLIENT 6 listener.name.client.oauthbearer.sasl.server.callback.handler.class=io.strimzi.kafka.oauth.server.JaasServerOauthValidatorCallbackHandler 7 listener.name.client.oauthbearer.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \ 8 oauth.valid.issuer.uri="https://AUTH-SERVER-ADDRESS" \ 9 oauth.jwks.endpoint.uri="https://AUTH-SERVER-ADDRESS/jwks" \ 10 oauth.username.claim="preferred_username" \ 11 oauth.client.id="kafka-broker" \ 12 oauth.client.secret="kafka-secret" \ 13 oauth.token.endpoint.uri="https://AUTH-SERVER-ADDRESS/token" ; 14 listener.name.client.oauthbearer.sasl.login.callback.handler.class=io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler 15 listener.name.client.oauthbearer.connections.max.reauth.ms=3600000 16
- 1
- SASL でのクレデンシャル交換の SASL メカニズムとして OAUTHBEARER を有効にします。
- 2
- 接続するクライアントアプリケーションのリスナーを設定します。システム
hostname
はアドバタイズされたホスト名として使用されます。これは、再接続するためにクライアントが解決する必要があります。この例では、リスナーの名前はCLIENT
です。 - 3
- リスナーのチャネルプロトコルを指定します。
SASL_SSL
は TLS 用です。暗号化されていない接続 (TLS なし) にはSASL_PLAINTEXT
が使用されますが、TCP 接続層での盗聴のリスクがあります。 - 4
- CLIENT リスナーの SASL として OAUTHBEARER を指定します。クライアント名(
CLIENT
)は通常、listeners プロパティーでは大文字で、listeners
.name プロパティー(listener.name
.client)では小文字で、listener.name
プロパティーの一部として小文字で指定します。.クライアント
.* - 5
- ブローカー間の通信に OAUTHBEARER を SASL として指定します。
- 6
- inter-broker 通信のリスナーを指定します。仕様は、有効な設定のために必要です。
- 7
- クライアントリスナーで OAuth 2.0 認証を設定します。
- 8
- クライアントおよび inter-broker 通信の認証設定を設定します。
oauth.client.id
、oauth.client.secret
、およびauth.token.endpoint.uri
プロパティーは inter-broker 設定に関連するものです。 - 9
- 有効な発行者 URI。この発行者が発行するアクセストークンのみが受け入れられます。例: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME
- 10
- JWKS エンドポイント URL。例: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/certs
- 11
- トークンの実際のユーザー名が含まれるトークン要求 (またはキー)。ユーザー名は、ユーザーの識別に使用される principal です。値は、使用される認証フローと承認サーバーによって異なります。
- 12
- すべてのブローカーで同じ Kafka ブローカーのクライアント ID。これは、
kafka-broker
として承認サーバーに登録されたクライアントです。 - 13
- すべてのブローカーで同じ Kafka ブローカーのシークレット。
- 14
- 承認サーバーへの OAuth 2.0 トークンエンドポイント URL。実稼働環境では、常に HTTPS を使用してください 例: https://AUTH-SERVER-ADDRESS/auth/realms/REALM-NAME/protocol/openid-connect/token
- 15
- inter-broker 通信の OAuth2.0 認証を有効にします (これにのみ必要です)。
- 16
- (任意設定)トークンの有効期限が切れるとセッションの有効期限を強制し、Kafka の再認証メカニズム も有効にします。指定された値がアクセストークンの有効期限が切れるまでの残り時間未満の場合、クライアントは実際にトークンの有効期限が切れる前に再認証する必要があります。デフォルトでは、アクセストークンの期限が切れてもセッションは期限切れにならず、クライアントは再認証を試行しません。
OAuth 2.0 認証の TLS リスナー設定
sasl.enabled.mechanisms= listeners=REPLICATION://kafka:9091,CLIENT://kafka:9092 1 listener.security.protocol.map=REPLICATION:SSL,CLIENT:SASL_PLAINTEXT 2 listener.name.client.sasl.enabled.mechanisms=OAUTHBEARER inter.broker.listener.name=REPLICATION listener.name.replication.ssl.keystore.password=KEYSTORE-PASSWORD 3 listener.name.replication.ssl.truststore.password=TRUSTSTORE-PASSWORD listener.name.replication.ssl.keystore.type=JKS listener.name.replication.ssl.truststore.type=JKS listener.name.replication.ssl.endpoint.identification.algorithm=HTTPS 4 listener.name.replication.ssl.secure.random.implementation=SHA1PRNG 5 listener.name.replication.ssl.keystore.location=PATH-TO-KEYSTORE 6 listener.name.replication.ssl.truststore.location=PATH-TO-TRUSTSTORE 7 listener.name.replication.ssl.client.auth=required 8 listener.name.client.oauthbearer.sasl.server.callback.handler.class=io.strimzi.kafka.oauth.server.JaasServerOauthValidatorCallbackHandler listener.name.client.oauthbearer.sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \ oauth.valid.issuer.uri="https://AUTH-SERVER-ADDRESS" \ oauth.jwks.endpoint.uri="https://AUTH-SERVER-ADDRESS/jwks" \ oauth.username.claim="preferred_username" ; 9
- 1
- inter-broker 通信とクライアントアプリケーションには、個別の設定が必要です。
- 2
- REPLICATION リスナーが TLS を使用し、CLIENT リスナーが暗号化されていないチャネルで SASL を使用するように設定します。実稼働環境では、クライアントは暗号化されたチャンネル (
SASL_SSL
) を使用できます。 - 3
ssl.
プロパティーは TLS 設定を定義します。- 4
- 乱数ジェネレーターの実装。設定されていない場合は、Java プラットフォーム SDK デフォルトが使用されます。
- 5
- ホスト名の検証。空の文字列に設定すると、ホスト名の検証はオフになります。設定されていない場合、デフォルト値は HTTPS で、サーバー証明書のホスト名の検証を強制します。
- 6
- リスナーのキーストアへのパス。
- 7
- リスナーのトラストストアへのパス。
- 8
- (inter-broker 接続に使用される) TLS 接続の確立時に REPLICATION リスナーのクライアントがクライアント証明書で認証する必要があることを指定します。
- 9
- OAuth 2.0 の CLIENT リスナーを設定します。承認サーバーとの接続はセキュアな HTTPS 接続を使用する必要があります。