Granting the right people the right level of access to your telemetry is just as important as collecting it. Without proper RBAC you risk unauthorised changes or data leakage. Too much lock-down, and teams get frustrated hunting for breadcrumbs in their own logs.
Parseable RBAC model strikes a balance by letting you scope permissions down to each dataset (log stream), so you can tailor access to your org’s needs.
Why RBAC matters in Observability
Security: Sensitive logs (auth events, PCI-scope data) need tighter controls than general-purpose app metrics.
Separation of duties: Devs, SREs, auditors, and third-party contractors all have different needs.
Audit-ability: It’s critical to trace who ran which query, ingested which data, or deleted which stream.
Scalability: As you onboard teams and services, manual access gating becomes a maintenance nightmare.
The state of RBAC in Observability
Observability is multi-billion-dollar market, with players ranging from SaaS giants (DataDog, New Relic, Splunk) to managed solutions (Grafana, Loki, Elastic) to cloud services (AWS CloudWatch, Azure Monitor, GCP Logging).
RBAC however is quite overlooked in several cases. Most of OSS offerings for example don’t have built-in RBAC, instead it is available in Enterprise offerings only.
Here are the common challenges
Coarse-grained roles: Most vendors offer org or team level roles (e.g. “Team A can view dashboards, Team B can write metrics”), but you can’t carve permissions down to individual datasets. That means if you want to lock down a sensitive audit log or PCI stream, you either block access to the entire project or leave everything wide open.
Manual policy creep: As you add services, environments, or micro-teams one-off roles accumulate. Before long, your RBAC matrix is a tangled mess of
customer-svc-reader-v2-prod
vs.customer-svc-reader-v3-staging
roles nobody remembers.Tool-specific models: You’ll end up juggling IAM policies in AWS for logs, Grafana teams for dashboards, Elastic roles for indices and hope they all align perfectly.
Limited audit and automation: Change-requests become help-desk tickets. Every time someone spins up a new stream, you manually update policies, or downshift everyone to a permissive role “for now” and pray they remember to undo it later.
These gaps create real risks, accidental data exposure, friction for teams that need ad-hoc access, and a growing administrative burden that distracts from delivering business value.
Parseable’s access control model
Parseable solves each of these pain points with razor-fine controls and automation. Its per-dataset bindings lock down auth and PCI streams while leaving general metrics open, custom Roles map exactly to Dev, SRE, auditor or contractor needs, every API call is recorded in an immutable “audit-logs” stream, and policy-as-code automations provision new datasets with the right privileges by default, so you scale from 10 to 1,000 streams without extra gatekeeping.
Parseable uses a classic five-entity RBAC scheme, Action, Privilege, Resource, Role, User, but with an extra twist: you can bind roles to individual log streams.
Actions: Every API endpoint in Parseable maps to an Action. Think “query-logs”, “create-dataset”, “delete-dataset”, etc.
Privileges: A Privilege is a named group of Actions. Out of the box you get:
Admin: full access of all Actions
Editor: create/update/delete most Resources
Writer: manage dataset, set retention
Reader: view/apply queries, save filters and dashboards
Ingester: push logs only
You can’t edit these core Privileges, but you can assign them to custom Roles. You can find all the details of the actions possible for each privilege here.
- Resources: In Parseable, a dataset is the Resource is a “dataset”. Example:
Resource “orders-service-prod”
Resource “k8s-audit-logs”
Roles: A Role is a named bundle of {Privileges + Resources}.
Roles are fully dynamic, create as many as you need.
Bind each Role to a set of streams and Privileges.
Assign Roles to multiple Users (and vice-versa).
Users: Users can be humans or machines (service accounts).
Authenticate with username/password (hashed in metadata file).
You can hook into your own SSO/LDAP if you prefer.
Each user picks up all Permissions granted by their Roles.
Scoping permissions per Dataset
By default, a Role applies its Privileges to the Resources you choose. This lets you:
Team isolation: Give the “billing-team” Role
Reader
oninvoices-*
datasets only.Dev sandbox: Grant your “sandbox” Role
Admin
on temp streams (test-*
) without touching prod.Ingestion pipelines: Assign “data-pusher” Role
Ingester
to only the streams pumped by your log pipeline.
Role: “frontend-team”
Privileges: [Reader, Writer]
Resources:
- “frontend-prod-logs”
- “frontend-staging-logs”
"frontend-prod": [
{
"privilege": "reader",
"resource": {
"stream": "frontend-prod-logs",
"tag": null
}
}
],
"admin": [
{
"privilege": "admin"
}
],
"frontend-staging": [
{
"privilege": "writer",
"resource": {
"stream": "frontend-staging-logs",
"tag": null
}
}
]
With this setup, the frontend engineers can both query and ingest into their own streams, but nothing else.
Mapping roles to real world use cases
Persona | Needed Privilege | Dataset Scope |
SRE | Editor | All prod streams |
Backend dev | Reader | Own service streams |
QA / Staging team | Writer + Reader | Staging streams only |
Compliance auditor | Reader | PCI / security logs |
Ingestion service | Ingester | All streams from Firehose |
Best Practices
Start with least privilege: Grant only
Reader
by default and elevate as needed.Use clear naming conventions:
team-service-env
makes it obvious which streams and Roles go together.Review and rotate: Schedule quarterly audits of Roles and assigned Resources.
Leverage automation: Manage Roles via Parseable’s API or Terraform provider to keep infra-as-code.
Audit logs: Parseable tracks every Action, use it to monitor Role usage and detect anomalies.
Recommended blueprint for Parseable setup
Adopt Dataset RBAC: From the start, choose a model that lets you assign privileges on each dataset. Parseable’s model lets you bind Roles to exactly the dataset you care about—no more, no less.
Integrate with SSO / OAuth: Layer on identity-provider attributes (team, project tag, geo) so you can dynamically grant “read” access to all streams tagged
env=staging
for anyone in the DevOps group. Parseable supports OpenID Connect (OIDC) for authentication: point it at your IdP’s discovery URL (e.g.https://your-idp.com/.well-known/openid-configuration
), import your existing groups (team, project tag, geo), then combine those claims with stream tags likeenv=staging
to automatically grantReader
access to everyone in your DevOps group on all staging streams. Read more in the docs.Automated onboarding: Bake role assignment into your service-creation scaffolder. When a new micro service spins up, the CI job automatically creates its dataset, names it
svcX-prod-logs
, and grants the owning team a Writer+Reader Role.Periodic policy reviews: Schedule automated reports that surface stale Roles (no assignment in 90 days) or over-permissive bindings. Treat RBAC like technical debt, pay it down constantly, not in an emergency.
Coming soon to Parseable RBAC
Policy-as-Code: Store your Role definitions, Resource mappings, and Privilege assignments in version-controlled manifests (YAML, Terraform). Every change is peer-reviewed, tested, and audited like application code.
Audit first: Ingest your own access-control events into a locked-down “audit-logs” stream. Bake alerts for suspicious changes (e.g., someone granting Reader on a PCI stream to an external user).
Lease based credentials: Issue short-lived tokens scoped to specific streams. When a contract worker or third-party tool needs temporary access, you avoid long-lived credentials lingering forever.
Hierarchical & Inheritance patterns: Define global Roles (e.g., a “Prod-Admins” Role that applies to all
*-prod
streams) and let service teams carve out narrower Roles. This both reduces duplication and makes intent clear.
Conclusion
RBAC is a foundational pillar for secure, scalable teams. With per dataset permissions, Parseable lets you nail down exactly who can read, write, or manage each stream. Roll out Roles with clear naming, automate their provisioning, and you’ll save time (and headaches) as your telemetry footprint grows. Ready to get started? Check out our RBAC docs and set your first Role today.
Ready to experience the future of observability? Drop us a note at sales@parseable.com to learn more and get started with Parseable 2.0 today!