|
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", |
@@ -442,6 +371,81 @@ private static RoleDescriptor kibanaAdminUser(String name, Map<String, Object> m |
442 | 371 | null, null, metadata, null); |
443 | 372 | } |
444 | 373 |
|
| 374 | + public static RoleDescriptor kibanaSystemRoleDescriptor(String name) { |
| 375 | + return new RoleDescriptor(name, |
| 376 | + new String[] { |
| 377 | + "monitor", "manage_index_templates", MonitoringBulkAction.NAME, "manage_saml", "manage_token", "manage_oidc", |
| 378 | + InvalidateApiKeyAction.NAME, "grant_api_key", |
| 379 | + GetBuiltinPrivilegesAction.NAME, "delegate_pki", GetLifecycleAction.NAME, PutLifecycleAction.NAME, |
| 380 | + // To facilitate ML UI functionality being controlled using Kibana security privileges |
| 381 | + "manage_ml", |
| 382 | + // The symbolic constant for this one is in SecurityActionMapper, so not accessible from X-Pack core |
| 383 | + "cluster:admin/analyze", |
| 384 | + // To facilitate using the file uploader functionality |
| 385 | + "monitor_text_structure", |
| 386 | + // To cancel tasks and delete async searches |
| 387 | + "cancel_task" |
| 388 | + }, |
| 389 | + new RoleDescriptor.IndicesPrivileges[] { |
| 390 | + RoleDescriptor.IndicesPrivileges.builder() |
| 391 | + .indices(".kibana*", ".reporting-*").privileges("all").build(), |
| 392 | + RoleDescriptor.IndicesPrivileges.builder() |
| 393 | + .indices(".monitoring-*").privileges("read", "read_cross_cluster").build(), |
| 394 | + RoleDescriptor.IndicesPrivileges.builder() |
| 395 | + .indices(".management-beats").privileges("create_index", "read", "write").build(), |
| 396 | + // To facilitate ML UI functionality being controlled using Kibana security privileges |
| 397 | + RoleDescriptor.IndicesPrivileges.builder() |
| 398 | + .indices(".ml-anomalies*", ".ml-stats-*") |
| 399 | + .privileges("read").build(), |
| 400 | + RoleDescriptor.IndicesPrivileges.builder().indices(".ml-annotations*", ".ml-notifications*") |
| 401 | + .privileges("read", "write").build(), |
| 402 | + // APM agent configuration |
| 403 | + RoleDescriptor.IndicesPrivileges.builder() |
| 404 | + .indices(".apm-agent-configuration").privileges("all").build(), |
| 405 | + // APM custom link index creation |
| 406 | + RoleDescriptor.IndicesPrivileges.builder() |
| 407 | + .indices(".apm-custom-link").privileges("all").build(), |
| 408 | + // APM telemetry queries APM indices in kibana task runner |
| 409 | + RoleDescriptor.IndicesPrivileges.builder() |
| 410 | + .indices("apm-*") |
| 411 | + .privileges("read", "read_cross_cluster").build(), |
| 412 | + // Data telemetry reads mappings, metadata and stats of indices |
| 413 | + RoleDescriptor.IndicesPrivileges.builder() |
| 414 | + .indices("*") |
| 415 | + .privileges("view_index_metadata", "monitor").build(), |
| 416 | + // Endpoint diagnostic information. Kibana reads from these indices to send telemetry |
| 417 | + RoleDescriptor.IndicesPrivileges.builder() |
| 418 | + .indices(".logs-endpoint.diagnostic.collection-*") |
| 419 | + .privileges("read").build(), |
| 420 | + // Fleet Server indices. Kibana create this indice before Fleet Server use them. |
| 421 | + // Fleet Server indices. Kibana read and write to this indice to manage Elastic Agents |
| 422 | + RoleDescriptor.IndicesPrivileges.builder() |
| 423 | + .indices(".fleet*") |
| 424 | + .privileges("all").build(), |
| 425 | + // Legacy "Alerts as data" index. Kibana user will create this index. |
| 426 | + // Kibana user will read / write to these indices |
| 427 | + RoleDescriptor.IndicesPrivileges.builder() |
| 428 | + .indices(ReservedRolesStore.LEGACY_ALERTS_INDEX) |
| 429 | + .privileges("all").build(), |
| 430 | + // "Alerts as data" index. Kibana user will create this index. |
| 431 | + // Kibana user will read / write to these indices |
| 432 | + RoleDescriptor.IndicesPrivileges.builder() |
| 433 | + .indices(ReservedRolesStore.ALERTS_INDEX) |
| 434 | + .privileges("all").build(), |
| 435 | + // Endpoint / Fleet policy responses. Kibana requires read access to send telemetry |
| 436 | + RoleDescriptor.IndicesPrivileges.builder() |
| 437 | + .indices("metrics-endpoint.policy-*") |
| 438 | + .privileges("read").build(), |
| 439 | + // Endpoint metrics. Kibana requires read access to send telemetry |
| 440 | + RoleDescriptor.IndicesPrivileges.builder() |
| 441 | + .indices("metrics-endpoint.metrics-*") |
| 442 | + .privileges("read").build() |
| 443 | + }, |
| 444 | + null, |
| 445 | + new ConfigurableClusterPrivilege[] { new ManageApplicationPrivileges(Collections.singleton("kibana-*")) }, |
| 446 | + null, MetadataUtils.DEFAULT_RESERVED_METADATA, null); |
| 447 | + } |
| 448 | + |
445 | 449 | public static boolean isReserved(String role) { |
446 | 450 | return RESERVED_ROLES.containsKey(role) || UsernamesField.SYSTEM_ROLE.equals(role) || |
447 | 451 | UsernamesField.XPACK_ROLE.equals(role) || UsernamesField.ASYNC_SEARCH_ROLE.equals(role); |
|
0 commit comments