根据Hazelcast manual,为了使用EC2自动发现,需要在配置文件中提供AWS凭证。 当在IAM角色中启动的EC2实例上托管时,Hazelcast可以使用一种方法来检索临时凭证(根据AWS最佳实践"Use Temporary Security Credentials (IAM Roles) Instead of Long-Term Access Keys")
答案 0 :(得分:4)
我花了一段时间才找到合适的信息。诚然,明确指定IP地址的工作原理同样如此,除非您的集群由数百个节点组成,手动键入所有这些节点。
指定AWS标记名称/值对是可选的。我有点偏执,我可能会错误地加入另一个集群,显然创建这样的资源(服务器)组总是更好。
首先,您需要创建一个具有Hazelcast所需的最小权限的IAM用户。显然,您不想使用root用户凭据。
使用AWS控制台。它位于右上角的用户名下拉列表中(帐户设置所在的位置)。单击Security Credentials,然后单击Groups。使用以下策略创建组:
{
"Version": "xxxxxxx",
"Statement": [
{
"Sid": "xxxxxx",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances"
],
"Resource": [
"*"
]
}
]
}
正如您所看到的,Hazelcast需要的唯一权限是" DescribeInstances"。我偶然发现了它 - 深入Fuad Malikov的Q& A线程中。
其余的都是微不足道的。创建IAM用户,例如" hazelcast"使用该安全组,并下载(导出)其凭据,您应将其放入Hazelcast配置中,如下所示。我正在使用Spring,但是有一对一的映射到经典的Hazelcast配置文件。或者您可以以编程方式设置这些属性 - Spring基本上为我做了。
<property name="properties">
<props>
<prop key="hazelcast.icmp.enabled">true</prop>
</props>
</property>
<property name="join">
<bean class="com.hazelcast.config.JoinConfig">
<property name="multicastConfig">
<bean class="com.hazelcast.config.MulticastConfig">
<property name="enabled" value="false"/>
</bean>
</property>
<property name="tcpIpConfig">
<bean class="com.hazelcast.config.TcpIpConfig">
<property name="enabled" value="false"/>
</bean>
</property>
<property name="awsConfig">
<bean class="com.hazelcast.config.AwsConfig">
<property name="enabled" value="true"/>
<property name="region" value="us-west-2"/>
<property name="accessKey" value="zzzzzzz"/>
<property name="secretKey" value="yyyyyyy"/>
<property name="tagKey" value="your-instance-tag-key"/>
<property name="tagValue" value="your-instance-tag-value"/>
</bean>
</property>
</property>
答案 1 :(得分:1)
目前Hazelcast尚不支持IAM角色身份验证,但计划在新发现SPI到位后实施。