Add reserved dashboards_only_user role (elastic/x-pack-elasticsearch#2250)
* Add reserved dashboards_only_user role * Fix line too long * add tests for new reserved role * rename role, hopefully fix tests * Fix test Original commit: elastic/x-pack-elasticsearch@99f6718c7c
This commit is contained in:
parent
71063825be
commit
1bfa4cb8bb
|
@ -63,6 +63,15 @@ public class ReservedRolesStore {
|
||||||
// reporting_user doesn't have any privileges in Elasticsearch, and Kibana authorizes privileges based on this role
|
// reporting_user doesn't have any privileges in Elasticsearch, and Kibana authorizes privileges based on this role
|
||||||
.put("reporting_user", new RoleDescriptor("reporting_user", null, null,
|
.put("reporting_user", new RoleDescriptor("reporting_user", null, null,
|
||||||
null, MetadataUtils.DEFAULT_RESERVED_METADATA))
|
null, MetadataUtils.DEFAULT_RESERVED_METADATA))
|
||||||
|
.put("kibana_dashboard_only_user", new RoleDescriptor(
|
||||||
|
"kibana_dashboard_only_user",
|
||||||
|
null,
|
||||||
|
new RoleDescriptor.IndicesPrivileges[] {
|
||||||
|
RoleDescriptor.IndicesPrivileges.builder()
|
||||||
|
.indices(".kibana*").privileges("read", "view_index_metadata").build()
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
MetadataUtils.DEFAULT_RESERVED_METADATA))
|
||||||
.put(KibanaUser.ROLE_NAME, new RoleDescriptor(KibanaUser.ROLE_NAME, new String[] { "monitor", MonitoringBulkAction.NAME},
|
.put(KibanaUser.ROLE_NAME, new RoleDescriptor(KibanaUser.ROLE_NAME, new String[] { "monitor", MonitoringBulkAction.NAME},
|
||||||
new RoleDescriptor.IndicesPrivileges[] {
|
new RoleDescriptor.IndicesPrivileges[] {
|
||||||
RoleDescriptor.IndicesPrivileges.builder().indices(".kibana*", ".reporting-*").privileges("all").build(),
|
RoleDescriptor.IndicesPrivileges.builder().indices(".kibana*", ".reporting-*").privileges("all").build(),
|
||||||
|
|
|
@ -122,6 +122,7 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
||||||
assertThat(ReservedRolesStore.isReserved("machine_learning_admin"), is(true));
|
assertThat(ReservedRolesStore.isReserved("machine_learning_admin"), is(true));
|
||||||
assertThat(ReservedRolesStore.isReserved("watcher_user"), is(true));
|
assertThat(ReservedRolesStore.isReserved("watcher_user"), is(true));
|
||||||
assertThat(ReservedRolesStore.isReserved("watcher_admin"), is(true));
|
assertThat(ReservedRolesStore.isReserved("watcher_admin"), is(true));
|
||||||
|
assertThat(ReservedRolesStore.isReserved("kibana_dashboard_only_user"), is(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testIngestAdminRole() {
|
public void testIngestAdminRole() {
|
||||||
|
@ -355,6 +356,36 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
||||||
assertThat(reportingUserRole.indices().allowedIndicesMatcher(BulkAction.NAME).test(index), is(false));
|
assertThat(reportingUserRole.indices().allowedIndicesMatcher(BulkAction.NAME).test(index), is(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testKibanaDashboardOnlyUserRole() {
|
||||||
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("kibana_dashboard_only_user");
|
||||||
|
assertNotNull(roleDescriptor);
|
||||||
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
||||||
|
|
||||||
|
Role dashboardsOnlyUserRole = Role.builder(roleDescriptor, null).build();
|
||||||
|
assertThat(dashboardsOnlyUserRole.cluster().check(ClusterHealthAction.NAME), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.cluster().check(ClusterStateAction.NAME), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.cluster().check(ClusterStatsAction.NAME), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.cluster().check(PutIndexTemplateAction.NAME), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.cluster().check(MonitoringBulkAction.NAME), is(false));
|
||||||
|
|
||||||
|
assertThat(dashboardsOnlyUserRole.runAs().check(randomAlphaOfLengthBetween(1, 12)), is(false));
|
||||||
|
|
||||||
|
final String index = ".kibana";
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher("indices:foo").test(index), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher("indices:bar").test(index), is(false));
|
||||||
|
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher(DeleteAction.NAME).test(index), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher(DeleteIndexAction.NAME).test(index), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher(CreateIndexAction.NAME).test(index), is(false));
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher(UpdateSettingsAction.NAME).test(index), is(false));
|
||||||
|
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher(GetIndexAction.NAME).test(index), is(true));
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher(SearchAction.NAME).test(index), is(true));
|
||||||
|
assertThat(dashboardsOnlyUserRole.indices().allowedIndicesMatcher(MultiSearchAction.NAME).test(index), is(true));
|
||||||
|
}
|
||||||
|
|
||||||
public void testSuperuserRole() {
|
public void testSuperuserRole() {
|
||||||
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("superuser");
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("superuser");
|
||||||
assertNotNull(roleDescriptor);
|
assertNotNull(roleDescriptor);
|
||||||
|
@ -618,7 +649,7 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
||||||
assertThat(logstashAdminRole.indices().allowedIndicesMatcher(IndexAction.NAME).test(".reporting"), is(false));
|
assertThat(logstashAdminRole.indices().allowedIndicesMatcher(IndexAction.NAME).test(".reporting"), is(false));
|
||||||
assertThat(logstashAdminRole.indices().allowedIndicesMatcher(IndexAction.NAME).test(".logstash"), is(true));
|
assertThat(logstashAdminRole.indices().allowedIndicesMatcher(IndexAction.NAME).test(".logstash"), is(true));
|
||||||
assertThat(logstashAdminRole.indices().allowedIndicesMatcher("indices:foo").test(randomAlphaOfLengthBetween(8, 24)),
|
assertThat(logstashAdminRole.indices().allowedIndicesMatcher("indices:foo").test(randomAlphaOfLengthBetween(8, 24)),
|
||||||
is(false));
|
is(false));
|
||||||
|
|
||||||
final String index = ".logstash-" + randomIntBetween(0, 5);
|
final String index = ".logstash-" + randomIntBetween(0, 5);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue