RBAC Policy Best Practices
Policies control which telemetry streams — Metrics, Events, Logs, Traces, and APM — a team or service account can query. Understanding how Kloudfuse resolves access when multiple policies apply to the same team helps you design a policy structure that is both secure and maintainable.
Stream Access Resolution
Every time a user queries a stream, Kloudfuse evaluates access in a fixed order. The first matching condition determines the result.
USER STREAM QUERY
│
▼
┌──────────────────────────┐ YES
│ User has Admin role? │──────────────────────────► FULL ACCESS
└──────────┬───────────────┘
│ NO
▼
┌──────────────────────────┐ NO Check default_rbac_policy:
│ Any policy assigned to │─────────► • rbac_allow_all → FULL ACCESS
│ this team for stream? │ • rbac_allow_none → NO ACCESS
└──────────┬───────────────┘
│ YES
▼
┌──────────────────────────┐ YES
│ Any policy grants │──────────────────────────► FULL ACCESS
│ "All Access"? │
└──────────┬───────────────┘
│ NO
▼
┌──────────────────────────┐ YES FILTERED ACCESS
│ Any policy grants │─────────► (union of all label filters:
│ "Filtered Access"? │ data matching any filter
└──────────┬───────────────┘ across all policies is returned)
│ NO
▼
NO ACCESS
Admins always have full access to all streams regardless of any policy or default_rbac_policy setting.
Policy Access Types
Each policy defines one of three access levels per stream type.
| Access Type | What it means | Can it be overridden by another policy on the same team? |
|---|---|---|
All Access |
The team can query all data in this stream with no restrictions. |
No — All Access is the highest level. Any single "All Access" policy grants full stream access, regardless of other policies. |
Filtered Access |
The team can only query data that matches specific label key-value pairs (for example, |
Yes — a more permissive policy (All Access) overrides it. A less restrictive policy (No Access) does not override it. |
No Access |
The team cannot query this stream. |
Yes — any other policy granting Filtered or All Access overrides it. |
How Multiple Policies Combine on a Team
When a team has more than one policy assigned, Kloudfuse applies OR (union) logic across all policies for each stream independently. The most permissive result across all policies wins.
Example:
| Policy | Metrics | Logs | Traces |
|---|---|---|---|
Policy A |
All Access |
No Access |
Filtered ( |
Policy B |
No Access |
Filtered ( |
Filtered ( |
Effective access |
Full Access (Any "All" wins) |
Filtered ( |
Filtered ( |
Key rules to remember:
-
All Access in any policy → the team has full access to that stream, even if another policy says No Access.
-
No Access in all policies → the team has no access to that stream.
-
Multiple Filtered policies → data matching any of the filters is returned (OR logic). Adding more filter policies expands access, not restricts it.
The Default RBAC Policy Fallback
Non-Admin users whose teams have no policy assigned for a stream fall through to the default_rbac_policy platform setting:
user-mgmt-service:
config:
default_rbac_policy: rbac_allow_all # or rbac_allow_none
| Setting | Effect on users with no team policy |
|---|---|
|
Full access to all streams. Use in low-security environments or during initial rollout where open access is acceptable. |
|
No access to any stream. Requires explicit policies to be assigned before users can query data. Recommended for production environments with strict data isolation requirements. |
Admin users are unaffected by default_rbac_policy. They always have full access.
|
Recommendations
Start with rbac_allow_none
Set default_rbac_policy: rbac_allow_none and grant access explicitly through policies.
This prevents new users or teams from inadvertently accessing data before a policy is assigned.
Use Filtered Access instead of All Access where possible
All Access cannot be narrowed by adding another policy to the same team. If you later need to restrict a team’s access, you must remove the All Access policy and replace it. Filtered Access policies are easier to adjust incrementally.
Define policies at the stream level
Create separate, single-purpose policies — for example, one policy for production Logs and another for staging Metrics. Combining multiple stream types in a single policy makes it harder to audit and adjust access over time.
Understand that adding a filter policy always expands access
Because Kloudfuse uses union (OR) logic, adding a Filtered policy to a team that already has a Filtered policy will increase what data the team can see, not restrict it. If you need to restrict access further, remove the existing policy and replace it with a more specific one.
Verify effective access before promoting to production
After assigning policies to a team, review Effective Policies in the Team detail interface. The Effective Policies view shows the resolved access level per stream, making it easy to spot unintended combinations before they affect users.
For instructions on reviewing effective policies, see Review Effective Policies.
Apply consistent policies across related streams
APM Services correlates Metrics and Traces data. If a team has different access levels for these two streams, the APM Services interface may not display complete information. Apply the same access level to both Metrics and Traces for teams that use APM.