Skip to content

Commit fcbda70

Browse files
committed
add kibana roles to match Searchguard suggestions
1 parent 7d9a089 commit fcbda70

File tree

9 files changed

+44
-3
lines changed

9 files changed

+44
-3
lines changed

src/main/java/io/fabric8/elasticsearch/plugin/acl/BaseRolesSyncStrategy.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package io.fabric8.elasticsearch.plugin.acl;
1818

19+
import static io.fabric8.elasticsearch.plugin.acl.SearchGuardRoles.USER_KIBANA_PREFIX;
1920
import static io.fabric8.elasticsearch.plugin.acl.SearchGuardRoles.USER_PREFIX;
2021

2122
import java.util.Iterator;
@@ -74,4 +75,8 @@ public static String formatUserRoleName(String username) {
7475
return String.format("%s_%s", USER_PREFIX, OpenshiftRequestContextFactory.getUsernameHash(username));
7576
}
7677

78+
public static String formatUserKibanaRoleName(String username) {
79+
return String.format("%s_%s", USER_KIBANA_PREFIX, OpenshiftRequestContextFactory.getUsernameHash(username));
80+
}
81+
7782
}

src/main/java/io/fabric8/elasticsearch/plugin/acl/RoleBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public RoleBuilder setClusters(String[] clusters) {
5050
return setClusters(Arrays.asList(clusters));
5151
}
5252

53+
public RoleBuilder setClusterActions(String [] clusterActions) {
54+
return setClusters(clusterActions);
55+
}
56+
5357
public RoleBuilder addIndex(String index) {
5458
indices.put(index, new HashMap<String, HashSet<String>>());
5559
return this;

src/main/java/io/fabric8/elasticsearch/plugin/acl/RolesSyncStrategy.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
*/
2323
public interface RolesSyncStrategy {
2424

25+
static final String[] USER_ALL_INDEX_ACTIONS = { "USER_ALL_INDEX_OPS" };
26+
static final String[] USER_KIBANA_ROLE_CLUSTER_ACTIONS = { "USER_KIBANA_CLUSTER_OPERATIONS" };
2527
static final String[] USER_ROLE_CLUSTER_ACTIONS = { "USER_CLUSTER_OPERATIONS" };
2628
static final String[] PROJECT_ROLE_ACTIONS = { "INDEX_PROJECT" };
2729
static final String[] KIBANA_ROLE_ALL_INDEX_ACTIONS = { "INDEX_ANY_KIBANA" };

src/main/java/io/fabric8/elasticsearch/plugin/acl/SearchGuardRoles.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class SearchGuardRoles
4444
public static final String ROLE_PREFIX = "gen";
4545
public static final String PROJECT_PREFIX = ROLE_PREFIX + "_project";
4646
public static final String USER_PREFIX = ROLE_PREFIX + "_user";
47+
public static final String USER_KIBANA_PREFIX = ROLE_PREFIX + "_kibana";
4748

4849
private static final String CLUSTER_HEADER = "cluster";
4950
private static final String INDICES_HEADER = "indices";

src/main/java/io/fabric8/elasticsearch/plugin/acl/UserRolesMappingSyncStrategy.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
* users: [user1, user3]
3232
* gen_user_user2:
3333
* users: [user2]
34+
* gen_kibana_user2:
35+
* users: [user2]
3436
*/
3537
public class UserRolesMappingSyncStrategy extends BaseRolesMappingSyncStrategy {
3638

@@ -49,6 +51,8 @@ protected void syncFromImpl(UserProjectCache cache, RolesMappingBuilder builder)
4951
if (cache.isOperationsUser(username, token)) {
5052
opsUsers.add(username);
5153
} else {
54+
String kibanaRoleName = BaseRolesSyncStrategy.formatUserKibanaRoleName(username);
55+
builder.addUser(kibanaRoleName, username);
5256
String roleName = BaseRolesSyncStrategy.formatUserRoleName(username);
5357
builder.addUser(roleName, username);
5458
}

src/main/java/io/fabric8/elasticsearch/plugin/acl/UserRolesSyncStrategy.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,18 @@ protected void syncFromImpl(UserProjectCache cache, RolesBuilder builder) {
4545
if (cache.isOperationsUser(user, token)) {
4646
foundAnOpsUser = true;
4747
} else {
48-
String roleName = formatUserRoleName(user);
4948

50-
//permissions for kibana Index
5149
String kibIndexName = formatKibanaIndexName(cache, user, token, kibanaIndexMode);
50+
51+
//specific permissions for kibana index
52+
RoleBuilder kibRole = new RoleBuilder(formatUserKibanaRoleName(user))
53+
.setClusterActions(USER_KIBANA_ROLE_CLUSTER_ACTIONS)
54+
.setActions(kibIndexName, ALL, KIBANA_ROLE_INDEX_ACTIONS)
55+
.setActions(ALL, ALL, USER_ALL_INDEX_ACTIONS);
56+
builder.addRole(kibRole.build());
57+
58+
//permissions for kibana Index
59+
String roleName = formatUserRoleName(user);
5260
RoleBuilder role = new RoleBuilder(roleName)
5361
.setClusters(USER_ROLE_CLUSTER_ACTIONS)
5462
.setActions(kibIndexName, ALL, KIBANA_ROLE_INDEX_ACTIONS);

src/main/java/io/fabric8/elasticsearch/plugin/filter/FieldStatsResponseFilter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ public void onResponse(ActionResponse response) {
7171
ElasticsearchException err = new ElasticsearchException("The index returned an empty result. "
7272
+ "You can use the Time Picker to change the time filter or select a higher time interval",
7373
RestStatus.NO_CONTENT);
74-
7574
listener.onFailure(err);
7675
return;
7776
}

src/test/resources/io/fabric8/elasticsearch/plugin/user_role_with_shared_kibana_index_with_unique.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
gen_kibana_4c54bf89fe913f39fc22d76309f80cdc6192928f:
2+
cluster: [USER_KIBANA_CLUSTER_OPERATIONS]
3+
indices:
4+
'*':
5+
'*': [USER_ALL_INDEX_OPS]
6+
?kibana?4c54bf89fe913f39fc22d76309f80cdc6192928f:
7+
'*': [INDEX_KIBANA]
8+
gen_kibana_994a33f6a157ba4a286395f81a4333db1e6cefb6:
9+
cluster: [USER_KIBANA_CLUSTER_OPERATIONS]
10+
indices:
11+
'*':
12+
'*': [USER_ALL_INDEX_OPS]
13+
?kibana?994a33f6a157ba4a286395f81a4333db1e6cefb6:
14+
'*': [INDEX_KIBANA]
115
gen_ocp_kibana_shared:
216
cluster: [CLUSTER_MONITOR_KIBANA]
317
indices:

src/test/resources/io/fabric8/elasticsearch/plugin/user_rolesmapping_shared_ops_kibana_index_with_unique.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
gen_kibana_4c54bf89fe913f39fc22d76309f80cdc6192928f:
2+
users: ['CN=jdoe,OU=DL IT,OU=User Accounts,DC=example,DC=com']
3+
gen_kibana_994a33f6a157ba4a286395f81a4333db1e6cefb6:
4+
15
gen_ocp_kibana_shared:
26
users: [user1, user3]
37
gen_project_operations:

0 commit comments

Comments
 (0)