Schema Registry は Avro/JSON Schema/Protobuf のスキーマ管理を提供しますが、REST 経由の読み書きと Kafka 内部の _schemas トピックの双方を安全化しない限り、改ざん・漏えい・互換性破壊のリスクが残ります。
本稿は、認証(REST)、認可(Subject 単位/RBAC)、Kafka ACL(_schemas)をひとつの導線で理解できるように整理。試験対策(CCDAK/CCAAK)で問われやすい設定キーや挙動も実務目線で補足します。
Schema Registry の攻撃面は、大きく REST 層(クライアント→Schema Registry)と Kafka 層(Schema Registry→_schemas トピック)の2面です。前者は認証方式(mTLS/Basic/OAuth 等)と TLS で保護し、後者は Kafka 側の認証(SASL/SSL など)と ACL で制御します。Confluent Platform を使う場合、Subject 単位の認可に RBAC を適用できます。
脅威としては、盗聴(TLS 未設定)、なりすまし(認証不備)、権限過剰(認可/ACL 不備)、互換性破壊(無権限の削除/上書き)などが典型です。これらは REST と Kafka の両方で防御を組み合わせる必要があります。
Schema Registry のセキュリティ境界
REST 面の第一防御は TLS(HTTPS)です。その上で、クライアント認証は mTLS か Basic(+ 背後の LDAP/ファイルストア)を選ぶのが一般的です。Confluent Cloud では API Key/Secret(HTTP 認証ヘッダ)や OAuth/OIDC を使う構成もあります。
実務では、プロデューサ/コンシューマの SerDe が Schema Registry に直接接続するため、Kafka ブローカー向けのセキュリティ設定と、Schema Registry 向け(schema.registry.* 系)の設定が別物である点で混同が起きがちです。試験でもこの切り分けが頻出です。
クライアント(プロデューサ/コンシューマ)の典型設定例
# Kafka クライアントのプロパティ(Serializer/Deserializer が Schema Registry へ接続)
schema.registry.url=https://sr.example.local:8081
# Basic 認証(TLS 上で使用)。試験頻出キー:
basic.auth.credentials.source=USER_INFO
schema.registry.basic.auth.user.info=appuser:appsecret
# mTLS/サーバ検証。クライアント側トラストストア(自己署名 CA や社内 CA を含む)
schema.registry.ssl.truststore.location=/etc/security/truststore.jks
schema.registry.ssl.truststore.password=changeit
# クライアント証明書を要求される場合(相互 TLS)
schema.registry.ssl.keystore.location=/etc/security/keystore.jks
schema.registry.ssl.keystore.password=changeit
# 注意: これらは Kafka ブローカー接続用の ssl.* / sasl.* とは別物。両方を設定する必要があるケースが多い。Schema Registry では、Subject ごとに READ / WRITE / DELETE などの操作を制御します。Confluent Platform では MDS を用いた RBAC が利用でき、ユーザー/サービスアカウントに対して Subject リソースへの役割を付与します。これにより、本番系のスキーマを特定の CI/CD ロールのみが更新し、閲覧はより広く許可する、といった粒度の制御が可能です。
OSS 版(自己運用)では、内蔵/プラガブルなオーサライザで Subject 単位の制御を行う構成もあります。いずれの場合も、REST 認証で得られたプリンシパルが認可判定に使われ、許可されない操作は 403 Forbidden で拒否されます(401 は未認証)。
| 機構 | 適用範囲 | 強み | 注意点 |
|---|---|---|---|
| Confluent RBAC(MDS) | Subject/Cluster 単位のロール(ResourceOwner 等) | 一元管理・監査しやすい。最小権限をロールで表現可能。 | MDS/役割付与の運用が前提。マルチ環境のロール設計が鍵。 |
| 内蔵/プラガブル・オーサライザ | Subject 単位(所有者モデル/カスタム拡張) | Confluent 以外の環境でも柔軟に実装可能。 | 実装/運用コストが上がりやすい。標準化・監査との整合が課題。 |
| 前段リバースプロキシ(パス制御) | エンドポイント単位(/subjects/* 等) | 単純構成で導入しやすい。 | Subject 粒度の細かい制御が難しく、回避策が必要。 |
Schema Registry 自身は Kafka クライアントとして _schemas トピックへ読み書きします。ブローカー側で認証(SASL/SSL 等)を有効化している場合、Schema Registry のサービスアカウントに最小権限の ACL を付与します。
_schemas はコンパクション対象(cleanup.policy=compact)の内部トピックです。自動作成を無効化している環境では、事前に適切な設定で作成し、Schema Registry のみが読み書きできるようにします。
本番では、Schema Registry の REST アクセスログ、認証/認可ログ、スキーマ変更履歴(誰がいつ何を変更したか)を必ず残します。RBAC を使う場合はロールバインディングの変更監査も重要です。
CI/CD に統合し、スキーマ互換性チェック(バックワード/フォワード/フル)をパイプラインで強制することで、人手更新による破壊的変更を防ぎます。資格試験でも、互換性と権限を運用フローで強制する設計が問われます。
用語と層の切り分け(REST 認証 vs Kafka ACL)を明確に。Serializer の schema.registry.* と Kafka 接続の sasl./ssl. は別系統という点は頻出です。
HTTP ステータスの意味、RBAC の粒度、_schemas の権限最小化など、選択肢のひっかけに注意。
CCDAK / CCAAK
問題 1
本番環境で Schema Registry を安全化したい。プロデューサ/コンシューマは Basic 認証で Schema Registry に接続し、Schema Registry は Kafka ブローカーに対して最小権限で _schemas にアクセスする。適切な設定の組み合わせはどれか?
正解: A
Schema Registry の REST 認証は Kafka ブローカーの認証とは別に設定が必要。Basic 認証では Serializer 側に basic.auth.credentials.source=USER_INFO と schema.registry.basic.auth.user.info を設定するのが定番。Schema Registry が Kafka にアクセスする際は、_schemas への READ/WRITE/DESCRIBE を最小限付与する。B は設定系統が異なるため誤り、C は平文 HTTP で不適切、D は最小権限の原則に反する。
Kafka ブローカーの SASL/SSL を有効化すれば、Schema Registry の REST 認証も不要になりますか?
なりません。REST(クライアント→Schema Registry)と Kafka(Schema Registry→ブローカー)は別層です。両方を個別に保護する必要があります。Serializer が使う schema.registry.* の設定は、Kafka 接続の sasl./ssl. とは独立です。
Confluent Cloud を使う場合、Basic 認証はどう扱いますか?
Confluent Cloud の Schema Registry では API Key/Secret による HTTP 認証が一般的です(クライアント側で basic.auth.credentials.source=USER_INFO と schema.registry.basic.auth.user.info=key:secret を設定)。あわせて HTTPS を必須化します。
SASL_INHERIT はいつ使いますか?
Kafka クライアントの SASL 資格情報を Schema Registry への Basic 認証に継承させたい場合に使います。ただし運用では USER_INFO で明示的に分離する方が、問題切り分けと証跡管理の観点で扱いやすいケースが多いです。
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-...