java - 防止未经授权的成员加入 Hazelcast 集群

标签 java hazelcast

我们正在更改我们的一个应用程序以使用 Hazelcast 3.11 社区版,并在几台主机上运行的多个 JVM 之间进行一些锁定。 我们按照如下语法配置集群:

public class HazelcastBuilder {
    private final String name;
    private final String password;
    private final String members;
    private final String hostName;
    private final String applicationName;

    public HazelcastInstance getHazelcastInstance() {
        Config hazelcastConfig = new Config();
        GroupConfig groupConfig = new GroupConfig(name, password);
        hazelcastConfig.setGroupConfig(groupConfig);

        TcpIpConfig tcpIpConfig = new TcpIpConfig();
        tcpIpConfig.setEnabled(true);
        for (String member : members.split(",")) {
            tcpIpConfig.addMember(member.trim());
        }

        hazelcastConfig.getNetworkConfig().getJoin().setTcpIpConfig(tcpIpConfig);
        // By default the multicast config is enabled. Disable it here.
        hazelcastConfig.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
        String instanceName = applicationName + "-" + hostName;
        hazelcastConfig.setInstanceName(instanceName);

        logger.info("Creating hazelcast instance: " + instanceName);
        return Hazelcast.getOrCreateHazelcastInstance(hazelcastConfig);
    }
}

一切正常,集群已正确创建并按预期工作。

但是我创建了一个单元测试并配置了一个与应用程序同名的本地集群,然后我将我的开发机器添加到其中。一切正常,我的本地主机毫无问题地加入了应用程序集群。

在生产环境中当然不能接受这样的事情,这是我的问题:

鉴于我们有一个可以运行我们的应用程序的主机名列表,什么是防止未经授权的成员加入给定 hazelcast 集群的最佳方法。

预先感谢您的帮助。

最佳答案

如果您正在寻找安全功能,那么您应该使用 Hazelcast 企业版。检查功能列表:

如果您只需要阻止任意机器连接到您的集群,那么在开源版本中有几个选项:

  • 为您的每个集群使用唯一的组名称;
  • 作为额外的保护级别,您可以在配置中定义验证 token - 只需设置 hazelcast.application.validation.token Hazelcast 属性(或系统属性)- 查看 reference manual详情
  • 指定应使用哪些网络接口(interface) (doc) 并通过设置 hazelcast.socket.bind.any 禁用绑定(bind)到所有本地接口(interface)属性(property)false .通常,您的生产集群在受信任的 LAN 环境中运行,因此您希望它只能在该 LAN 中访问。
  • 多播发现机制 ( doc ) 还添加了 <trusted-interfaces>配置,可以帮到你。您正在使用 TCP 发现,因此它对您的场景无效。

最后说明:在 Hazelcast 开源版本中没有检查组密码字段!

关于java - 防止未经授权的成员加入 Hazelcast 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56214166/

相关文章:

java - getA() 和 this.getA() 有什么区别?

Hazelcast 监听器在客户端重新连接后不起作用

java - hazelcast部署实现

java - Hazelcast:分布式执行和本地成员信息

java - jSTL <c :when> tag wrong result

java - StandardWrapperValve[jsp] : Servlet. servlet jsp 的 service() 抛出异常 java.lang.IllegalArgumentException:无法将给定对象格式化为日期

java - 如何使用 Eclipse JDT API 更改 Java 类名?

java - 实现隐藏调试选项的最佳方式是什么?

hazelcast - 从HazelCast创建和删除 map

java - 您如何以编程方式为多播发现机制配置hazelcast?