Гранты безопасности подключаемого модуля Elasticsearch 2.2.0

У меня есть плагин с открытым исходным кодом для Elasticsearch, который требует отражения для проверки исходного адреса HTTP-запросов.

В ES 2.2 они ввели разрешения безопасности для плагинов, следуя instructions, я добавил грант в файл plugin-security.policy со следующим:

grant {
  permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};

Теперь, после установки плагина, я вижу это (как и предполагалось в документации). Итак, я предполагаю, что запрос на разрешение успешно срабатывает.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.reflect.ReflectPermission suppressAccessChecks
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Installed readonlyrest into /elasticsearch/plugins/readonlyrest

Однако из моей функции, которая на самом деле использует отражение, все еще видна эта ошибка...

java.security.AccessControlException: access denied ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:128)
    at org.elasticsearch.plugin.readonlyrest.acl.blocks.rules.impl.HostsRule.getAddress(HostsRule.java:76)
    at org.elasticsearch.plugin.readonlyrest.acl.blocks.rules.impl.HostsRule.match(HostsRule.java:130)
    at org.elasticsearch.plugin.readonlyrest.acl.blocks.Block.check(Block.java:104)
    at org.elasticsearch.plugin.readonlyrest.acl.ACL.check(ACL.java:48)
    at org.elasticsearch.plugin.readonlyrest.ReadonlyRestAction$1.process(ReadonlyRestAction.java:60)
    at org.elasticsearch.rest.RestController$ControllerFilterChain.continueProcessing(RestController.java:265)

Чего-то не хватает? Я понятия не имею.


person sscarduzio    schedule 17.02.2016    source источник


Ответы (2)


Мне нужно было обернуть код отражения в AccessController.doPrivileged() :)

person sscarduzio    schedule 18.02.2016
comment
В каком файле? - person Mathias Conradt; 31.10.2018
comment
в исходном коде Java вам просто нужно обернуть любой код, который использует разрешения внутри этого AccessController.doPrivileged(... некоторая лямбда, которая выполняет код...). @MathiasConradt Вы случайно не разрабатываете плагин ES? Который из? - person sscarduzio; 06.11.2018

Что сработало для меня, так это переход с Open JDK на оракул JDK.

person Brian van Rooijen    schedule 27.05.2016