Elasticsearch 2.2.0插件安全授权

时间:2016-02-17 18:14:58

标签: java elasticsearch elasticsearch-plugin java-security

我有一个Elasticsearch opensource plugin需要反思来检查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)

有什么遗失的吗?我不知道。

2 个答案:

答案 0 :(得分:0)

我需要将反射代码包装在AccessController.doPrivileged():)

答案 1 :(得分:-1)

对我有用的是从Open JDK切换到oracle JDK