Role-based access control (RBAC) helps you control who can see or change data in Elasticsearch. It keeps your data safe by giving different permissions to different users.
Role-based access control in Elasticsearch
Start learning this pattern below
Jump into concepts and practice - no test required
PUT /_security/role/{role_name}
{
"cluster": ["permission1", "permission2"],
"indices": [
{
"names": ["index1", "index2"],
"privileges": ["privilege1", "privilege2"]
}
],
"applications": [
{
"application": "app_name",
"privileges": ["app_privilege"],
"resources": ["resource1"]
}
]
}The cluster field defines permissions for cluster-wide actions like monitoring.
The indices field controls access to specific indexes and what actions are allowed.
PUT /_security/role/read_only
{
"cluster": [],
"indices": [
{
"names": ["logs-*"],
"privileges": ["read"]
}
]
}PUT /_security/role/admin_role
{
"cluster": ["all"],
"indices": [
{
"names": ["*"],
"privileges": ["all"]
}
]
}PUT /_security/role/app_user
{
"cluster": [],
"indices": [
{
"names": ["app-data"],
"privileges": ["read", "write"]
}
],
"applications": [
{
"application": "my_app",
"privileges": ["read_data"],
"resources": ["resource1"]
}
]
}This example creates a role named 'marketing_analyst' that can only read the 'marketing-data' index. Then it creates a user 'jane_doe' with that role. Jane can search the marketing data but cannot change it.
PUT /_security/role/marketing_analyst
{
"cluster": [],
"indices": [
{
"names": ["marketing-data"],
"privileges": ["read"]
}
]
}
PUT /_security/user/jane_doe
{
"password": "securePass123",
"roles": ["marketing_analyst"]
}
GET /marketing-data/_search
{
"query": {
"match_all": {}
}
}Always assign the least permissions needed to keep your data safe.
Roles can be combined by assigning multiple roles to a user.
Test roles with a user to make sure permissions work as expected.
RBAC controls who can do what in Elasticsearch by assigning roles.
Roles define permissions on cluster, indexes, and applications.
Use RBAC to keep your data secure and organized.
Practice
Solution
Step 1: Understand RBAC concept
RBAC is about managing permissions by assigning roles to users.Step 2: Identify RBAC purpose in Elasticsearch
It controls who can do what actions on the cluster or indexes.Final Answer:
To control who can perform specific actions by assigning roles -> Option AQuick Check:
RBAC = Control access by roles [OK]
- Confusing RBAC with data storage or backup
- Thinking RBAC speeds up queries
- Assuming RBAC changes data formats
logs-2024?Solution
Step 1: Check cluster privileges for read access
Read access to an index usually requires cluster privileges like 'monitor', not 'all' or 'read'.Step 2: Verify index privileges
The index privileges must include 'read' for the specified index.Final Answer:
{"cluster": ["monitor"], "indices": [{"names": ["logs-2024"], "privileges": ["read"]}]} -> Option DQuick Check:
Cluster 'monitor' + index 'read' = correct role [OK]
- Using 'all' cluster privilege unnecessarily
- Confusing 'write' with 'read' privileges
- Assigning 'read' cluster privilege which is invalid
sales-data index?
{
"cluster": ["monitor"],
"indices": [
{
"names": ["sales-data"],
"privileges": ["read", "write"]
}
]
}Solution
Step 1: Analyze cluster privileges
Cluster privilege 'monitor' allows monitoring but no write or admin cluster changes.Step 2: Analyze index privileges
Privileges 'read' and 'write' on 'sales-data' index allow reading and writing data there.Final Answer:
User can read and write data in sales-data index -> Option AQuick Check:
Index 'read' + 'write' = read/write access [OK]
- Ignoring 'write' privilege and assuming read-only
- Confusing cluster 'monitor' with admin rights
- Assuming full admin access without 'all' privilege
app-logs index. What is the error?
{
"cluster": ["monitor"],
"indices": [
{
"names": ["app-logs"],
"privileges": ["read"]
}
]
}Solution
Step 1: Check index privileges
The role only grants 'read' privilege on 'app-logs', so writing is not allowed.Step 2: Identify missing privilege
To write, the 'write' privilege must be added to the index privileges.Final Answer:
The index privilege should include 'write' to allow writing -> Option BQuick Check:
Write access needs 'write' privilege [OK]
- Assuming 'monitor' cluster privilege allows writing
- Overlooking missing 'write' privilege on index
- Thinking 'run_as' is required for write permission
prod- but only write to prod-logs. Which role definition is correct?Solution
Step 1: Understand the requirement
User needs read access on all 'prod-*' indexes and write only on 'prod-logs'.Step 2: Check each option
{ "cluster": ["monitor"], "indices": [ {"names": ["prod-*"], "privileges": ["read"]}, {"names": ["prod-logs"], "privileges": ["write"]} ] } correctly assigns 'read' to 'prod-*' and 'write' to 'prod-logs'. { "cluster": ["all"], "indices": [ {"names": ["prod-logs"], "privileges": ["read", "write"]} ] } gives full cluster 'all' which is too broad. { "cluster": ["monitor"], "indices": [ {"names": ["prod-logs"], "privileges": ["read", "write"]}, {"names": ["prod-*"], "privileges": ["read", "write"]} ] } incorrectly grants 'read' and 'write' to all 'prod-*' indexes. { "cluster": ["monitor"], "indices": [ {"names": ["prod-*"], "privileges": ["write"]} ] } wrongly gives 'write' to all 'prod-*' indexes.Final Answer:
{ "cluster": ["monitor"], "indices": [ {"names": ["prod-*"], "privileges": ["read"]}, {"names": ["prod-logs"], "privileges": ["write"]} ] } -> Option CQuick Check:
Read on prod-* + write on prod-logs = correct role [OK]
- Giving write privilege to all prod-* indexes
- Using cluster 'all' unnecessarily
- Mixing up index names and privileges
