2929import org .elasticsearch .action .search .TransportSearchAction ;
3030import org .elasticsearch .action .search .TransportSearchScrollAction ;
3131import org .elasticsearch .index .reindex .ReindexAction ;
32+ import org .elasticsearch .tasks .TaskCancellationService ;
33+ import org .elasticsearch .transport .RemoteClusterService ;
3234import org .elasticsearch .xpack .core .XPackPlugin ;
3335import org .elasticsearch .xpack .core .ilm .action .ILMActions ;
3436import org .elasticsearch .xpack .core .security .authz .RoleDescriptor ;
@@ -294,6 +296,29 @@ public class InternalUsers {
294296 )
295297 );
296298
299+ /**
300+ * Internal user that can manage a cross-project connections (e.g. handshake)
301+ * and searches (e.g. cancelling).
302+ */
303+ public static final InternalUser CROSS_PROJECT_ACCESS_USER = new InternalUser (
304+ UsernamesField .CROSS_PROJECT_ACCESS_USER_NAME ,
305+ new RoleDescriptor (
306+ UsernamesField .CROSS_PROJECT_ACCESS_ROLE_NAME ,
307+ new String [] {
308+ RemoteClusterService .REMOTE_CLUSTER_HANDSHAKE_ACTION_NAME ,
309+ TaskCancellationService .REMOTE_CLUSTER_BAN_PARENT_ACTION_NAME ,
310+ TaskCancellationService .REMOTE_CLUSTER_CANCEL_CHILD_ACTION_NAME ,
311+ "cluster:internal:data/read/esql/open_exchange" ,
312+ "cluster:internal:data/read/esql/exchange" },
313+ null ,
314+ null ,
315+ null ,
316+ null ,
317+ MetadataUtils .DEFAULT_RESERVED_METADATA ,
318+ Map .of ()
319+ )
320+ );
321+
297322 public static final SystemUser SYSTEM_USER = SystemUser .INSTANCE ;
298323
299324 private static final Map <String , InternalUser > INTERNAL_USERS ;
@@ -309,7 +334,8 @@ public class InternalUsers {
309334 DATA_STREAM_LIFECYCLE_USER ,
310335 REINDEX_DATA_STREAM_USER ,
311336 SYNONYMS_USER ,
312- LAZY_ROLLOVER_USER
337+ LAZY_ROLLOVER_USER ,
338+ CROSS_PROJECT_ACCESS_USER
313339 ).collect (Collectors .toUnmodifiableMap (InternalUser ::principal , Function .identity ()));
314340 }
315341
0 commit comments