当前位置: 首页 > 面试题库 >

防止未经授权的成员加入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集群的最佳方法。

预先感谢您的帮助。


问题答案:

如果要搜索安全功能,则应使用Hazelcast Enterprise版本。检查功能列表:

如果只需要防止任意计算机连接到群集,则开源版本中有几个选项:

  • 为每个群集使用唯一的组名;
  • 作为附加保护级别,您可以在配置中定义验证令牌-只需设置hazelcast.application.validation.tokenHazelcast属性(或系统属性)- 有关详细信息,请参见参考手册
  • 通过将属性设置为,指定应使用的网络接口(doc),并禁用对所有本地接口的绑定。通常,您的生产集群在受信任的LAN环境中运行,因此您希望使其只能在该LAN中访问。hazelcast.socket.bind.any``false
  • 组播发现机制(doc)还添加了<trusted-interfaces>配置,可以为您提供帮助。您正在使用TCP发现,因此它不适用于您的情况。

最后说明:在Hazelcast开源版本中未选中组密码字段!



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

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

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

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

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