安装完成后,默认情况下 ElasticSearch 不提供任何安全防护。为了确保集群数据的安全性,需要进行以下安全配置:
基本要求
- 身份认证
- 鉴定用户身份是否合法。
- 用户鉴权
- 设置哪个用户可以访问哪些索引,并规定具体的权限。
- 传输加密
- 确保集群间的通信通过 HTTPS 加密,防止数据被窃听。
- 日志审计
- 对所有操作进行审计,以便追溯和监控操作历史。
免费解决方案
以下是一些可以考虑的免费安全解决方案:
- 使用社区提供的安全插件,如 Search Guard 或 Readonly REST。
- 通过设置 nginx 反向代理,利用 nginx 的 auth_basic 模块实现基本的认证。
- 使用 X-Pack 的 Basic 版本(从 ES 6.8 和 ES 7.0 开始,包含部分免费的安全功能)。
X-Pack 的安全功能
X-Pack 提供了强大的安全功能,包括内置和外置 Realms,
- 内置 Realms:用户名和密码保存在 ElasticSearch 中,属于免费功能。
- 外置 Realms:需要连接到 LDAP、Active Directory、PKI、SAML 或 Kerberos 进行统一认证,属于收费功能。
以及基于角色的访问控制(RBAC)。
分配的这些权限,包括 索引级 字段级 集群级
X-PACK 中内置了一些用户和角色
当打开Security 功能后,可以通过Security api进行创建用户和角色
X-Pack配置步骤概述
- 设置集群间通信的加密
# 为集群创建一个CA机构
elasticsearch-certutil ca
# 通过CA颁发证书
elasticsearch-certutil cert –ca elastic-stack-ca.p12
# 添加证书到keystore
elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
# 移动证书文件到config目录
mv elastic-certificates.p12 elastic-stack-ca.p12 ./config/ - 修改Elasticsearch.yml配置文件
# 开启X-Pack认证
xpack.security.enabled: true
# 开启加密通信
xpack.security.transport.ssl.enabled: true
# 设置认证方式为证书
xpack.security.transport.ssl.verification_mode: certificate
# 指定证书路径
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12 - 设置访问密码
# 使用安全API设置内置账户密码
bin/elasticsearch-setup-passwords interactive
注意事项
- 上述步骤中,涉及到证书的生成和配置,确保在所有节点上都按照相同的步骤进行操作,以确保集群间通信的一致性和安全性。
- 对于更高级的安全需求(如LDAP、Active Directory等外置Realms),可能需要考虑使用收费版本的X-Pack或者第三方安全插件如Search Guard。