2424import org .elasticsearch .entitlement .runtime .policy .entitlements .CreateClassLoaderEntitlement ;
2525import org .elasticsearch .entitlement .runtime .policy .entitlements .Entitlement ;
2626import org .elasticsearch .entitlement .runtime .policy .entitlements .ExitVMEntitlement ;
27+ import org .elasticsearch .entitlement .runtime .policy .entitlements .FilesEntitlement ;
28+ import org .elasticsearch .entitlement .runtime .policy .entitlements .FilesEntitlement .FileData ;
2729import org .elasticsearch .entitlement .runtime .policy .entitlements .InboundNetworkEntitlement ;
2830import org .elasticsearch .entitlement .runtime .policy .entitlements .LoadNativeLibrariesEntitlement ;
2931import org .elasticsearch .entitlement .runtime .policy .entitlements .OutboundNetworkEntitlement ;
3739import java .nio .file .Path ;
3840import java .nio .file .spi .FileSystemProvider ;
3941import java .util .ArrayList ;
42+ import java .util .Arrays ;
4043import java .util .HashMap ;
4144import java .util .List ;
4245import java .util .Map ;
4346import java .util .Set ;
4447import java .util .stream .Collectors ;
4548import java .util .stream .Stream ;
4649
50+ import static org .elasticsearch .entitlement .runtime .policy .entitlements .FilesEntitlement .Mode .READ_WRITE ;
51+
4752/**
4853 * Called by the agent during {@code agentmain} to configure the entitlement system,
4954 * instantiate and configure an {@link EntitlementChecker},
@@ -109,6 +114,7 @@ private static Class<?>[] findClassesToRetransform(Class<?>[] loadedClasses, Set
109114
110115 private static PolicyManager createPolicyManager () {
111116 Map <String , Policy > pluginPolicies = EntitlementBootstrap .bootstrapArgs ().pluginPolicies ();
117+ Path [] dataDirs = EntitlementBootstrap .bootstrapArgs ().dataDirs ();
112118
113119 // TODO(ES-10031): Decide what goes in the elasticsearch default policy and extend it
114120 var serverPolicy = new Policy (
@@ -129,7 +135,10 @@ private static PolicyManager createPolicyManager() {
129135 new Scope ("org.apache.httpcomponents.httpclient" , List .of (new OutboundNetworkEntitlement ())),
130136 new Scope ("io.netty.transport" , List .of (new InboundNetworkEntitlement (), new OutboundNetworkEntitlement ())),
131137 new Scope ("org.apache.lucene.core" , List .of (new LoadNativeLibrariesEntitlement ())),
132- new Scope ("org.elasticsearch.nativeaccess" , List .of (new LoadNativeLibrariesEntitlement ()))
138+ new Scope ("org.elasticsearch.nativeaccess" ,
139+ List .of (
140+ new LoadNativeLibrariesEntitlement (),
141+ new FilesEntitlement (Arrays .asList (dataDirs ).stream ().map (d -> new FileData (d .toString (), READ_WRITE )).toList ())))
133142 )
134143 );
135144 // agents run without a module, so this is a special hack for the apm agent
0 commit comments