|
21 | 21 | import org.elasticsearch.xpack.core.security.authz.privilege.ConfigurableClusterPrivilege;
|
22 | 22 | import org.elasticsearch.xpack.core.security.authz.privilege.ConfigurableClusterPrivileges.ManageApplicationPrivileges;
|
23 | 23 | import org.elasticsearch.xpack.core.security.support.MetadataUtils;
|
24 |
| -import org.elasticsearch.xpack.core.security.user.KibanaUser; |
| 24 | +import org.elasticsearch.xpack.core.security.user.KibanaSystemUser; |
25 | 25 | import org.elasticsearch.xpack.core.security.user.UsernamesField;
|
26 | 26 | import org.elasticsearch.xpack.core.transform.transforms.persistence.TransformInternalIndexConstants;
|
27 | 27 | import org.elasticsearch.xpack.core.watcher.execution.TriggeredWatchStoreField;
|
@@ -125,78 +125,7 @@ private static Map<String, RoleDescriptor> initializeReservedRoles() {
|
125 | 125 | null, null,
|
126 | 126 | MetadataUtils.getDeprecatedReservedMetadata("Please use Kibana feature privileges instead"),
|
127 | 127 | null))
|
128 |
| - .put(KibanaUser.ROLE_NAME, new RoleDescriptor(KibanaUser.ROLE_NAME, |
129 |
| - new String[] { |
130 |
| - "monitor", "manage_index_templates", MonitoringBulkAction.NAME, "manage_saml", "manage_token", "manage_oidc", |
131 |
| - InvalidateApiKeyAction.NAME, "grant_api_key", |
132 |
| - GetBuiltinPrivilegesAction.NAME, "delegate_pki", GetLifecycleAction.NAME, PutLifecycleAction.NAME, |
133 |
| - // To facilitate ML UI functionality being controlled using Kibana security privileges |
134 |
| - "manage_ml", |
135 |
| - // The symbolic constant for this one is in SecurityActionMapper, so not accessible from X-Pack core |
136 |
| - "cluster:admin/analyze", |
137 |
| - // To facilitate using the file uploader functionality |
138 |
| - "monitor_text_structure", |
139 |
| - // To cancel tasks and delete async searches |
140 |
| - "cancel_task" |
141 |
| - }, |
142 |
| - new RoleDescriptor.IndicesPrivileges[] { |
143 |
| - RoleDescriptor.IndicesPrivileges.builder() |
144 |
| - .indices(".kibana*", ".reporting-*").privileges("all").build(), |
145 |
| - RoleDescriptor.IndicesPrivileges.builder() |
146 |
| - .indices(".monitoring-*").privileges("read", "read_cross_cluster").build(), |
147 |
| - RoleDescriptor.IndicesPrivileges.builder() |
148 |
| - .indices(".management-beats").privileges("create_index", "read", "write").build(), |
149 |
| - // To facilitate ML UI functionality being controlled using Kibana security privileges |
150 |
| - RoleDescriptor.IndicesPrivileges.builder() |
151 |
| - .indices(".ml-anomalies*", ".ml-stats-*") |
152 |
| - .privileges("read").build(), |
153 |
| - RoleDescriptor.IndicesPrivileges.builder().indices(".ml-annotations*", ".ml-notifications*") |
154 |
| - .privileges("read", "write").build(), |
155 |
| - // APM agent configuration |
156 |
| - RoleDescriptor.IndicesPrivileges.builder() |
157 |
| - .indices(".apm-agent-configuration").privileges("all").build(), |
158 |
| - // APM custom link index creation |
159 |
| - RoleDescriptor.IndicesPrivileges.builder() |
160 |
| - .indices(".apm-custom-link").privileges("all").build(), |
161 |
| - // APM telemetry queries APM indices in kibana task runner |
162 |
| - RoleDescriptor.IndicesPrivileges.builder() |
163 |
| - .indices("apm-*") |
164 |
| - .privileges("read", "read_cross_cluster").build(), |
165 |
| - // Data telemetry reads mappings, metadata and stats of indices |
166 |
| - RoleDescriptor.IndicesPrivileges.builder() |
167 |
| - .indices("*") |
168 |
| - .privileges("view_index_metadata", "monitor").build(), |
169 |
| - // Endpoint diagnostic information. Kibana reads from these indices to send telemetry |
170 |
| - RoleDescriptor.IndicesPrivileges.builder() |
171 |
| - .indices(".logs-endpoint.diagnostic.collection-*") |
172 |
| - .privileges("read").build(), |
173 |
| - // Fleet Server indices. Kibana create this indice before Fleet Server use them. |
174 |
| - // Fleet Server indices. Kibana read and write to this indice to manage Elastic Agents |
175 |
| - RoleDescriptor.IndicesPrivileges.builder() |
176 |
| - .indices(".fleet*") |
177 |
| - .privileges("all").build(), |
178 |
| - // Legacy "Alerts as data" index. Kibana user will create this index. |
179 |
| - // Kibana user will read / write to these indices |
180 |
| - RoleDescriptor.IndicesPrivileges.builder() |
181 |
| - .indices(ReservedRolesStore.LEGACY_ALERTS_INDEX) |
182 |
| - .privileges("all").build(), |
183 |
| - // "Alerts as data" index. Kibana user will create this index. |
184 |
| - // Kibana user will read / write to these indices |
185 |
| - RoleDescriptor.IndicesPrivileges.builder() |
186 |
| - .indices(ReservedRolesStore.ALERTS_INDEX) |
187 |
| - .privileges("all").build(), |
188 |
| - // Endpoint / Fleet policy responses. Kibana requires read access to send telemetry |
189 |
| - RoleDescriptor.IndicesPrivileges.builder() |
190 |
| - .indices("metrics-endpoint.policy-*") |
191 |
| - .privileges("read").build(), |
192 |
| - // Endpoint metrics. Kibana requires read access to send telemetry |
193 |
| - RoleDescriptor.IndicesPrivileges.builder() |
194 |
| - .indices("metrics-endpoint.metrics-*") |
195 |
| - .privileges("read").build() |
196 |
| - }, |
197 |
| - null, |
198 |
| - new ConfigurableClusterPrivilege[] { new ManageApplicationPrivileges(Collections.singleton("kibana-*")) }, |
199 |
| - null, MetadataUtils.DEFAULT_RESERVED_METADATA, null)) |
| 128 | + .put(KibanaSystemUser.ROLE_NAME, kibanaSystemRoleDescriptor(KibanaSystemUser.ROLE_NAME)) |
200 | 129 | .put("logstash_system", new RoleDescriptor("logstash_system", new String[] { "monitor", MonitoringBulkAction.NAME},
|
201 | 130 | null, null, MetadataUtils.DEFAULT_RESERVED_METADATA))
|
202 | 131 | .put("beats_admin", new RoleDescriptor("beats_admin",
|
@@ -434,6 +363,81 @@ private static RoleDescriptor kibanaAdminUser(String name, Map<String, Object> m
|
434 | 363 | null, null, metadata, null);
|
435 | 364 | }
|
436 | 365 |
|
| 366 | + public static RoleDescriptor kibanaSystemRoleDescriptor(String name) { |
| 367 | + return new RoleDescriptor(name, |
| 368 | + new String[] { |
| 369 | + "monitor", "manage_index_templates", MonitoringBulkAction.NAME, "manage_saml", "manage_token", "manage_oidc", |
| 370 | + InvalidateApiKeyAction.NAME, "grant_api_key", |
| 371 | + GetBuiltinPrivilegesAction.NAME, "delegate_pki", GetLifecycleAction.NAME, PutLifecycleAction.NAME, |
| 372 | + // To facilitate ML UI functionality being controlled using Kibana security privileges |
| 373 | + "manage_ml", |
| 374 | + // The symbolic constant for this one is in SecurityActionMapper, so not accessible from X-Pack core |
| 375 | + "cluster:admin/analyze", |
| 376 | + // To facilitate using the file uploader functionality |
| 377 | + "monitor_text_structure", |
| 378 | + // To cancel tasks and delete async searches |
| 379 | + "cancel_task" |
| 380 | + }, |
| 381 | + new RoleDescriptor.IndicesPrivileges[] { |
| 382 | + RoleDescriptor.IndicesPrivileges.builder() |
| 383 | + .indices(".kibana*", ".reporting-*").privileges("all").build(), |
| 384 | + RoleDescriptor.IndicesPrivileges.builder() |
| 385 | + .indices(".monitoring-*").privileges("read", "read_cross_cluster").build(), |
| 386 | + RoleDescriptor.IndicesPrivileges.builder() |
| 387 | + .indices(".management-beats").privileges("create_index", "read", "write").build(), |
| 388 | + // To facilitate ML UI functionality being controlled using Kibana security privileges |
| 389 | + RoleDescriptor.IndicesPrivileges.builder() |
| 390 | + .indices(".ml-anomalies*", ".ml-stats-*") |
| 391 | + .privileges("read").build(), |
| 392 | + RoleDescriptor.IndicesPrivileges.builder().indices(".ml-annotations*", ".ml-notifications*") |
| 393 | + .privileges("read", "write").build(), |
| 394 | + // APM agent configuration |
| 395 | + RoleDescriptor.IndicesPrivileges.builder() |
| 396 | + .indices(".apm-agent-configuration").privileges("all").build(), |
| 397 | + // APM custom link index creation |
| 398 | + RoleDescriptor.IndicesPrivileges.builder() |
| 399 | + .indices(".apm-custom-link").privileges("all").build(), |
| 400 | + // APM telemetry queries APM indices in kibana task runner |
| 401 | + RoleDescriptor.IndicesPrivileges.builder() |
| 402 | + .indices("apm-*") |
| 403 | + .privileges("read", "read_cross_cluster").build(), |
| 404 | + // Data telemetry reads mappings, metadata and stats of indices |
| 405 | + RoleDescriptor.IndicesPrivileges.builder() |
| 406 | + .indices("*") |
| 407 | + .privileges("view_index_metadata", "monitor").build(), |
| 408 | + // Endpoint diagnostic information. Kibana reads from these indices to send telemetry |
| 409 | + RoleDescriptor.IndicesPrivileges.builder() |
| 410 | + .indices(".logs-endpoint.diagnostic.collection-*") |
| 411 | + .privileges("read").build(), |
| 412 | + // Fleet Server indices. Kibana create this indice before Fleet Server use them. |
| 413 | + // Fleet Server indices. Kibana read and write to this indice to manage Elastic Agents |
| 414 | + RoleDescriptor.IndicesPrivileges.builder() |
| 415 | + .indices(".fleet*") |
| 416 | + .privileges("all").build(), |
| 417 | + // Legacy "Alerts as data" index. Kibana user will create this index. |
| 418 | + // Kibana user will read / write to these indices |
| 419 | + RoleDescriptor.IndicesPrivileges.builder() |
| 420 | + .indices(ReservedRolesStore.LEGACY_ALERTS_INDEX) |
| 421 | + .privileges("all").build(), |
| 422 | + // "Alerts as data" index. Kibana user will create this index. |
| 423 | + // Kibana user will read / write to these indices |
| 424 | + RoleDescriptor.IndicesPrivileges.builder() |
| 425 | + .indices(ReservedRolesStore.ALERTS_INDEX) |
| 426 | + .privileges("all").build(), |
| 427 | + // Endpoint / Fleet policy responses. Kibana requires read access to send telemetry |
| 428 | + RoleDescriptor.IndicesPrivileges.builder() |
| 429 | + .indices("metrics-endpoint.policy-*") |
| 430 | + .privileges("read").build(), |
| 431 | + // Endpoint metrics. Kibana requires read access to send telemetry |
| 432 | + RoleDescriptor.IndicesPrivileges.builder() |
| 433 | + .indices("metrics-endpoint.metrics-*") |
| 434 | + .privileges("read").build() |
| 435 | + }, |
| 436 | + null, |
| 437 | + new ConfigurableClusterPrivilege[] { new ManageApplicationPrivileges(Collections.singleton("kibana-*")) }, |
| 438 | + null, MetadataUtils.DEFAULT_RESERVED_METADATA, null); |
| 439 | + } |
| 440 | + |
437 | 441 | public static boolean isReserved(String role) {
|
438 | 442 | return RESERVED_ROLES.containsKey(role) || UsernamesField.SYSTEM_ROLE.equals(role) ||
|
439 | 443 | UsernamesField.XPACK_ROLE.equals(role) || UsernamesField.ASYNC_SEARCH_ROLE.equals(role);
|
|
0 commit comments