RBACは「誰に」「どの範囲で」「何を許可するか」を明示する設計がすべてです。本稿はConfluentの公式ドキュメントに沿った安定概念(スコープ階層と代表ロール)を軸に、CCAAKで問われやすい最小権限設計とスコープ選定の実務パターンをまとめます。
クラウド(Confluent Cloud)とオンプレ/自己管理(Confluent Platform)で細部は異なりますが、スコープ階層とロール割り当ての考え方は共通です。バージョン依存の詳細は公式ドキュメントを併読してください。
ConfluentのRBACは、ユーザーやサービスアカウント(プリンシパル)に対して、特定のスコープ内でロールを結び付ける仕組み(ロールバインディング)です。スコープは一般に、Organization、Environment、各種クラスタ(Kafka、Schema Registry、ksqlDB、Connect)、およびリソース(Topic、Consumer Group、TransactionalId、Subject)という階層で表現されます。
上位スコープでの管理ロールは、そのスコープ配下の対象を包括的に管理できます。一方、開発者ロール(DeveloperRead/Writeなど)は通常、クラスタまたは個別リソースに限定して最小権限で付与します。Confluent Cloudでは組織・環境・各クラスタのIDを明示してロールバインディングを作成します。Confluent PlatformではMDSを介して同等の概念を適用します。
| スコープ | 対象 | 代表的なロール例 |
|---|---|---|
| Organization | 組織全体の管理・監査 | OrganizationAdmin, AuditLogViewer, BillingAdmin |
| Environment | 論理的な環境(dev/stg/prodなど) | EnvironmentAdmin, NetworkAdmin |
| Kafka cluster | ブローカー、トピック、グループ等 | ClusterAdmin, DeveloperRead, DeveloperWrite |
| Schema Registry cluster | スキーマ・サブジェクト | SchemaRegistryAdmin, ResourceOwner, DeveloperWrite |
| Resource | Topic/Group/Subjectなどの個別対象 | ResourceOwner, DeveloperRead/Write |
スコープ階層のイメージ
Organization
└─ Environment (env-xxxxx)
├─ Kafka Cluster (lkc-xxxxx)
│ └─ Resources: Topic/Group/TransactionalId
└─ Schema Registry (lsrc-xxxxx)
└─ Resources: SubjectIDの確認と前提設定(Confluent Cloud CLI例)
confluent login
confluent environment list
confluent environment use env-xxxxx
confluent kafka cluster list
confluent kafka cluster use lkc-xxxxx
confluent sr cluster list
# SR Cluster ID (例: lsrc-xxxxx) を控える運用者ロール(Organization/Environment/Clusterの管理権限)はプラットフォームチームに限定し、アプリケーションには原則としてリソース単位でDeveloperRead/WriteまたはResourceOwnerのみを付与します。SecurityAdmin(または同等のロール)をロール付与の責任者にして、職務分離を徹底します。
プロデューサは出力トピックにDeveloperWrite、コンシューマは入力トピックにDeveloperReadと使用するコンシューマグループに対する必要最小限の権限を与えます。トピック設定やスキーマ運用をアプリ側で行う場合のみResourceOwnerやSchemaRegistryの管理ロールを検討します。
| ロール | 許可の代表例 | 推奨スコープ |
|---|---|---|
| OrganizationAdmin | 組織設定・ユーザー/課金/監査の管理 | Organization |
| EnvironmentAdmin | 環境内のクラスタやネットワークの管理 | Environment |
| ClusterAdmin | トピック管理・ブローカー設定の管理 | Kafka cluster |
| SecurityAdmin | ロールバインディングの作成/削除 | Environment または Organization |
| ResourceOwner | 特定リソースの設定変更・削除を含む所有 | Resource |
| DeveloperWrite | 対象トピックへの書き込み等の開発権限 | Resource または Kafka cluster |
職務分離の最小構成
[Platform]
Org/Env/Cluster Admins
|
| 付与(最小権限)
v
[App Teams]
SA(producer): Topic-X -> DeveloperWrite
SA(consumer): Topic-X -> DeveloperRead; Group-G -> DeveloperRead最小権限でのロールバインディング作成(Cloud例)
# プロデューサ用(orders への書き込み)
confluent iam role-binding create \
--principal User:sa-orders-producer \
--role DeveloperWrite \
--resource Topic:orders \
--kafka-cluster lkc-xxxxx \
--environment env-xxxxx
# コンシューマ用(orders から読み取り、コンシューマグループ cg-orders)
confluent iam role-binding create \
--principal User:sa-orders-consumer \
--role DeveloperRead \
--resource Topic:orders \
--kafka-cluster lkc-xxxxx \
--environment env-xxxxx
confluent iam role-binding create \
--principal User:sa-orders-consumer \
--role DeveloperRead \
--resource Group:cg-orders \
--kafka-cluster lkc-xxxxx \
--environment env-xxxxxKafkaの典型リソースはTopic、Consumer Group、TransactionalIdです。トピック作成・削除・設定変更は原則として運用側(ClusterAdminやResourceOwner)に限定し、アプリ側は既存トピックへの読み書き(DeveloperRead/Write)に留めます。TransactionalIdはトランザクション機能を使うプロデューサに対して、必要時のみ付与します。
Schema Registryではクラスター単位の管理(SchemaRegistryAdmin)と、Subject単位の所有(ResourceOwner)や更新権限(DeveloperWrite)を分けます。アプリがスキーマ更新を行う場合は対象Subjectに限定した権限を付与します。
| リソース種別 | 推奨ロール | 補足 |
|---|---|---|
| Topic: teamX.orders | ResourceOwner(チーム所有) | 設定変更やライフサイクル管理が必要な場合のみ |
| Topic: teamX.orders-in | DeveloperRead(消費側) | 入力ストリームに対する読み取りのみ |
| Topic: teamX.orders-out | DeveloperWrite(生成側) | 出力ストリームへの書き込みのみ |
| Group: cg-teamX-orders | DeveloperRead(消費側) | グループ操作に必要な最小権限 |
| Subject: teamX.orders-value | DeveloperWrite または ResourceOwner | アプリがスキーマ更新を行う場合に付与 |
Kafka/SRリソース単位の割り当て
Kafka Cluster (lkc-xxxxx)
├─ Topic: teamX.orders-in -> SA(consumer): DeveloperRead
├─ Topic: teamX.orders-out -> SA(producer): DeveloperWrite
└─ Group: cg-teamX-orders -> SA(consumer): DeveloperRead
Schema Registry (lsrc-xxxxx)
└─ Subject: teamX.orders-value -> SA(producer): DeveloperWriteSchema RegistryのSubject権限付与(Cloud例)
# スキーマ更新を行うプロデューサにSubject更新権限を付与
confluent iam role-binding create \
--principal User:sa-orders-producer \
--role DeveloperWrite \
--resource Subject:teamX.orders-value \
--schema-registry-cluster lsrc-xxxxx \
--environment env-xxxxxマルチ環境では、Environmentをdev/stg/prodで分離し、各環境にKafka/SRを配置します。サービスアカウントは環境ごとに分けると権限の見通しが良くなります(同一SAを複数環境で使うと、権限の拡散と監査の複雑化を招きやすい)。
トピックやSubjectの命名にチーム/ドメイン接頭辞を用いて所有境界を明確化し、ResourceOwnerの配布範囲を制限します。命名規約は運用ルールとして文書化し、ロールバインディングの標準テンプレート化(GitOps)と組み合わせると管理が安定します。
| 設計パターン | 長所 | 注意点 |
|---|---|---|
| SAをアプリ×環境で分割 | 最小権限・監査容易 | SA数が増えるため自動化前提 |
| SAを組織全体で共有 | 数を抑制できる | 権限拡散・調査困難になりやすい |
| 共有Kafkaクラスタ(環境内で単一) | 運用集約・コスト最適化 | 強い命名規約と権限境界が必要 |
| ドメイン別クラスタ分離 | 故障/容量/リスクの閉じ込め | クラスタ数増による運用負荷 |
環境とクラスタの対応
Organization
├─ Env: dev
│ ├─ Kafka: lkc-dev
│ └─ SR: lsrc-dev
└─ Env: prod
├─ Kafka: lkc-prod
└─ SR: lsrc-prod同一アプリを複数クラスタに最小権限で割り当て(Cloud例)
# dev環境
confluent iam role-binding create \
--principal User:sa-orders-producer-dev \
--role DeveloperWrite \
--resource Topic:teamX.orders \
--kafka-cluster lkc-dev \
--environment env-dev
# prod環境
confluent iam role-binding create \
--principal User:sa-orders-producer-prod \
--role DeveloperWrite \
--resource Topic:teamX.orders \
--kafka-cluster lkc-prod \
--environment env-prod監査では、誰にどのロールをいつ付与/剥奪したか、環境・クラスタ・リソースのスコープを含めて追跡します。Confluent Cloudでは監査ログ機能を利用し、定期的にロールバインディング一覧をエクスポートして棚卸しします。
Confluent Platformからの移行や従来ACLからの段階的移行では、RBACとACLの管理境界を明確にし、対象プリンシパルをRBACに切り替えたら直接ACLを更新しない運用ルールに統一します。トラブル時はまずスコープ不一致(env/cluster/subject/名前の綴り)を疑います。
| 症状 | 原因候補 | 確認ポイント |
|---|---|---|
| 認証OKだが書き込み失敗 | DeveloperWriteが対象トピックに未付与 | env/cluster/Topic名の一致、バインディング有無 |
| スキーマ登録で403/権限不足 | SR側のSubject権限不足 | lsrc-の指定、Subject名、ロール種別 |
| 特定環境のみ失敗 | Environmentスコープの指定漏れ | env-の指定、環境切替ミスの有無 |
| グループ操作ができない | Groupリソースの権限不足 | Groupに対するDeveloperReadの有無 |
認可の流れ(高レベル)
Client -> AuthN (IDP/Keys)
-> RBAC Authorizer (MDS/Cloud IAM)
-> Resource check (Scope + Role)
-> Allow / Deny棚卸しと確認(Cloud CLI例)
# バインディング一覧(環境/クラスタで絞り込み)
confluent iam role-binding list --environment env-xxxxx --kafka-cluster lkc-xxxxx
confluent iam role-binding list --environment env-xxxxx --schema-registry-cluster lsrc-xxxxx
# 単体検証(例: 簡易プロデュース/コンシューム)
confluent kafka topic produce orders --value "test" --environment env-xxxxx --cluster lkc-xxxxx
confluent kafka topic consume orders --from-beginning --environment env-xxxxx --cluster lkc-xxxxx出題の多くは「どのスコープで、どのロールを、どのプリンシパルに割り当てるか」を正しく選べるかに集約されます。EnvironmentAdminとClusterAdmin、ResourceOwnerとDeveloperWrite/Readの違いと適用範囲を素早く判断できるようにしておきます。
KafkaとSchema Registryはスコープが別である点、SubjectはSRのリソースである点、コンシューマ動作にはTopicとGroupの双方が関与する点を押さえてください。
| 出題トピック | キーワード | 直前確認ポイント |
|---|---|---|
| スコープ階層 | Org > Env > Cluster > Resource | どの操作がどの階層かを即答できるか |
| 運用ロール | EnvironmentAdmin, ClusterAdmin, SecurityAdmin | 付与範囲と職務分離の違いを説明できるか |
| 開発ロール | DeveloperRead/Write, ResourceOwner | 読み/書き/所有の差分を具体例で言えるか |
| SR固有 | Subject, SchemaRegistryAdmin | KafkaとSRのスコープが別であることを前提に選べるか |
記憶のフック(階層と責務)
Org -> Env -> Cluster(Kafka/SR) -> Resource(Topic/Group/Subject)
Admin roles: 上位で管理
Dev roles: リソースで最小権限直前チートシート(Cloud例)
# Kafka: 書き込み
confluent iam role-binding create --principal User:sa --role DeveloperWrite --resource Topic:orders --kafka-cluster lkc --environment env
# SR: スキーマ更新
confluent iam role-binding create --principal User:sa --role DeveloperWrite --resource Subject:orders-value --schema-registry-cluster lsrc --environment env
# Group: 消費
confluent iam role-binding create --principal User:sa --role DeveloperRead --resource Group:cg-orders --kafka-cluster lkc --environment envCCAAK
問題 1
同一Environment内にKafkaクラスタ lkc-12345 と Schema Registry lsrc-67890 がある。サービスアカウント sa-order-producer は orders トピックに書き込み、orders-value サブジェクトのスキーマを更新する必要がある。最小権限で適切なロールとスコープの組み合わせはどれか。
正解: A
要件はトピックへの書き込みと特定Subjectの更新のみであり、最小権限はKafkaのTopicに対するDeveloperWrite、SRのSubjectに対するDeveloperWriteです。Bは過剰権限、Cは権限不足、Dはスコープが不適切です。
RBACと従来のKafka ACLはどう違うのか。
RBACはロール(役割)をスコープ内でプリンシパルに割り当てる抽象化です。Confluent CloudではRBACを中心に管理し、Confluent PlatformではRBACが実効的な許可に反映されます。運用方針として、RBACで管理する主体には直接ACLを編集しないよう管理境界を定めるのが安全です。
ResourceOwnerとDeveloperWriteの違いは。
DeveloperWriteは主に既存トピックへの書き込み(および必要な参照)に限定されます。ResourceOwnerは対象リソースのライフサイクル管理(設定変更や削除を含む)まで権限が広がるため、所有チームなどに限定的に付与します。
環境をまたいで同じ権限を与えたい場合はどうするか。
RBACはスコープごとにロールバインディングを作成します。複数Environment/Clusterで同一の最小権限を再現する場合でも、それぞれのenv/cluster/リソースを明示して個別にバインディングを作成します。自動化(スクリプトやGitOps)での一括適用を推奨します。
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-...