Skip to content

GBAC#1584

Open
paulohtb6 wants to merge 7 commits intov-WIP/26.1from
gbac
Open

GBAC#1584
paulohtb6 wants to merge 7 commits intov-WIP/26.1from
gbac

Conversation

@paulohtb6
Copy link
Contributor

@paulohtb6 paulohtb6 commented Feb 24, 2026

Description

Resolves DOC-1789
Review deadline: March 3rd

Page previews

Checks

  • New feature
  • Content gap
  • Support Follow-up
  • Small fix (typos, links, copyedits, etc)

@paulohtb6 paulohtb6 requested a review from a team as a code owner February 24, 2026 19:23
@netlify
Copy link

netlify bot commented Feb 24, 2026

Deploy Preview for redpanda-docs-preview ready!

Name Link
🔨 Latest commit d421239
🔍 Latest deploy log https://app.netlify.com/projects/redpanda-docs-preview/deploys/69a7426d62d5bb0008a3804f
😎 Deploy Preview https://deploy-preview-1584--redpanda-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 24, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch gbac

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@paulohtb6 paulohtb6 changed the title Gbac GBAC Feb 24, 2026
Copy link
Member

@nguyen-andrew nguyen-andrew left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good so far! Just some minor comments and questions

@@ -0,0 +1,336 @@
// tag::single-source[]

Group-based access control (GBAC) builds on xref:manage:security/authorization/rbac.adoc[role-based access control (RBAC)] to simplify permission management at scale. Instead of assigning roles or ACLs to individual users, you assign them to OIDC groups managed by your identity provider (IdP). Users inherit permissions from all groups reported in their OIDC token claims, so onboarding and offboarding require no changes in Redpanda.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Group-based access control (GBAC) builds on xref:manage:security/authorization/rbac.adoc[role-based access control (RBAC)]

I think we should make a similar adjustment as this other convo.

@@ -0,0 +1,336 @@
// tag::single-source[]

Group-based access control (GBAC) builds on xref:manage:security/authorization/rbac.adoc[role-based access control (RBAC)] to simplify permission management at scale. Instead of assigning roles or ACLs to individual users, you assign them to OIDC groups managed by your identity provider (IdP). Users inherit permissions from all groups reported in their OIDC token claims, so onboarding and offboarding require no changes in Redpanda.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we should mention OIDC earlier in the paragraph (like in the first sentence) so readers immediately understand that GBAC depends on OIDC being configured. I think the OIDC dependency could be easy to miss upfront until the reader reads further down (like the Prerequisites section).


Group as an ACL principal:: Create an ACL with a `Group:<name>` principal. Users in that group receive that permission directly.

Both patterns can be used together. When a user belongs to multiple groups, they inherit the combined permissions of all groups.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the deny-first behavior could be worth mentioning in this section. The authorizer checks deny rules before allow rules across all groups, and if any group matches a deny ACL for a resource, the user is denied (even if another group would've granted allow).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I see it's mentioned in the Limitations section, but I still think it'd be helpful to mention here as well.

--resource-pattern-type prefixed
----

If your groups use path-style names (with `nested_group_behavior: none`), use the full path as the principal name:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a way to add a link to the Customize token claim extraction#nested_group_behavior section below or the nested_group_behavior section in the cluster properties reference? I think that could be helpful.


. Click *Create* (or *Update* if editing an existing role).

NOTE: {ui} assigns ACLs through roles. To grant permissions to a group, create a role for that group, add the group as a principal, and define the ACLs on the role. To create ACLs with a `Group:` principal directly (without creating a role), use `rpk` or the Admin API instead.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To create ACLs with a Group: principal directly (without creating a role), use rpk or the Admin API instead.

The Admin API cannot be used to create ACLs.

Users with more than 200 group memberships in Azure AD receive a URL reference in their token instead of a list of group names. Redpanda does not follow that URL and cannot resolve groups in this case. Mitigation: filter token claims to include only the groups relevant to Redpanda.

Nested groups::
Redpanda does not recursively resolve nested group hierarchies. If group A contains group B, only the direct memberships reported in the token are used. Use `nested_group_behavior: suffix` to extract the last path segment from hierarchical group names when needed.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding a link to Customize token claim extraction#nested_group_behavior or the nested_group_behavior section in the cluster properties reference could be helpful here too, if possible.


xref:reference:properties/cluster-properties.adoc#oidc_group_claim_path[`oidc_group_claim_path`]:: A https://goessner.net/articles/JsonPath/[JSON path^] expression that tells Redpanda where to find group information in the OIDC token. For example, Auth0 and Okta typically use a top-level `groups` claim (`$.groups`), while Keycloak nests roles inside `realm_access` (`$.realm_access.roles`). Default: `$.groups`.

xref:reference:properties/cluster-properties.adoc#nested_group_behavior[`nested_group_behavior`]:: Controls how Redpanda handles group names that use path-style notation (for example, `/departments/eng/platform`). Set to `none` to use the full path as-is, or `suffix` to extract only the last segment. Default: `none`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should warn that suffix can cause unintended collisions when groups share a leaf name (e.g. /departments/eng/groupA and /departments/sales/groupA both collapse to groupA). In that case, ACLs or role assignments for Group:groupA would apply to members of both groups. Maybe we should make a note so users are aware of this behavior when designing their group naming conventions and ACLs.


== About GBAC

Group-based access control (GBAC) is an enterprise feature that extends OIDC authentication to support group-based permissions. Instead of assigning roles or ACLs to individual users, you assign them to OIDC groups. Users inherit permissions from all the groups they belong to, as reported by their identity provider (IdP) through OIDC token claims.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of assigning roles or ACLs to individual users, you assign them to OIDC groups.

More of a nit, but I wonder if "Instead of" could be read as implying GBAC replaces per-user ACLs and roles, when in practice both can be used together. Maybe something like "In addition to assigning roles or ACLs to individual users, you can also assign them to OIDC groups" would make it clear that the two approaches are complementary rather than mutually exclusive.

== Group-based access control (GBAC)

== Iceberg topics with GCP BigLake
Redpanda {page-component-version} introduces xref:manage:security/authorization/gbac.adoc[group-based access control (GBAC)], which extends OIDC authentication to support group-based permissions. Instead of assigning roles or ACLs to individual users, you can assign them to OIDC groups. Users inherit permissions from all groups reported by their identity provider (IdP) in the OIDC token claims.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of assigning roles or ACLs to individual users, you can assign them to OIDC groups.

Same question as the other comment

Copy link
Contributor

@treevon treevon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good. The token extraction section is really nice with clear examples

== Prerequisites

* xref:manage:security/authentication.adoc#oidc[OIDC authentication] must be configured and enabled on your cluster.
* Superuser access to configure cluster properties and manage ACLs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit - this is a prerequisite to enable OIDC, so should appear first

Redpanda evaluates all authorization sources (user ACLs, role ACLs, group ACLs, and group-to-role ACLs) in a single unified flow. Deny rules are checked first across all sources. If any source produces a deny, the request is rejected regardless of allows from other sources. If no deny is found, Redpanda checks for an allow across all sources. If no allow is found, the request is denied by default.

.Authorization evaluation flow
[mermaid]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit - could we get this larger by default and aligned horizontally to take up more of the page space?


== Assign groups to roles

Assigning a group to an RBAC role is the recommended pattern for managing permissions at scale. All users in the group inherit the role's ACLs automatically.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should have a link to RBAC configuration here

--resource-pattern-type prefixed
----

If your groups use path-style names (with xref:reference:properties/cluster-properties.adoc#nested_group_behavior[`nested_group_behavior`] set to `none`), use the full path as the principal name:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should move this to the section on claim extraction

Copy link
Member

@nguyen-andrew nguyen-andrew left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants