Skip to content

Best tools for Kafka role-based access control (RBAC)

Comparisons
Chad Harris·September 22, 2026·14 min read

Apache Kafka has no role-based access control. Its standard authorizer checks every request against ACLs, allow or deny rules written per principal, so roles have to come from a layer added on top: a replacement broker authorizer, a proxy, or a management UI.

That leaves eleven realistic options, from staying on native ACLs through Apache Ranger, OPA, Strimzi with Keycloak, Klaw and Confluent’s RBAC, to the UI-layer RBAC in Kpow, Kafbat UI, AKHQ, Conduktor and Lenses. Kpow is Factor House’s product, and I work at Factor House as a Solutions Architect, so it is scored on the same rubric and the same sources as every other option. The page sits inside the complete Kafka guide and the Kafka stream governance topic.

Does Apache Kafka support RBAC?

No. The Apache Kafka authorization documentation describes a pluggable framework set with authorizer.class.name, and a default implementation that stores ACLs in the cluster metadata log. On a KRaft cluster that is:

authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer

Each ACL takes the form “Principal P is Allowed or Denied Operation O from Host H on any Resource R matching ResourcePattern RP”. There is no role object and no group object in that model. A resource with no matching ACL is closed to everyone except the principals listed in super.users, unless you set allow.everyone.if.no.acl.found=true. Clusters still on ZooKeeper run the older AclAuthorizer with the same rule format. The full syntax, with copy-paste kafka-acls.sh commands, is on our Kafka ACL page.

Two Apache features stop ACLs from growing one rule per topic. KIP-290 added prefixed resource patterns, so one ACL can cover every topic that starts with payments-. And the principal a connection authenticates as can be reshaped with ssl.principal.mapping.rules or a custom principal.builder.class. Neither turns a directory group into a set of permissions. To get that you either keep writing ACLs per principal, or you replace or wrap the authorizer.

The enterprise distributions take the second route. Confluent’s documentation (“Use role-based access control (RBAC) for authorization in Confluent Platform”) describes predefined roles bound to users and groups from LDAP or an OIDC provider, stored in a Metadata Service (MDS) that runs on Confluent Server brokers, with the Confluent Server Authorizer evaluating both role bindings and ACLs. Apache Ranger, OPA and Strimzi’s Keycloak authorizer do the same job on open-source Kafka by plugging into authorizer.class.name.

If you are still deciding whether roles are worth the migration at all, RBAC for Kafka: implementation and considerations walks through the ACL-versus-role trade-off with a working lab.

How to score a Kafka RBAC tool

Six criteria, in the order they tend to decide the choice. Most of them come from questions Factor House engineers have had to answer for customers.

1. Enforcement layer. The first question is where the rule is evaluated, because that decides who it binds. A broker authorizer binds every client. A proxy binds every client routed through the proxy. A UI binds the people using that UI and nobody else. Tom Crowley, our founding engineer, put the split precisely when a team asked whether Kpow’s RBAC and Kafka ACLs could run together: “Kpow does not use Kafka ACLs to authorize a user’s request, instead we use our RBAC permissions to authorize requests.” In his summary, RBAC is “assigned to a user through their roles, determining how they are authorized when making requests to Kpow”, while ACLs are “assigned to Kpow’s AdminClient connection, determining how Kpow is authorized when making Kafka AdminClient calls.” Every UI tool on this page works that way, and the table says so row by row.

2. Resource coverage beyond topics. Kafka ACLs govern Kafka protocol resources. They say nothing about who can restart a connector through the Connect REST API, which the Apache Kafka Connect guide warns “is unsecured and allows anyone that can access it to start and stop connectors” by default. Tom made the same point about Kpow’s policies, which “work across all resources configured (ksql, connect, schema etc) - unlike Kafka’s ACLs.” The pattern shows up in real requirements. Derek Troy-West, our co-founder and CEO, relayed one customer’s list that included stopping teams from reaching other teams’ connectors, with permissions keyed to their LDAP. Score each tool on whether its roles reach Connect, Schema Registry and ksqlDB, or stop at topics and groups.

3. Identity source. Roles only reduce work if they come from the directory you already run. Check which identity providers each tool reads group or role claims from (LDAP, SAML, OIDC), and whether the mapping is configuration or code. The Kafka SSO tools comparison scores the sign-in half of this on its own.

4. Change control and audit. An auditor asks who changed what, and when. Tom described the usual state of production access in 2021: the jumpbox “generally has full access to the Kafka cluster, and there is no audit log recording the actions being committed.” Score each tool on whether it records user actions somewhere you can query, and whether a risky action can require approval rather than being all-or-nothing. The Kafka audit logging tools and destructive operations tools comparisons go deeper on each.

5. Topology fit. Some teams answer an access problem by splitting clusters along team or data-domain lines. In the Q&A of our Kafka operational issues talk I argued against that: “governance domains change all the time”, so a cluster-per-domain topology ends up with clusters that no longer match the organisation, and “you probably want to look at better governance and audit controls” instead. A tool scores well here if it lets several teams share one cluster safely, with scoped visibility and not just scoped permissions.

6. Distribution dependence. Some RBAC layers only work on one vendor’s brokers. That matters if you run MSK in one region and self-managed Kafka in another, or expect to change provider. Score each tool on whether it works against any Apache Kafka-compatible cluster.

F1 Broker authorization or UI RBAC kafka-rbac-tools
Broker-level authorization UI or control-plane RBAC
Who it binds Every client that connects to the cluster: producers, consumers, Connect workers, admin tools, scripts Only the people who work through that tool
Where the rule lives In the broker's authorizer: Kafka ACLs in cluster metadata, or an external policy store behind a replacement authorizer In the tool's own configuration, mapped to roles from your identity provider
What it can express Kafka protocol operations such as Read, Write, Create and Alter on topics, groups and the cluster Tool actions such as inspecting data, resetting offsets or editing a connector, including resources outside the broker
What bypasses it Super users and anything not routed through the broker Anyone holding credentials that let them reach the cluster directly
The two layers answer different questions, and a production cluster usually needs both.

The options

Grouped by the layer they enforce at, which is the grouping that matters most.

  • Broker level, every client bound: native Kafka ACLs, Confluent RBAC, Apache Ranger, the OPA authorizer plugin, and Strimzi with the Keycloak authorizer.
  • Proxy level, every client routed through it bound: Conduktor Gateway in its Gateway-managed mode.
  • Request workflow on top of broker ACLs: Klaw, which grants roles for requesting and approving changes and then writes ordinary Kafka ACLs.
  • UI and control-plane level, only tool users bound: Kpow, Kafbat UI, AKHQ, Conduktor Console and Lenses.

Kafka RBAC tools compared

Same six fields for every option, taken from each tool’s own documentation or source code.

Tool Enforcement layer Who it binds Resources covered Identity source Change control and audit Source
Native Kafka ACLs Broker, through StandardAuthorizer Every client that authenticates to the cluster Topics, groups, cluster, transactional IDs and delegation tokens. Not Connect REST, Schema Registry or ksqlDB The authenticated principal only. No groups or roles No approval step. Changes are made with kafka-acls.sh or the Admin API Apache Kafka docs
Confluent RBAC Broker, through the Confluent Server Authorizer and MDS Every client of an MDS-managed Confluent Platform cluster Kafka plus Connect, ksqlDB, Schema Registry and Flink across the Confluent Platform Users and groups from LDAP or an OIDC provider Role bindings held centrally in MDS Confluent documentation, RBAC overview
Apache Ranger Broker, through RangerKafkaAuthorizer Every client of the cluster Kafka resources, managed as Ranger policies Users, groups and roles managed in Ranger Central policy administration and access auditing in Ranger Ranger Kafka plugin source
OPA authorizer plugin Broker, through OpaAuthorizer calling an OPA instance on each broker Every client of the cluster Any Kafka operation you write Rego policy for Whatever your policy reads from the principal and request Policy lives in code, so review happens in version control opa-kafka-plugin
Strimzi with Keycloak Broker, through KeycloakAuthorizer Every client of the Strimzi cluster Kafka resources mapped to Keycloak Authorization Services Permissions from Keycloak Authorization Services, identities from OAuth 2.0 tokens Permissions administered in Keycloak Strimzi docs
Klaw Workflow layer that writes Kafka ACLs Clients, once approved ACLs land on the broker Topics, ACLs, Avro schemas and connectors, as requests Klaw users and teams Every topic, ACL, schema and connector change goes through a request and approval Klaw on GitHub
Kpow UI and API, through Kpow’s RBAC People using Kpow Clusters, topics, groups, brokers, Connect, Schema Registry and ksqlDB Roles from SAML, OpenID or LDAP Allow, Deny or Stage per action, every action in an audit log Kpow RBAC docs
Kafbat UI UI, enforced in its backend People using Kafbat UI Cluster config, topics, consumers, schemas, Connect, connectors, KSQL and ACLs OAuth, Google, GitHub, Cognito, LDAP and Active Directory subjects Optional audit to a Kafka topic or console. No approval step Kafbat UI RBAC docs
AKHQ UI and API, through groups and roles People using AKHQ Topics, topic data, groups, Connect, schemas, nodes, ACLs and ksqlDB Basic auth, LDAP, OIDC, GitHub or header auth, mapped to groups Opt-in audit events to a Kafka topic. No approval step AKHQ groups docs
Conduktor Console RBAC for UI users, plus optional Gateway ACLs at the proxy Console users, and clients that connect through Gateway Topics, groups, subjects, connectors and cluster ACL and broker settings Users and groups Permissions per user or group across clusters Conduktor documentation, Kafka RBAC and Gateway authentication pages
Lenses UI and API, through Lenses IAM People and service accounts using Lenses Actions on Lenses-managed resources, scoped by policy Groups that carry roles. Roles cannot be assigned to individuals Allow or deny effects per policy Lenses documentation, Security page

Each option in detail

Every entry has the same four parts: what it is, where it enforces, the strongest case for it, and where it falls short.

Rank 1

47 out of 60 Total

Listed first because it is our product. Scores are unadjusted.

Layer
UI and API, Kpow RBAC
Edition
RBAC in Enterprise, not Community
Deployment
Self-hosted only
Enforcement layer
4 out of 10
Resource coverage
9 out of 10
Identity source
8 out of 10
Change and audit
9 out of 10
Topology fit
9 out of 10
Works on any Kafka
8 out of 10

What it is. Factor House’s Kafka management UI and API, with RBAC, multi-tenancy and audit logging in the Enterprise edition.

Where it enforces. In Kpow. A user’s roles decide what they can do through Kpow, and Kpow reaches the cluster with its own connection, which needs the minimum Kafka ACLs if the cluster has ACLs enabled.

Strongest case. The widest resource coverage of the UI tools, with policies over clusters, Schema Registry, Connect and ksqlDB in one taxonomy. A Stage effect turns a risky action into a request an admin approves, and tenants restrict which resources a role can see at all. Every action lands in the audit log. It also gives you a management interface for the broker-level layer, with ACL create, clone and delete recorded in the same log.

Where it falls short. Its RBAC governs actions taken through Kpow. A developer who also holds cluster credentials is bound by Kafka ACLs, not by Kpow. It is self-hosted only, and RBAC is not in the Community edition.

Rank 2

38 out of 60 Total

Layer
UI, enforced in its backend
Type
Open-source Kafka UI
Enforcement layer
4 out of 10
Resource coverage
8 out of 10
Identity source
8 out of 10
Change and audit
5 out of 10
Topology fit
5 out of 10
Works on any Kafka
8 out of 10

What it is. An open-source Kafka web UI.

Where it enforces. In Kafbat UI’s backend, through its access control service, for people using the UI.

Strongest case. Free, broad resource coverage, including ACLs and KSQL, and regex subjects that can match a whole family of IdP roles in one rule.

Where it falls short. UI users only, like every tool in this group. Audit is optional and writes to a topic or the console, and there is no approval workflow.

Rank 3

37 out of 60 Total

Layer
Workflow that writes Kafka ACLs
Type
Self-service portal
Enforcement layer
6 out of 10
Resource coverage
6 out of 10
Identity source
3 out of 10
Change and audit
8 out of 10
Topology fit
6 out of 10
Works on any Kafka
8 out of 10

What it is. An open-source self-service portal for topics, ACLs, schemas and connectors. Its README describes it as automating those changes “by introducing roles/authorizations to users of various teams of an organization.”

Where it enforces. Klaw’s roles govern who may request and approve a change. What reaches the broker is an ordinary Kafka ACL written through the Admin client, so enforcement stays with the broker authorizer.

Strongest case. It fixes the process problem that makes ACLs painful, who asked for this access and who approved it, without replacing the authorizer.

Where it falls short. It does not add roles to the broker. A client’s access is still exactly the ACLs Klaw wrote, and Klaw is not an operations console for inspecting data or resetting offsets.

Rank 4

AKHQ

akhq.io

37 out of 60 Total

Layer
UI and API, groups and roles
Caveat
UI-only if the JWT secret is unset
Enforcement layer
3 out of 10
Resource coverage
8 out of 10
Identity source
8 out of 10
Change and audit
5 out of 10
Topology fit
5 out of 10
Works on any Kafka
8 out of 10

What it is. An open-source Kafka UI with a group and role model rewritten in version 0.25.0.

Where it enforces. In AKHQ’s UI and API, with one caveat from its own documentation: if the JWT signature secret is not set, “the API will not enforce the group role, and the restriction is in the UI only.”

Strongest case. Free, GitOps-friendly YAML configuration, and roles that combine resource types with regex patterns on names and clusters.

Where it falls short. Misconfigure the secret and the restriction becomes cosmetic. Audit is opt-in, and there is no approval step.

Rank 5

Confluent RBAC

confluent.io

36 out of 60 Total

Layer
Broker, Confluent Server Authorizer and MDS
Requires
Confluent Server brokers and MDS
Enforcement layer
8 out of 10
Resource coverage
10 out of 10
Identity source
9 out of 10
Change and audit
3 out of 10
Topology fit
5 out of 10
Works on any Kafka
1 out of 10

What it is. Confluent’s role-based authorization for Confluent Platform. Confluent Cloud documents its own RBAC for its managed clusters.

Where it enforces. At the broker. Confluent’s documentation says every Kafka broker in the MDS-managed cluster must be configured to use that MDS instance, and that RBAC “serves as an additional authorization enforcement layer on top of ACLs”.

Strongest case. It is the only option here that puts predefined roles directly into the broker and extends the same bindings to Connect, ksqlDB, Schema Registry and Flink. If your whole topology is Confluent Platform, it covers the most ground of any option on this page.

Where it falls short. It needs Confluent Server brokers and MDS, so it does not carry over to MSK, self-managed Apache Kafka or another provider’s clusters.

Rank 6

Apache Ranger

ranger.apache.org

35 out of 60 Total

Layer
Broker, RangerKafkaAuthorizer
Policies
Managed in Ranger, not kafka-acls.sh
Enforcement layer
8 out of 10
Resource coverage
2 out of 10
Identity source
7 out of 10
Change and audit
7 out of 10
Topology fit
5 out of 10
Works on any Kafka
6 out of 10

What it is. The Apache project for centralized security administration across the Hadoop ecosystem, with a Kafka plugin.

Where it enforces. In the broker. RangerKafkaAuthorizer implements Kafka’s Authorizer interface. Its createAcls, deleteAcls and acls methods throw “not supported by Ranger for Kafka”, so policies are managed in Ranger rather than with kafka-acls.sh.

Strongest case. One policy store and one audit trail if you already run Ranger for HDFS, Hive or other data platforms. The Ranger project page lists role-based and attribute-based access control among its goals.

Where it falls short. Because the ACL APIs are unsupported, any tool that lists or edits ACLs, including Kpow’s ACL screens, cannot manage access on a Ranger-authorized cluster. You also take on running Ranger itself.

Rank 7

OPA authorizer plugin

github.com/StyraInc/opa-kafka-plugin

32 out of 60 Total

Layer
Broker, OpaAuthorizer
Requires
Kafka 3.8.0 or later
If OPA is down
Requests fail closed by default
Enforcement layer
8 out of 10
Resource coverage
2 out of 10
Identity source
5 out of 10
Change and audit
5 out of 10
Topology fit
6 out of 10
Works on any Kafka
6 out of 10

What it is. An open-source authorizer that sends each Kafka authorization decision to an Open Policy Agent instance running on the broker host.

Where it enforces. In the broker, set with authorizer.class.name=org.openpolicyagent.kafka.OpaAuthorizer. The README lists Kafka 3.8.0 or later, a decision cache, and opa.authorizer.allow.on.error defaulting to false, which means requests fail closed if OPA is unreachable.

Strongest case. Complete freedom. Roles, team ownership, naming conventions or time windows are whatever your Rego policy says, reviewed like any other code.

Where it falls short. You write and test the policy language yourself, and OPA becomes part of every broker’s request path.

Rank 8

Conduktor

conduktor.io

32 out of 60 Total

Layer
Console UI, plus Gateway proxy
Type
Commercial
Enforcement layer
6 out of 10
Resource coverage
7 out of 10
Identity source
5 out of 10
Change and audit
3 out of 10
Topology fit
4 out of 10
Works on any Kafka
7 out of 10

What it is. A commercial platform with two products that matter here, Console, a web UI, and Gateway, a Kafka protocol proxy.

Where it enforces. Console RBAC applies to Console users, per user or group, across topics, consumer groups, subjects, connectors and cluster settings. Gateway, in its Gateway-managed mode, handles authentication and ACLs at the proxy for clients that connect through it, according to Conduktor’s Gateway authentication page.

Strongest case. The only commercial option on this page that offers both a UI layer and a proxy layer from one vendor, so client traffic can be governed without touching broker configuration.

Where it falls short. Proxy enforcement only covers traffic routed through Gateway, and Conduktor’s RBAC page notes that a user in several groups inherits the most permissive grant.

Rank 9

Strimzi with the Keycloak authorizer

strimzi.io

29 out of 60 Total

Layer
Broker, KeycloakAuthorizer
Requires
Strimzi on Kubernetes, OAuth-capable clients
Enforcement layer
8 out of 10
Resource coverage
2 out of 10
Identity source
8 out of 10
Change and audit
3 out of 10
Topology fit
5 out of 10
Works on any Kafka
3 out of 10

What it is. Strimzi’s OAuth 2.0 support for Kafka on Kubernetes, with an authorizer that reads permissions from Keycloak Authorization Services.

Where it enforces. In the broker. The Strimzi deployment guide configures authorization.type: custom with authorizerClass: io.strimzi.kafka.oauth.server.authorizer.KeycloakAuthorizer, and a strimzi.authorization.delegate.to.kafka.acl setting controls whether failed authorization checks are passed on to Kafka’s built-in ACL authorizer. The same guide notes that the older oauth and keycloak authentication types are deprecated in favour of the custom type.

Strongest case. Role and group management in Keycloak, which many platform teams already run, enforced at the broker for every client. The OAuth library is open source in strimzi-kafka-oauth.

Where it falls short. It assumes Strimzi on Kubernetes and OAuth-capable clients, and Keycloak permission modelling is its own skill to learn.

Rank 10

Lenses

lenses.io

29 out of 60 Total

Layer
UI and API, Lenses IAM
Roles
Assigned to groups only
Type
Commercial
Enforcement layer
4 out of 10
Resource coverage
5 out of 10
Identity source
6 out of 10
Change and audit
3 out of 10
Topology fit
5 out of 10
Works on any Kafka
6 out of 10

What it is. A commercial Kafka platform with a built-in IAM model.

Where it enforces. In Lenses, for users and service accounts. Its Security page says permissions come from roles attached to groups, and that roles cannot be assigned directly to an individual account.

Strongest case. Group-only assignment forces the discipline roles are meant to bring, and service accounts sit in the same model as people.

Where it falls short. UI-layer enforcement, so it binds Lenses users only.

Rank 11

Native Kafka ACLs

kafka.apache.org

25 out of 60 Total

Layer
Broker, StandardAuthorizer
Managed with
kafka-acls.sh or the Admin API
Enforcement layer
8 out of 10
Resource coverage
2 out of 10
Identity source
1 out of 10
Change and audit
1 out of 10
Topology fit
5 out of 10
Works on any Kafka
8 out of 10

What it is. The authorizer that ships with Apache Kafka, managed with kafka-acls.sh or the Admin API.

Where it enforces. In the broker, for every request from every client. On KRaft, admin requests forwarded from a broker are authorized on the active controller with the original client principal, per the Apache docs.

Strongest case. Nothing to install, and it binds everything, including the service accounts of every other tool on this page. Every production cluster needs it whatever else you add.

Where it falls short. Rules attach to principals, not roles, so onboarding a person or a service means writing rules. Prefixed patterns help with topic sprawl, but not with people sprawl.

Which layer to choose

Scored against the six criteria, no single tool wins, because the first criterion splits the field in two.

For enforcement over every client, the broker layer is the only option. Confluent RBAC scores highest on resource coverage and identity if you are all-in on Confluent Platform, and lowest on distribution dependence. Strimzi with Keycloak is the strongest open-source choice on Kubernetes. Ranger fits if Ranger is already your policy store, though it leaves ACL-editing tools unable to manage access on that cluster. OPA suits teams that want policy as code and can own it. Klaw adds the approval process that native ACLs lack without changing the authorizer. If you stay on ACLs, the Kafka ACL management tools comparison scores the ways to keep them under control.

For people, the UI layer is where roles save the most time, because humans are the principals that change most often. Kpow scores highest on resource coverage and change control, with the Stage effect and tenant-scoped views, and like the open-source UIs it runs against MSK, Confluent, Aiven or self-managed clusters alike. Conduktor is the one to beat if you also want a proxy that governs client traffic, a layer Kpow does not have. The two free options, Kafbat UI and AKHQ, handle the basics with weaker audit and no approvals.

The usual end state for a regulated team is two layers: broker ACLs, often managed through one of the tools above, for every service account, and UI RBAC for the humans who debug production.

How Factor House approaches Kafka RBAC

Kpow’s RBAC is a YAML file set with RBAC_CONFIGURATION_FILE. Each policy names a resource, an effect and a list of actions, for a role that comes from your identity provider. The Kpow RBAC documentation has the full model. Three rules shape how it behaves:

  • Where no policy matches, the effect is an implicit deny.
  • Where policies conflict on one resource, Deny takes precedence.
  • Stage makes the action a request that an admin confirms, covered in the staged mutations docs.

Resources follow a taxonomy such as ["cluster", "*", "topic", "tx-*"], with glob wildcards anywhere in the name, so one policy can cover every dead letter topic ending in -dlq. Multi-tenancy sits in the same file and answers a different question, what a role can see. A tenant presents a consistent view of only its topics, groups, connectors and subjects, which is what lets several teams share one cluster without splitting it by governance domain. Our Kafka multi-tenancy page shows the two working together, and the data governance docs cover the audit log that records every user action.

Kpow’s RBAC governs what people do through Kpow. It does not replace Kafka ACLs for your applications, and Tom’s rule still holds: roles authorize the user’s request to Kpow, and ACLs authorize Kpow’s connection to Kafka. Pair it with broker ACLs, or one of the broker-level authorizers above, for every client that is not a person in a browser. For the temporary-access case, where someone needs production data for an hour during an incident, temporary policies grant a time-boxed permission instead of a standing one.

If you are designing the roles themselves, RBAC roles covers role definitions and resource patterns across the ecosystem, and multi-tenant architecture covers quotas, naming and isolation for shared clusters.

Kpow live demo

Try role-based access in a Kafka UI

Explore Kpow in a live environment and judge the everyday workflows that role-based access and staged approvals would govern.

For platform and security teams who have to show who can do what.

Try the Kpow demo

FAQ

Does Apache Kafka support RBAC natively?

No. Open-source Apache Kafka authorizes with ACLs, per-principal allow and deny rules evaluated by the StandardAuthorizer on KRaft clusters. Roles come from a replacement authorizer such as Ranger, OPA or Strimzi’s Keycloak authorizer, from Confluent’s commercial RBAC, or from a management UI.

Does Kpow RBAC replace Kafka ACLs?

No. Kpow’s RBAC decides what a user can do through Kpow, and Kafka ACLs decide what Kpow’s own connection, and every other client, can do on the cluster. Run both.

Can Kafka ACLs use LDAP or Active Directory groups?

Not with the standard authorizer, which matches ACLs against the authenticated principal. Group-based rules need an authorizer that understands groups, such as Confluent’s RBAC with LDAP, Ranger with synced groups, or Keycloak roles through Strimzi.

What is the difference between RBAC in a Kafka UI and RBAC at the broker?

Broker RBAC binds every client that connects to the cluster. UI RBAC binds only the people using that UI, and does nothing about someone who reaches the cluster with their own credentials.

Related reading