|
@@ -35,6 +35,7 @@ import org.elasticsearch.cluster.metadata.MetaData;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.common.util.set.Sets;
|
|
|
import org.elasticsearch.test.ESTestCase;
|
|
|
+import org.elasticsearch.transport.TransportRequest;
|
|
|
import org.elasticsearch.xpack.core.ml.MlMetaIndex;
|
|
|
import org.elasticsearch.xpack.core.ml.action.CloseJobAction;
|
|
|
import org.elasticsearch.xpack.core.ml.action.DeleteDatafeedAction;
|
|
@@ -75,6 +76,12 @@ import org.elasticsearch.xpack.core.ml.job.persistence.AnomalyDetectorsIndex;
|
|
|
import org.elasticsearch.xpack.core.ml.job.persistence.AnomalyDetectorsIndexFields;
|
|
|
import org.elasticsearch.xpack.core.ml.notifications.AuditorField;
|
|
|
import org.elasticsearch.xpack.core.monitoring.action.MonitoringBulkAction;
|
|
|
+import org.elasticsearch.xpack.core.security.action.privilege.DeletePrivilegesAction;
|
|
|
+import org.elasticsearch.xpack.core.security.action.privilege.DeletePrivilegesRequest;
|
|
|
+import org.elasticsearch.xpack.core.security.action.privilege.GetPrivilegesAction;
|
|
|
+import org.elasticsearch.xpack.core.security.action.privilege.GetPrivilegesRequest;
|
|
|
+import org.elasticsearch.xpack.core.security.action.privilege.PutPrivilegesAction;
|
|
|
+import org.elasticsearch.xpack.core.security.action.privilege.PutPrivilegesRequest;
|
|
|
import org.elasticsearch.xpack.core.security.action.role.PutRoleAction;
|
|
|
import org.elasticsearch.xpack.core.security.action.saml.SamlAuthenticateAction;
|
|
|
import org.elasticsearch.xpack.core.security.action.saml.SamlPrepareAuthenticationAction;
|
|
@@ -85,6 +92,8 @@ import org.elasticsearch.xpack.core.security.authz.RoleDescriptor;
|
|
|
import org.elasticsearch.xpack.core.security.authz.accesscontrol.IndicesAccessControl.IndexAccessControl;
|
|
|
import org.elasticsearch.xpack.core.security.authz.permission.FieldPermissionsCache;
|
|
|
import org.elasticsearch.xpack.core.security.authz.permission.Role;
|
|
|
+import org.elasticsearch.xpack.core.security.authz.privilege.ApplicationPrivilege;
|
|
|
+import org.elasticsearch.xpack.core.security.authz.privilege.ApplicationPrivilegeDescriptor;
|
|
|
import org.elasticsearch.xpack.core.security.user.BeatsSystemUser;
|
|
|
import org.elasticsearch.xpack.core.security.user.LogstashSystemUser;
|
|
|
import org.elasticsearch.xpack.core.security.user.SystemUser;
|
|
@@ -104,10 +113,12 @@ import org.joda.time.DateTime;
|
|
|
import org.joda.time.DateTimeZone;
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import static org.hamcrest.Matchers.hasEntry;
|
|
|
import static org.hamcrest.Matchers.is;
|
|
|
+import static org.mockito.Mockito.mock;
|
|
|
|
|
|
/**
|
|
|
* Unit tests for the {@link ReservedRolesStore}
|
|
@@ -139,21 +150,23 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testIngestAdminRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("ingest_admin");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role ingestAdminRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(ingestAdminRole.cluster().check(PutIndexTemplateAction.NAME), is(true));
|
|
|
- assertThat(ingestAdminRole.cluster().check(GetIndexTemplatesAction.NAME), is(true));
|
|
|
- assertThat(ingestAdminRole.cluster().check(DeleteIndexTemplateAction.NAME), is(true));
|
|
|
- assertThat(ingestAdminRole.cluster().check(PutPipelineAction.NAME), is(true));
|
|
|
- assertThat(ingestAdminRole.cluster().check(GetPipelineAction.NAME), is(true));
|
|
|
- assertThat(ingestAdminRole.cluster().check(DeletePipelineAction.NAME), is(true));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(PutIndexTemplateAction.NAME, request), is(true));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(GetIndexTemplatesAction.NAME, request), is(true));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(DeleteIndexTemplateAction.NAME, request), is(true));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(PutPipelineAction.NAME, request), is(true));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(GetPipelineAction.NAME, request), is(true));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(DeletePipelineAction.NAME, request), is(true));
|
|
|
|
|
|
- assertThat(ingestAdminRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(ingestAdminRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(ingestAdminRole.cluster().check(MonitoringBulkAction.NAME), is(false));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(ingestAdminRole.cluster().check(MonitoringBulkAction.NAME, request), is(false));
|
|
|
|
|
|
assertThat(ingestAdminRole.indices().allowedIndicesMatcher(IndexAction.NAME).test("foo"), is(false));
|
|
|
assertThat(ingestAdminRole.indices().allowedIndicesMatcher("indices:foo").test(randomAlphaOfLengthBetween(8, 24)),
|
|
@@ -163,25 +176,49 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testKibanaSystemRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("kibana_system");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role kibanaRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(kibanaRole.cluster().check(ClusterHealthAction.NAME), is(true));
|
|
|
- assertThat(kibanaRole.cluster().check(ClusterStateAction.NAME), is(true));
|
|
|
- assertThat(kibanaRole.cluster().check(ClusterStatsAction.NAME), is(true));
|
|
|
- assertThat(kibanaRole.cluster().check(PutIndexTemplateAction.NAME), is(true));
|
|
|
- assertThat(kibanaRole.cluster().check(GetIndexTemplatesAction.NAME), is(true));
|
|
|
- assertThat(kibanaRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(kibanaRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(kibanaRole.cluster().check(MonitoringBulkAction.NAME), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(ClusterHealthAction.NAME, request), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(ClusterStateAction.NAME, request), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(ClusterStatsAction.NAME, request), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(PutIndexTemplateAction.NAME, request), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(GetIndexTemplatesAction.NAME, request), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(kibanaRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(kibanaRole.cluster().check(MonitoringBulkAction.NAME, request), is(true));
|
|
|
|
|
|
// SAML
|
|
|
- assertThat(kibanaRole.cluster().check(SamlPrepareAuthenticationAction.NAME), is(true));
|
|
|
- assertThat(kibanaRole.cluster().check(SamlAuthenticateAction.NAME), is(true));
|
|
|
- assertThat(kibanaRole.cluster().check(InvalidateTokenAction.NAME), is(true));
|
|
|
- assertThat(kibanaRole.cluster().check(CreateTokenAction.NAME), is(false));
|
|
|
+ assertThat(kibanaRole.cluster().check(SamlPrepareAuthenticationAction.NAME, request), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(SamlAuthenticateAction.NAME, request), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(InvalidateTokenAction.NAME, request), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(CreateTokenAction.NAME, request), is(false));
|
|
|
+
|
|
|
+ // Application Privileges
|
|
|
+ DeletePrivilegesRequest deleteKibanaPrivileges = new DeletePrivilegesRequest("kibana-.kibana", new String[]{ "all", "read" });
|
|
|
+ DeletePrivilegesRequest deleteLogstashPrivileges = new DeletePrivilegesRequest("logstash", new String[]{ "all", "read" });
|
|
|
+ assertThat(kibanaRole.cluster().check(DeletePrivilegesAction.NAME, deleteKibanaPrivileges), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(DeletePrivilegesAction.NAME, deleteLogstashPrivileges), is(false));
|
|
|
+
|
|
|
+ GetPrivilegesRequest getKibanaPrivileges = new GetPrivilegesRequest();
|
|
|
+ getKibanaPrivileges.application("kibana-.kibana-sales");
|
|
|
+ GetPrivilegesRequest getApmPrivileges = new GetPrivilegesRequest();
|
|
|
+ getApmPrivileges.application("apm");
|
|
|
+ assertThat(kibanaRole.cluster().check(GetPrivilegesAction.NAME, getKibanaPrivileges), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(GetPrivilegesAction.NAME, getApmPrivileges), is(false));
|
|
|
+
|
|
|
+ PutPrivilegesRequest putKibanaPrivileges = new PutPrivilegesRequest();
|
|
|
+ putKibanaPrivileges.setPrivileges(Collections.singletonList(new ApplicationPrivilegeDescriptor(
|
|
|
+ "kibana-.kibana-" + randomAlphaOfLengthBetween(2,6), "all", Collections.emptySet(), Collections.emptyMap())));
|
|
|
+ PutPrivilegesRequest putSwiftypePrivileges = new PutPrivilegesRequest();
|
|
|
+ putSwiftypePrivileges.setPrivileges(Collections.singletonList(new ApplicationPrivilegeDescriptor(
|
|
|
+ "swiftype-kibana" , "all", Collections.emptySet(), Collections.emptyMap())));
|
|
|
+ assertThat(kibanaRole.cluster().check(PutPrivilegesAction.NAME, putKibanaPrivileges), is(true));
|
|
|
+ assertThat(kibanaRole.cluster().check(PutPrivilegesAction.NAME, putSwiftypePrivileges), is(false));
|
|
|
|
|
|
// Everything else
|
|
|
assertThat(kibanaRole.runAs().check(randomAlphaOfLengthBetween(1, 12)), is(false));
|
|
@@ -238,18 +275,20 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testKibanaUserRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("kibana_user");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role kibanaUserRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(kibanaUserRole.cluster().check(ClusterHealthAction.NAME), is(false));
|
|
|
- assertThat(kibanaUserRole.cluster().check(ClusterStateAction.NAME), is(false));
|
|
|
- assertThat(kibanaUserRole.cluster().check(ClusterStatsAction.NAME), is(false));
|
|
|
- assertThat(kibanaUserRole.cluster().check(PutIndexTemplateAction.NAME), is(false));
|
|
|
- assertThat(kibanaUserRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(kibanaUserRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(kibanaUserRole.cluster().check(MonitoringBulkAction.NAME), is(false));
|
|
|
+ assertThat(kibanaUserRole.cluster().check(ClusterHealthAction.NAME, request), is(false));
|
|
|
+ assertThat(kibanaUserRole.cluster().check(ClusterStateAction.NAME, request), is(false));
|
|
|
+ assertThat(kibanaUserRole.cluster().check(ClusterStatsAction.NAME, request), is(false));
|
|
|
+ assertThat(kibanaUserRole.cluster().check(PutIndexTemplateAction.NAME, request), is(false));
|
|
|
+ assertThat(kibanaUserRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(kibanaUserRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(kibanaUserRole.cluster().check(MonitoringBulkAction.NAME, request), is(false));
|
|
|
|
|
|
assertThat(kibanaUserRole.runAs().check(randomAlphaOfLengthBetween(1, 12)), is(false));
|
|
|
|
|
@@ -271,22 +310,35 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
assertThat(kibanaUserRole.indices().allowedIndicesMatcher(MultiSearchAction.NAME).test(index), is(true));
|
|
|
assertThat(kibanaUserRole.indices().allowedIndicesMatcher(UpdateSettingsAction.NAME).test(index), is(true));
|
|
|
});
|
|
|
+
|
|
|
+ final String randomApplication = "kibana-" + randomAlphaOfLengthBetween(8, 24);
|
|
|
+ assertThat(kibanaUserRole.application().grants(new ApplicationPrivilege(randomApplication, "app-random", "all"), "*"), is(false));
|
|
|
+
|
|
|
+ final String application = "kibana-.kibana";
|
|
|
+ assertThat(kibanaUserRole.application().grants(new ApplicationPrivilege(application, "app-foo", "foo"), "*"), is(false));
|
|
|
+ assertThat(kibanaUserRole.application().grants(new ApplicationPrivilege(application, "app-all", "all"), "*"), is(true));
|
|
|
+
|
|
|
+ final String applicationWithRandomIndex = "kibana-.kibana_" + randomAlphaOfLengthBetween(8, 24);
|
|
|
+ assertThat(kibanaUserRole.application().grants(new ApplicationPrivilege(applicationWithRandomIndex, "app-random-index", "all"),
|
|
|
+ "*"), is(false));
|
|
|
}
|
|
|
|
|
|
public void testMonitoringUserRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("monitoring_user");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role monitoringUserRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(monitoringUserRole.cluster().check(MainAction.NAME), is(true));
|
|
|
- assertThat(monitoringUserRole.cluster().check(ClusterHealthAction.NAME), is(false));
|
|
|
- assertThat(monitoringUserRole.cluster().check(ClusterStateAction.NAME), is(false));
|
|
|
- assertThat(monitoringUserRole.cluster().check(ClusterStatsAction.NAME), is(false));
|
|
|
- assertThat(monitoringUserRole.cluster().check(PutIndexTemplateAction.NAME), is(false));
|
|
|
- assertThat(monitoringUserRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(monitoringUserRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(monitoringUserRole.cluster().check(MonitoringBulkAction.NAME), is(false));
|
|
|
+ assertThat(monitoringUserRole.cluster().check(MainAction.NAME, request), is(true));
|
|
|
+ assertThat(monitoringUserRole.cluster().check(ClusterHealthAction.NAME, request), is(false));
|
|
|
+ assertThat(monitoringUserRole.cluster().check(ClusterStateAction.NAME, request), is(false));
|
|
|
+ assertThat(monitoringUserRole.cluster().check(ClusterStatsAction.NAME, request), is(false));
|
|
|
+ assertThat(monitoringUserRole.cluster().check(PutIndexTemplateAction.NAME, request), is(false));
|
|
|
+ assertThat(monitoringUserRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(monitoringUserRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(monitoringUserRole.cluster().check(MonitoringBulkAction.NAME, request), is(false));
|
|
|
|
|
|
assertThat(monitoringUserRole.runAs().check(randomAlphaOfLengthBetween(1, 12)), is(false));
|
|
|
|
|
@@ -313,27 +365,29 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testRemoteMonitoringAgentRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("remote_monitoring_agent");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role remoteMonitoringAgentRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(ClusterHealthAction.NAME), is(true));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(ClusterStateAction.NAME), is(true));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(ClusterStatsAction.NAME), is(true));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(PutIndexTemplateAction.NAME), is(true));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(MonitoringBulkAction.NAME), is(false));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(GetWatchAction.NAME), is(true));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(PutWatchAction.NAME), is(true));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(DeleteWatchAction.NAME), is(true));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(ExecuteWatchAction.NAME), is(false));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(AckWatchAction.NAME), is(false));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(ActivateWatchAction.NAME), is(false));
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(WatcherServiceAction.NAME), is(false));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(ClusterHealthAction.NAME, request), is(true));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(ClusterStateAction.NAME, request), is(true));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(ClusterStatsAction.NAME, request), is(true));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(PutIndexTemplateAction.NAME, request), is(true));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(MonitoringBulkAction.NAME, request), is(false));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(GetWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(PutWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(DeleteWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(ExecuteWatchAction.NAME, request), is(false));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(AckWatchAction.NAME, request), is(false));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(ActivateWatchAction.NAME, request), is(false));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(WatcherServiceAction.NAME, request), is(false));
|
|
|
// we get this from the cluster:monitor privilege
|
|
|
- assertThat(remoteMonitoringAgentRole.cluster().check(WatcherStatsAction.NAME), is(true));
|
|
|
+ assertThat(remoteMonitoringAgentRole.cluster().check(WatcherStatsAction.NAME, request), is(true));
|
|
|
|
|
|
assertThat(remoteMonitoringAgentRole.runAs().check(randomAlphaOfLengthBetween(1, 12)), is(false));
|
|
|
|
|
@@ -357,18 +411,20 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testReportingUserRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("reporting_user");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role reportingUserRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(reportingUserRole.cluster().check(ClusterHealthAction.NAME), is(false));
|
|
|
- assertThat(reportingUserRole.cluster().check(ClusterStateAction.NAME), is(false));
|
|
|
- assertThat(reportingUserRole.cluster().check(ClusterStatsAction.NAME), is(false));
|
|
|
- assertThat(reportingUserRole.cluster().check(PutIndexTemplateAction.NAME), is(false));
|
|
|
- assertThat(reportingUserRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(reportingUserRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(reportingUserRole.cluster().check(MonitoringBulkAction.NAME), is(false));
|
|
|
+ assertThat(reportingUserRole.cluster().check(ClusterHealthAction.NAME, request), is(false));
|
|
|
+ assertThat(reportingUserRole.cluster().check(ClusterStateAction.NAME, request), is(false));
|
|
|
+ assertThat(reportingUserRole.cluster().check(ClusterStatsAction.NAME, request), is(false));
|
|
|
+ assertThat(reportingUserRole.cluster().check(PutIndexTemplateAction.NAME, request), is(false));
|
|
|
+ assertThat(reportingUserRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(reportingUserRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(reportingUserRole.cluster().check(MonitoringBulkAction.NAME, request), is(false));
|
|
|
|
|
|
assertThat(reportingUserRole.runAs().check(randomAlphaOfLengthBetween(1, 12)), is(false));
|
|
|
|
|
@@ -393,18 +449,20 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testKibanaDashboardOnlyUserRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
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.cluster().check(ClusterHealthAction.NAME, request), is(false));
|
|
|
+ assertThat(dashboardsOnlyUserRole.cluster().check(ClusterStateAction.NAME, request), is(false));
|
|
|
+ assertThat(dashboardsOnlyUserRole.cluster().check(ClusterStatsAction.NAME, request), is(false));
|
|
|
+ assertThat(dashboardsOnlyUserRole.cluster().check(PutIndexTemplateAction.NAME, request), is(false));
|
|
|
+ assertThat(dashboardsOnlyUserRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(dashboardsOnlyUserRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(dashboardsOnlyUserRole.cluster().check(MonitoringBulkAction.NAME, request), is(false));
|
|
|
|
|
|
assertThat(dashboardsOnlyUserRole.runAs().check(randomAlphaOfLengthBetween(1, 12)), is(false));
|
|
|
|
|
@@ -420,20 +478,35 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
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));
|
|
|
+
|
|
|
+ final String randomApplication = "kibana-" + randomAlphaOfLengthBetween(8, 24);
|
|
|
+ assertThat(dashboardsOnlyUserRole.application().grants(new ApplicationPrivilege(randomApplication, "app-random", "all"), "*"),
|
|
|
+ is(false));
|
|
|
+
|
|
|
+ final String application = "kibana-.kibana";
|
|
|
+ assertThat(dashboardsOnlyUserRole.application().grants(new ApplicationPrivilege(application, "app-foo", "foo"), "*"), is(false));
|
|
|
+ assertThat(dashboardsOnlyUserRole.application().grants(new ApplicationPrivilege(application, "app-all", "all"), "*"), is(false));
|
|
|
+ assertThat(dashboardsOnlyUserRole.application().grants(new ApplicationPrivilege(application, "app-read", "read"), "*"), is(true));
|
|
|
+
|
|
|
+ final String applicationWithRandomIndex = "kibana-.kibana_" + randomAlphaOfLengthBetween(8, 24);
|
|
|
+ assertThat(dashboardsOnlyUserRole.application().grants(
|
|
|
+ new ApplicationPrivilege(applicationWithRandomIndex, "app-random-index", "all"), "*"), is(false));
|
|
|
}
|
|
|
|
|
|
public void testSuperuserRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("superuser");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role superuserRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(superuserRole.cluster().check(ClusterHealthAction.NAME), is(true));
|
|
|
- assertThat(superuserRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(true));
|
|
|
- assertThat(superuserRole.cluster().check(PutUserAction.NAME), is(true));
|
|
|
- assertThat(superuserRole.cluster().check(PutRoleAction.NAME), is(true));
|
|
|
- assertThat(superuserRole.cluster().check(PutIndexTemplateAction.NAME), is(true));
|
|
|
- assertThat(superuserRole.cluster().check("internal:admin/foo"), is(false));
|
|
|
+ assertThat(superuserRole.cluster().check(ClusterHealthAction.NAME, request), is(true));
|
|
|
+ assertThat(superuserRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(true));
|
|
|
+ assertThat(superuserRole.cluster().check(PutUserAction.NAME, request), is(true));
|
|
|
+ assertThat(superuserRole.cluster().check(PutRoleAction.NAME, request), is(true));
|
|
|
+ assertThat(superuserRole.cluster().check(PutIndexTemplateAction.NAME, request), is(true));
|
|
|
+ assertThat(superuserRole.cluster().check("internal:admin/foo", request), is(false));
|
|
|
|
|
|
final Settings indexSettings = Settings.builder().put("index.version.created", Version.CURRENT).build();
|
|
|
final MetaData metaData = new MetaData.Builder()
|
|
@@ -472,18 +545,20 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testLogstashSystemRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("logstash_system");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role logstashSystemRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterHealthAction.NAME), is(true));
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterStateAction.NAME), is(true));
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterStatsAction.NAME), is(true));
|
|
|
- assertThat(logstashSystemRole.cluster().check(PutIndexTemplateAction.NAME), is(false));
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(logstashSystemRole.cluster().check(MonitoringBulkAction.NAME), is(true));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterHealthAction.NAME, request), is(true));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterStateAction.NAME, request), is(true));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterStatsAction.NAME, request), is(true));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(PutIndexTemplateAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(MonitoringBulkAction.NAME, request), is(true));
|
|
|
|
|
|
assertThat(logstashSystemRole.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));
|
|
|
|
|
@@ -494,18 +569,21 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testBeatsAdminRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
final RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("beats_admin");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
+
|
|
|
final Role beatsAdminRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(beatsAdminRole.cluster().check(ClusterHealthAction.NAME), is(false));
|
|
|
- assertThat(beatsAdminRole.cluster().check(ClusterStateAction.NAME), is(false));
|
|
|
- assertThat(beatsAdminRole.cluster().check(ClusterStatsAction.NAME), is(false));
|
|
|
- assertThat(beatsAdminRole.cluster().check(PutIndexTemplateAction.NAME), is(false));
|
|
|
- assertThat(beatsAdminRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(beatsAdminRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(beatsAdminRole.cluster().check(MonitoringBulkAction.NAME), is(false));
|
|
|
+ assertThat(beatsAdminRole.cluster().check(ClusterHealthAction.NAME, request), is(false));
|
|
|
+ assertThat(beatsAdminRole.cluster().check(ClusterStateAction.NAME, request), is(false));
|
|
|
+ assertThat(beatsAdminRole.cluster().check(ClusterStatsAction.NAME, request), is(false));
|
|
|
+ assertThat(beatsAdminRole.cluster().check(PutIndexTemplateAction.NAME, request), is(false));
|
|
|
+ assertThat(beatsAdminRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(beatsAdminRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(beatsAdminRole.cluster().check(MonitoringBulkAction.NAME, request), is(false));
|
|
|
|
|
|
assertThat(beatsAdminRole.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));
|
|
|
|
|
@@ -527,18 +605,20 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testBeatsSystemRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor(BeatsSystemUser.ROLE_NAME);
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role logstashSystemRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterHealthAction.NAME), is(true));
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterStateAction.NAME), is(true));
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterStatsAction.NAME), is(true));
|
|
|
- assertThat(logstashSystemRole.cluster().check(PutIndexTemplateAction.NAME), is(false));
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(logstashSystemRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
- assertThat(logstashSystemRole.cluster().check(MonitoringBulkAction.NAME), is(true));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterHealthAction.NAME, request), is(true));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterStateAction.NAME, request), is(true));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterStatsAction.NAME, request), is(true));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(PutIndexTemplateAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashSystemRole.cluster().check(MonitoringBulkAction.NAME, request), is(true));
|
|
|
|
|
|
assertThat(logstashSystemRole.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));
|
|
|
|
|
@@ -549,46 +629,48 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testMachineLearningAdminRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("machine_learning_admin");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role role = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(role.cluster().check(CloseJobAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(DeleteDatafeedAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(DeleteExpiredDataAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(DeleteFilterAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(DeleteJobAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(DeleteModelSnapshotAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(FinalizeJobExecutionAction.NAME), is(false)); // internal use only
|
|
|
- assertThat(role.cluster().check(FlushJobAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetBucketsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetCategoriesAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetDatafeedsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetDatafeedsStatsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetFiltersAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetInfluencersAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetJobsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetJobsStatsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetModelSnapshotsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetRecordsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(IsolateDatafeedAction.NAME), is(false)); // internal use only
|
|
|
- assertThat(role.cluster().check(KillProcessAction.NAME), is(false)); // internal use only
|
|
|
- assertThat(role.cluster().check(OpenJobAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(PostDataAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(PreviewDatafeedAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(PutDatafeedAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(PutFilterAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(PutJobAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(RevertModelSnapshotAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(StartDatafeedAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(StopDatafeedAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(UpdateDatafeedAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(UpdateJobAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(UpdateModelSnapshotAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(UpdateProcessAction.NAME), is(false)); // internal use only
|
|
|
- assertThat(role.cluster().check(ValidateDetectorAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(ValidateJobConfigAction.NAME), is(true));
|
|
|
+ assertThat(role.cluster().check(CloseJobAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(DeleteDatafeedAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(DeleteExpiredDataAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(DeleteFilterAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(DeleteJobAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(DeleteModelSnapshotAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(FinalizeJobExecutionAction.NAME, request), is(false)); // internal use only
|
|
|
+ assertThat(role.cluster().check(FlushJobAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetBucketsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetCategoriesAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetDatafeedsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetDatafeedsStatsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetFiltersAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetInfluencersAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetJobsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetJobsStatsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetModelSnapshotsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetRecordsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(IsolateDatafeedAction.NAME, request), is(false)); // internal use only
|
|
|
+ assertThat(role.cluster().check(KillProcessAction.NAME, request), is(false)); // internal use only
|
|
|
+ assertThat(role.cluster().check(OpenJobAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(PostDataAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(PreviewDatafeedAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(PutDatafeedAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(PutFilterAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(PutJobAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(RevertModelSnapshotAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(StartDatafeedAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(StopDatafeedAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(UpdateDatafeedAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(UpdateJobAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(UpdateModelSnapshotAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(UpdateProcessAction.NAME, request), is(false)); // internal use only
|
|
|
+ assertThat(role.cluster().check(ValidateDetectorAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(ValidateJobConfigAction.NAME, request), is(true));
|
|
|
assertThat(role.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));
|
|
|
|
|
|
assertNoAccessAllowed(role, "foo");
|
|
@@ -599,46 +681,48 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testMachineLearningUserRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("machine_learning_user");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role role = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(role.cluster().check(CloseJobAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(DeleteDatafeedAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(DeleteExpiredDataAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(DeleteFilterAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(DeleteJobAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(DeleteModelSnapshotAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(FinalizeJobExecutionAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(FlushJobAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(GetBucketsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetCategoriesAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetDatafeedsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetDatafeedsStatsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetFiltersAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(GetInfluencersAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetJobsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetJobsStatsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetModelSnapshotsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetRecordsAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(IsolateDatafeedAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(KillProcessAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(OpenJobAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(PostDataAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(PreviewDatafeedAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(PutDatafeedAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(PutFilterAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(PutJobAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(RevertModelSnapshotAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(StartDatafeedAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(StopDatafeedAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(UpdateDatafeedAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(UpdateJobAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(UpdateModelSnapshotAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(UpdateProcessAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(ValidateDetectorAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(ValidateJobConfigAction.NAME), is(false));
|
|
|
+ assertThat(role.cluster().check(CloseJobAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(DeleteDatafeedAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(DeleteExpiredDataAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(DeleteFilterAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(DeleteJobAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(DeleteModelSnapshotAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(FinalizeJobExecutionAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(FlushJobAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(GetBucketsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetCategoriesAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetDatafeedsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetDatafeedsStatsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetFiltersAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(GetInfluencersAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetJobsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetJobsStatsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetModelSnapshotsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetRecordsAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(IsolateDatafeedAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(KillProcessAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(OpenJobAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(PostDataAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(PreviewDatafeedAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(PutDatafeedAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(PutFilterAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(PutJobAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(RevertModelSnapshotAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(StartDatafeedAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(StopDatafeedAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(UpdateDatafeedAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(UpdateJobAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(UpdateModelSnapshotAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(UpdateProcessAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(ValidateDetectorAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(ValidateJobConfigAction.NAME, request), is(false));
|
|
|
assertThat(role.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));
|
|
|
|
|
|
assertNoAccessAllowed(role, "foo");
|
|
@@ -649,19 +733,21 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testWatcherAdminRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("watcher_admin");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role role = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(role.cluster().check(PutWatchAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(GetWatchAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(DeleteWatchAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(ExecuteWatchAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(AckWatchAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(ActivateWatchAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(WatcherServiceAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(WatcherStatsAction.NAME), is(true));
|
|
|
+ assertThat(role.cluster().check(PutWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(GetWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(DeleteWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(ExecuteWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(AckWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(ActivateWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(WatcherServiceAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(WatcherStatsAction.NAME, request), is(true));
|
|
|
assertThat(role.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));
|
|
|
|
|
|
assertThat(role.indices().allowedIndicesMatcher(IndexAction.NAME).test("foo"), is(false));
|
|
@@ -674,19 +760,21 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testWatcherUserRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("watcher_user");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role role = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(role.cluster().check(PutWatchAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(GetWatchAction.NAME), is(true));
|
|
|
- assertThat(role.cluster().check(DeleteWatchAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(ExecuteWatchAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(AckWatchAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(ActivateWatchAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(WatcherServiceAction.NAME), is(false));
|
|
|
- assertThat(role.cluster().check(WatcherStatsAction.NAME), is(true));
|
|
|
+ assertThat(role.cluster().check(PutWatchAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(GetWatchAction.NAME, request), is(true));
|
|
|
+ assertThat(role.cluster().check(DeleteWatchAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(ExecuteWatchAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(AckWatchAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(ActivateWatchAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(WatcherServiceAction.NAME, request), is(false));
|
|
|
+ assertThat(role.cluster().check(WatcherStatsAction.NAME, request), is(true));
|
|
|
assertThat(role.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));
|
|
|
|
|
|
assertThat(role.indices().allowedIndicesMatcher(IndexAction.NAME).test("foo"), is(false));
|
|
@@ -724,15 +812,17 @@ public class ReservedRolesStoreTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testLogstashAdminRole() {
|
|
|
+ final TransportRequest request = mock(TransportRequest.class);
|
|
|
+
|
|
|
RoleDescriptor roleDescriptor = new ReservedRolesStore().roleDescriptor("logstash_admin");
|
|
|
assertNotNull(roleDescriptor);
|
|
|
assertThat(roleDescriptor.getMetadata(), hasEntry("_reserved", true));
|
|
|
|
|
|
Role logstashAdminRole = Role.builder(roleDescriptor, null).build();
|
|
|
- assertThat(logstashAdminRole.cluster().check(ClusterHealthAction.NAME), is(false));
|
|
|
- assertThat(logstashAdminRole.cluster().check(PutIndexTemplateAction.NAME), is(false));
|
|
|
- assertThat(logstashAdminRole.cluster().check(ClusterRerouteAction.NAME), is(false));
|
|
|
- assertThat(logstashAdminRole.cluster().check(ClusterUpdateSettingsAction.NAME), is(false));
|
|
|
+ assertThat(logstashAdminRole.cluster().check(ClusterHealthAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashAdminRole.cluster().check(PutIndexTemplateAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashAdminRole.cluster().check(ClusterRerouteAction.NAME, request), is(false));
|
|
|
+ assertThat(logstashAdminRole.cluster().check(ClusterUpdateSettingsAction.NAME, request), is(false));
|
|
|
|
|
|
assertThat(logstashAdminRole.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));
|
|
|
|