防止未经授权的成员加入 Hazelcast 集群
Preventing unauthorized member for joining Hazelcast cluster
我们正在更改我们的一个应用程序以使用 Hazelcast 3.11 社区版,并在一些主机上 运行ning 的多个 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 企业版。检查功能列表:
如果你只需要防止任意机器连接到你的集群,那么开源版有几个选项:
- 为每个集群使用唯一的组名;
- 作为额外的保护级别,您可以在配置中定义验证令牌 - 只需设置
hazelcast.application.validation.token
Hazelcast 属性(或系统 属性) - 查看 reference manual 详情
- 指定应使用哪些网络接口 (doc) 并通过将
hazelcast.socket.bind.any
属性 设置为 false
来禁用绑定到所有本地接口。通常,您的生产集群在受信任的 LAN 环境中运行,因此您希望使其只能在该 LAN 中访问。
- 多播发现机制(doc)还添加了
<trusted-interfaces>
配置,这可以帮助你。您正在使用 TCP 发现,因此它对您的方案无效。
最后说明:Hazelcast 开源版没有勾选组密码字段!
我们正在更改我们的一个应用程序以使用 Hazelcast 3.11 社区版,并在一些主机上 运行ning 的多个 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 企业版。检查功能列表:
如果你只需要防止任意机器连接到你的集群,那么开源版有几个选项:
- 为每个集群使用唯一的组名;
- 作为额外的保护级别,您可以在配置中定义验证令牌 - 只需设置
hazelcast.application.validation.token
Hazelcast 属性(或系统 属性) - 查看 reference manual 详情 - 指定应使用哪些网络接口 (doc) 并通过将
hazelcast.socket.bind.any
属性 设置为false
来禁用绑定到所有本地接口。通常,您的生产集群在受信任的 LAN 环境中运行,因此您希望使其只能在该 LAN 中访问。 - 多播发现机制(doc)还添加了
<trusted-interfaces>
配置,这可以帮助你。您正在使用 TCP 发现,因此它对您的方案无效。
最后说明:Hazelcast 开源版没有勾选组密码字段!