Skip to content

labs/managed-rbac: how finely Managed ClickStack splits access - #145

Merged
litkhai merged 3 commits into
mainfrom
managed-rbac
Nov 7, 2026
Merged

litkhai merged 3 commits into
mainfrom
managed-rbac

Conversation

@litkhai

@litkhai litkhai commented Nov 7, 2026 •

Copy link
Copy Markdown
Owner

Closes #144

New lab labs/managed-rbac. One shared log table for three games (synthetic), plus each layer that decides what a Managed ClickStack user sees. Run on 2026-11-07 in two rounds:

  • Round 1: ClickHouse Cloud 26.8.1.608, one Admin.
  • Round 2: a trial org on 26.6.1.2455 with an Admin and a test user, side by side. hyperdx-chc 2.43.1, alerts 2.42.0.

Observed:

  • ClickStack roles split screens, not rows. A tag rule hides other dashboards (in the list and by URL), but the allowed source still returns other games' rows.
  • A custom role without Team read leaves the app Unauthorized.
  • Roles with the API's beta row conditions are stored, are not shown in the role editor, and cannot be assigned ("Not allowed to assign a role with privileges exceeding your own").
  • Search and dashboards run as a per-user JWT::… ClickHouse user with no roles, and alerts as one shared user (hdx-alert-internal / hyperdx-alert-internal).
    • A row policy on the SQL console roles has no effect on ClickStack.
    • A policy on one JWT user restricted exactly that user: alpha 7,036 rows vs the Admin's 21,109. On the round 2 service it also covered the console SQL editor.
    • TO ALL EXCEPT … filters search, tiles and alerts.
  • Alerts have one scope for the whole team. The restricted user still saw every alert; when the alert user is left out of a policy, alerts fire on rows the viewer cannot search.
  • Masking: String columns hold, Map keys leak through subcolumn reads, and a lambda breaks every query.

Not run: the objects-id and system ReadOnly roles on the test user, masking in round 2, and whether the JWT hash changes on a new login. Names are masked in the round 2 screens. No web key in lab.yaml (owner's call).

🤖 Generated with Claude Code

litkhai and others added 3 commits November 7, 2026 14:01
One shared log table for three games and every layer that decides what a
Managed ClickStack user sees: ClickStack roles (resource levels, name/tag/ID
rules, the API's beta row conditions), the per-user JWT identity search and
dashboards query with, the one shared identity alerts use, and row and
masking policies on each. Run on ClickHouse Cloud 26.8.1.608 with one Admin
user on 2026-11-07; what a restricted ClickStack role sees is not observed.

Closes #144

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A trial organization (ClickHouse Cloud 26.6.1.2455) with the Admin and a
test user in separate browser profiles. Observed: tag rules hide other
dashboards but not rows; a custom role without Team read leaves the app
Unauthorized; roles with row conditions cannot be assigned ("privileges
exceeding your own"); a row policy on one user's JWT identity restricts
that user in search and the console SQL editor while alerts still show
every game. Personal names masked in the new screens.

Refs #144

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs #144

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@litkhai
litkhai marked this pull request as ready for review November 7, 2026 06:53
@litkhai
litkhai merged commit 1ca82f7 into main Nov 7, 2026
5 checks passed
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.

labs/managed-rbac: how finely Managed ClickStack splits access (per game, user, column)

1 participant