当前位置: 首页 > 知识库问答 >
问题:

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

吴镜
2023-03-14

我们正在将一个应用程序更改为使用Hazelcast 3.11 Community Edition,并在几个主机上运行的多个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集群的最佳方法是什么。

提前感谢您的帮助。

共有1个答案

蒋永宁
2023-03-14

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

  • 操作系统功能

如果您只需要防止任意计算机连接到集群,那么在opensource版本中有几个选项:

  • 为每个群集使用唯一的组名称;
  • 作为额外的保护级别,您可以在配置中定义验证令牌-只需设置hazelcast.application.validation.tokenHazelcast属性(或系统属性)-查看参考手册了解详细信息
  • 指定应该使用哪些网络接口(doc),并通过将hazelcast.socket.bind.any属性设置为false来禁用对所有本地接口的绑定。通常,您的生产集群运行在受信任的局域网环境中,因此您希望仅在该局域网中访问它。
  • 多播发现机制(doc)还添加了

最后一点注意:在Hazelcast开源版本中,组密码字段未被选中!

 类似资料:
  • 问题内容: 我们正在更改应用程序之一以使用Hazelcast 3.11 Community Edition,并在运行于少数主机上的多个JVM之间进行一些锁定。我们按照如下语法配置集群: 所有工作正常,并且群集已正确创建并按预期工作。 但是,我创建了一个单元测试并为本地集群配置了与应用程序使用的名称相同的名称,然后将开发人员计算机添加到其中。一切正常,我的本地主机没有任何问题地加入了应用程序集群。

  • 我正在进行一个Spring启动项目,我使用Hazelcast作为缓存。我启用了tcp作为连接方法,我还提到了一些成员。会员可以加入。但问题是其他节点也可以加入除了成员。有人能告诉我如何限制它吗? 这是我的配置,

  • 问题内容: 我从Nexus存储库中检出了代码。我更改了帐户密码,并在文件中正确设置了密码。在执行时,我收到错误消息,说明它尝试从该存储库下载文件。 任何想法如何解决此错误?我在Maven 3.04中使用Windows 7 问题答案: 这里的问题是所使用的密码出现错字错误,由于密码中使用了字符/字母,因此很难识别。

  • 我正在做hazelcast监控服务,我需要为每个集群成员添加客户名称,以了解哪个模块不在集群中。 我想要成员的常量名称,而不是 这能做到吗?

  • 问题内容: 以下是文档中给出的HazelCast程序配置,但无法在HazelCast群集中添加成员。 请查看代码,如果需要进一步修改以将成员添加到hazelcast集群,请让我看看 问题答案: 添加此行以关闭多播以支持TCP, 将此行移到最后, 您应该在构建实例之前完成配置。