创建经典插件

编辑

经典插件为 Elasticsearch 提供了自定义身份验证、授权、评分等机制。

插件发布生命周期

经典插件要求您为每个新的 Elasticsearch 版本构建一个新版本。此版本在安装插件和加载插件时进行检查。如果插件的 elasticsearch.version 不正确,Elasticsearch 将拒绝启动。

经典插件文件结构

编辑

经典插件是 ZIP 文件,由 JAR 文件和一个名为 plugin-descriptor.properties 的元数据文件组成,这是一个描述插件的 Java 属性文件。

请注意,只有插件根目录下的 JAR 文件会被添加到插件的类路径中。如果您需要其他资源,请将它们打包到资源 JAR 中。

示例插件

编辑

Elasticsearch 存储库包含插件示例。其中一些包括

这些示例提供了入门所需的必要基础。有关如何编写插件的更多信息,我们建议查看现有插件的源代码以获取灵感。

测试您的插件

编辑

使用 bin/elasticsearch-plugin install file:///path/to/your/plugin 安装您的插件以进行测试。只有当 Java 插件位于 plugins/ 目录中时,才会自动加载它。

Java 安全权限

编辑

某些插件可能需要其他安全权限。插件可以包含可选的 plugin-security.policy 文件,其中包含用于其他权限的 grant 语句。任何其他权限都将以大型警告的形式显示给用户,并且用户在交互式安装插件时必须确认这些权限。因此,如果可能,最好避免请求任何无关的权限!

如果您使用的是 Elasticsearch Gradle 构建系统,请将此文件放在 src/main/plugin-metadata 中,它也会在单元测试期间应用。

Java 安全模型是基于栈的,并且插件中的 jar 会被授予其他权限,因此您必须围绕需要提升权限的操作编写正确的安全代码。您可以添加检查以防止非特权代码(例如脚本)获得提升的权限。例如

// ES permission you should check before doPrivileged() blocks
import org.elasticsearch.SpecialPermission;

SecurityManager sm = System.getSecurityManager();
if (sm != null) {
  // unprivileged code such as scripts do not have SpecialPermission
  sm.checkPermission(new SpecialPermission());
}
AccessController.doPrivileged(
  // sensitive operation
);

查看Java SE 安全编码指南以获取更多信息。