There are 2 users (user1 and user2)
Each one has their own dashboards and can only see their own data & dashboard and cannot see the others. (I.e. user1 is to user1 only, etc.)
Would using multi-tenancy and separate index work for this context? and how scalable would this method be?
Since I would be adding in multiple users in the future and have their own data associated with these users only.
Also, for more context:
Doing this on Azure and possibly adding in SSO in the mix as well.
1. There is a documented approach in the wazuh documentation where you can Give a user permissions to read and manage a group of agents.
- Label agents by group using agent.labels.group in agent.conf (e.g., group: Team_A).
- Create an indexer role with document-level security (DLS) that filters on agent.labels.group.
For example, a role for user1 would have a DLS query like {"match": {"agent.labels.group": "Team_A"}}.
This means user1 can only see alerts/events from agents labeled Team_A, even though the underlying index contains everything.
- Create a server API policy scoped to agent:group:Team_A so the user can only manage/view those agents through the API as well.
2. For the dashboard multi-tenancy, this documentation is worth exploring: Enabling Multi-tenancy on Wazuh. Note that Private tenants give each user their own isolated set of dashboards, visualizations, and saved objects out of the box.
3.
Wazuh supports SAML-based SSO, and there is a specific guide for Microsoft Entra ID with Wazuh.
The flow is:
- Configure Entra ID as the SAML Identity Provider.
- Map Entra ID groups to Wazuh backend roles.
- Those backend roles map to the indexer roles (with DLS) and server roles described above.
A user in tenant1 and a user in tenant2 are both querying the same underlying wazuh-alerts-* index. The tenant only controls which saved dashboards and visualizations they see, not which alert documents they can access.
Data isolation is entirely the job of DLS on the indexer role.
To answer, I need to clarify what raw text is, and which you might be referring to.
There are two places where log data exists:
1. On the Wazuh server filesystem (plain text files)
The Wazuh server stores logs as files on disk:
These are plain text/JSON files. DLS does not apply here, they're just files on your Linux filesystem. Anyone with SSH access and file permissions on the server can read them unfiltered. But dashboard users (user1, user2) don't have access to these files. These are only accessible to system administrators with shell access to the server.
2. In the Wazuh indexer
The same data gets forwarded to the indexer, where it's stored as indexed JSON documents in wazuh-alerts-*, wazuh-archives-*, etc. This is where DLS applies. When user1 or user2 opens the dashboard and goes to Discover to browse "raw" alert data, they're querying the indexer and not the raw text file. The indexer enforces the DLS filter before returning results.
You should read the Wazuh end to end architecture to see how data is cascaded from agent -> server -> disk -> Filebeat -> indexer -> dashboard.