赞
踩
在官方文档中有这么一段
“You can add as many nodes as you want in a cluster but they must be able to communicate with each other. The communication between nodes in a cluster is handled by the transport module. To secure your cluster, you must ensure that internode communications are encrypted and verified, which is achieved with mutual TLS.
In a secured cluster, Elasticsearch nodes use certificates to identify themselves when communicating with other nodes.
The cluster must validate the authenticity of these certificates. The recommended approach is to trust a specific certificate authority (CA). When nodes are added to your cluster they must use a certificate signed by the same CA.
For the transport layer, we recommend using a separate, dedicated CA instead of an existing, possibly shared CA so that node membership is tightly controlled. Use the elasticsearch-certutil
tool to generate a CA for your cluster.”
总结意思就是,在一个正常的安全的集群中,Elasticsearch节点在与其他节点通信时使用证书来标识自己。集群必须验证这些证书的真实性。推荐的方法是信任特定的证书颁发机构(CA),将节点添加到集群时,它们必须使用由同一CA签名的证书。对于传输层,我们建议使用单独的专用CA,而不是现有的、可能共享的CA,以便严格控制节点成员身份。使用elasticsearch certutil工具为集群生成CA。
其中的重点就是:
NODE节点通过CA颁发的证书来互相验证自己的身份;
ES集群中各个NODE间需要使用同一CA颁发的证书;
可以通过ES内置的elasticsearch-certutil生成CA证书。
了解了ES证书配置的大概要求以及生成方式之后就可以着手开始进行证书文件的配置了。分为以下步骤。
1.生成CA(certificate agent)
注意执行此步骤的时候需要在你当前NODE节点启动之前,不然在ES服务运行状态下执行会失败
./bin/elasticsearch-certutil ca
2.生成具体证书及密钥文件
在集群中任意一台节点中输入以下命令生成证书文件
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
运行此命令以后会出现一个提示,是否接受默认认的证书名字,即elastic-stack-ca.p12。此文件包含CA的公共证书和用于为每个节点签署证书的私钥。确认完之后会要求输入证书文件的密码,当然此时可以直接回车跳过并设置为空。
3.把第二步中生成的elastic-stack-ca.p12上传到每一台节点服务器中
4.修改elasticsearch.yml文件
之前在ELASTICSEARCH CLUSTER 集群搭建总结-CSDN博客已经介绍过了基本的集群的.yml文件配置,这里不再赘述。只需要把以下配置添加到之前的.yml文件中
- #是否开启ssl证书校验
- xpack.security.transport.ssl.enabled: true
- #校验模式,分为certificate和full两种模式
- xpack.security.transport.ssl.verification_mode: certificate
- #如果为required,则通过client方式连接也需要通过证书校验
- xpack.security.transport.ssl.client_authentication: required
- #这里是对应.p12证书文件的路径
- xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
- #同上
- xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
这里需要注意的是,因为我们这一篇中每一台ES node使用的都是同一份elastic-stack-ca.p12证书文件,所以在xpack.security.transport.ssl.verification_mode这个配置中我们使用的是certificate模式。而如果有为每一台ES节点生成单独的证书文件的需求的话,或者说需要为为每个主机生成与DNS或IP地址匹配的不同证书的话,需要把这个模式设置为full,full模式的详情可以参考官方文档Security settings in Elasticsearch | Elasticsearch Guide [8.11] | Elastic
5.在第二步中有提到说生成CA证书密钥文件的时候会提示你设置密码,如果设置了密码的话需要将密码存储到对应的ES的密钥库中
-
- ./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
- ${keystore passwod}
-
- ./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
- ${truststore passwod}
到这里就配置完成了,此时通过浏览器http直接访问ES node节点已经访问不了了。此时需要通过https访问,并且访问的时候会提示输入用户名及密码。关于这里的用户名及密码是对应的ES内置的用户名和密码,输入即可成功方位。ES内置有一个名字叫'elastic'的用户,在你第一次配置好ES节点并且启动的时候在启动日志里面会将这个用户名和密码打印在启动日志里面,如果忘记保存的话也不要紧,可以通过ES内置的命令去设置密码。
bin/elasticsearch-setup-passwords auto|interactive -u ${username}
其中auto意思为自动生成随机的密码,interactive模式为交互式的允许用户自定义密码,后面接用户名即可。
同时,如果不想使用ES内置的用户,也可以自己手动添加用户
bin/elasticsearch-users useradd stefen -p stefenpassword -r superuser
输入上面命令即可生成一个账户名为“stefen”密码为“stefenpassword”角色权限为superuser的账号了。有了账号密码之后就可以直接通过浏览器使用https访问,在弹出的账号密码输入框中输入内置用户或者自己添加的用户名及密码即可访问,如下
即可登录成功便可查看到对应ES集群信息。
对应的java elasticsearch-client方式的连接方式在ES查询(Java)-CSDN博客
已经详细说明过,这里不再赘述。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。