Kafka は SASL/OAUTHBEARER 機構で OAuth 2.0 / OIDC によるトークンベース認証を扱えます。IdP との統合により資格情報の配布を避け、ローテーションや失効を集中管理できます。
本稿は、Producer/Consumer と Broker 間のトークンフロー、最小限の設定例、トークンの寿命管理、ACL 連携のコツをまとめ、CCAAK 対策として押さえるべき比較観点も提示します。
従来の SASL/PLAIN や SCRAM では、共有シークレットの配布と保護が運用負担になりがちでした。OAuth / OIDC によるトークンベース認証では、IdP 側に認証を集約し、発行・失効・ローテーションを統一管理できます。Kafka は SASL/OAUTHBEARER を通じてこの方式を利用できます。
Kafka クライアントはアクセストークンを取得してブローカーに提示し、ブローカーはトークンを検証してから ACL に基づく認可を実施します。OIDC の標準的な JWT と JWKS による検証はプロバイダ間で安定しており、相互運用性が高いのが利点です。
Kafka クライアントは事前に IdP のトークンエンドポイントへ認証し、アクセストークン(多くは JWT)を取得します。接続時に SASL/OAUTHBEARER でそのトークンを提示します。ブローカーはトークンの署名とクレーム(iss, aud, exp 等)を検証し、合格すれば Kafka ACL に基づいて操作を許可します。
検証方法は主に JWKS(公開鍵セット) によるローカル検証か、トークンイントロスペクションのどちらかです。Kafka の配布やバージョンによりサポート状況や設定キー表記が異なるため、導入時は公式ドキュメントの対象バージョンを必ず確認してください。
Kafka における OAuth / OIDC 認証フロー(概要)
非対話の Kafka クライアントは、Client Credentials フローでアクセストークンを取得するのが定石です。Kafka 標準の OAuthBearerLoginCallbackHandler を使うと、設定のみでトークン取得とリフレッシュを任せられます。
リフレッシュは有効期限の手前で自動実行されます。余裕を持って更新するため、sasl.login.refresh.window.factor などの汎用 SASL リフレッシュ設定も確認してください。
クライアント側の最小構成例(properties)
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginCallbackHandler
# OIDC のトークンエンドポイント(クライアントクレデンシャル)
sasl.oauthbearer.token.endpoint.url=https://idp.example.com/oauth2/token
sasl.oauthbearer.client.id=kafka-producer
sasl.oauthbearer.client.secret=REDACTED
sasl.oauthbearer.scope=kafka.write
# audience を使う IdP の場合
authentication.oauthbearer.audience=kafka-broker
# リフレッシュ挙動(SASL 共通)
sasl.login.refresh.window.factor=0.8
sasl.login.refresh.window.jitter=0.05
sasl.login.refresh.min.period.seconds=60ブローカーは SASL/OAUTHBEARER を有効化し、JWT の検証条件(issuer, audience, JWKS エンドポイントなど)を設定します。配布やバージョンにより設定キーのスコープ(グローバル/リスナ別)や名称が異なるため、導入先の公式ドキュメントで一致を確認してください。
検証に成功すると、ブローカーはトークンのクレームからプリンシパルを組み立て(例: User:<sub>)、そのプリンシパルに対して ACL を評価します。
ブローカー側の例(リスナ別に OIDC/JWKS を指定)
listeners=EXTERNAL://:9093
listener.security.protocol.map=EXTERNAL:SASL_SSL
sasl.enabled.mechanisms=OAUTHBEARER
sasl.server.callback.handler.class=org.apache.kafka.common.security.oauthbearer.OAuthBearerServerCallbackHandler
# リスナ別の OIDC/JWT 検証設定(配布/版によりキー表記は要確認)
listener.name.external.sasl.oauthbearer.jwks.endpoint.url=https://idp.example.com/oauth2/keys
listener.name.external.sasl.oauthbearer.expected.issuer=https://idp.example.com/
listener.name.external.sasl.oauthbearer.expected.audience=kafka-broker
# 認可は ACL で管理。例: kafka-acls.sh で付与(運用環境に合わせて)アクセストークンは短寿命に設計し、自動更新で隙間を作らないのが基本です。Kafka クライアントは期限の手前で更新を試みますが、IdP 側のレート制限や一時障害に配慮してリトライ/バッファを持たせます。
運用では、トークン期限切れ・issuer/audience 不一致・署名検証失敗などの典型的な失敗パターンをメトリクス化します。ブローカー、クライアントのログとメトリクス(認証失敗数、リフレッシュ失敗数)をダッシュボードで常時可視化しましょう。
試験では、どの機構がどの要件に適合するかを問う設問が頻出です。資格情報の配布/保護、ローテーションの容易さ、相互運用性、クライアント更新の仕組みなどを比較観点に据えると整理しやすくなります。
Confluent Cloud と自前の Confluent Platform/Apache Kafka でのサポート差にも注意しましょう。クラウドのデータプレーンは API キーによる SASL/PLAIN が主流で、OIDC は主に管理画面の SSO に使われます。プラットフォーム版では OAUTHBEARER が一般的です。
| 機構 | 資格情報の管理 | ローテーション容易性 | ブローカー側の検証 |
|---|---|---|---|
| SASL/PLAIN(+TLS) | 共有ID/パスワード | 手動・煩雑(配布が必要) | パスワード検証のみ |
| SASL/SCRAM | ハッシュ化されたシークレットをブローカーで管理 | ユーザごとに回せるが配布は必要 | SCRAM チャレンジ/レスポンス |
| SASL/OAUTHBEARER | IdP に集約(クライアントは client_id/secret) | トークン短命化+自動リフレッシュ | JWT 署名/JWKS・iss・aud・exp |
| mTLS | 証明書(キーストア/CA) | CA と失効管理が前提 | 証明書チェーン検証 |
ACL 付与の例(プリンシパルはトークンクレーム由来)
# 例: トークンの sub が "alice" の場合にトピックへの Write を許可
kafka-acls.sh \
--bootstrap-server broker:9093 \
--add --allow-principal User:alice \
--operation Write --topic ordersCCAAK
問題 1
非対話的に稼働する複数の Kafka Producer が、秘密情報の配布を最小化しつつ認証情報のローテーションを自動化したい。最も適切な方式はどれか。
正解: A
非対話バッチには Client Credentials フローが適し、Kafka の OAuthBearer ログインコールバックがアクセストークンの取得と事前リフレッシュを自動化する。SASL/PLAIN は配布/ローテーション負担が大きく、ID トークンは認証用途ではない。Refresh Token の手動運用はリスクが高い。
Kafka ではアクセストークンと ID トークンのどちらを使いますか?
アクセストークンを使用します。ID トークンはユーザ情報表明用で、Kafka の SASL/OAUTHBEARER 認証では一般に受け付けられません。
Confluent Cloud の Kafka データプレーンで OAuth/OIDC 認証は使えますか?
現行ではデータプレーン接続は API キーによる SASL/PLAIN が主流です。OIDC は主に管理画面の SSO で使われます。最新の公式ドキュメントで対象クラスターの対応状況を確認してください。
Refresh Token は Kafka クライアントで必須ですか?
多くのケースでは不要です。非対話クライアントは Client Credentials フローで短命なアクセストークンを取得し、Kafka のログインコールバックが期限前に再取得します。必要に応じて IdP 側のレート制限やキャッシュ戦略を調整してください。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Kafka Topic と Partition の基礎: 分散とスケーラビリティの要
CCDAK 対策と実務の両立を意識し、Topic/Partition/Replica/Consumer Group の役...
CCDAK 試験ガイド:出題範囲・配点・申込み・対策
Confluent Certified Developer for Apache Kafka (CCDAK) の出題範囲...
Confluent Certified Administrator (CCAAK) 対策: 出題範囲・配点の考え方・運用観点の要点
CCAAKに向けて、試験領域の押さえどころを運用目線で整理。プロダクションで通用する設定・監視・セキュリティの実践知を、...
Kafka の Replica と In-Sync Replicas を正しく設計する: 耐障害性と一貫性
レプリカとISRの仕組みを起点に、acks と min.insync.replicas、クリーン/アンクリーンリーダー選...
Kafka の Offset とコミット: ポジション管理と at-least-once の基礎
CCDAK 対策と実務の両立を意識して、Kafka コンシューマのオフセット管理とコミット戦略を整理。at-least-...