在使用ElasticSearch时,确保数据的安全性至关重要。启用SSL(Secure Sockets Layer)和权限控制是保护数据传输安全和限制访问的重要手段。下面将详细介绍如何在ElasticSearch中配置SSL以及如何设置权限控制。
首先,你需要一个SSL/TLS证书。你可以从受信任的证书颁发机构(CA)购买,或者为了测试目的生成自签名证书。
可以使用OpenSSL工具来生成自签名证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
这将生成一个有效期为一年的证书。
编辑elasticsearch.yml文件:
找到你的ElasticSearch安装目录下的config/elasticsearch.yml
文件,并添加或修改以下内容:
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: /path/to/your/key.pem
xpack.security.http.ssl.certificate: /path/to/your/cert.pem
xpack.security.http.ssl.certificate_authorities: ["/path/to/your/ca.pem"]
重启ElasticSearch服务: 完成上述配置后,重启ElasticSearch以使更改生效。
ElasticSearch内置了X-Pack插件,提供了安全、监控、警报等功能。启用安全功能需要激活X-Pack中的安全模块。
编辑elasticsearch.yml: 确保以下配置存在并启用:
xpack.security.enabled: true
设置密码:
使用elasticsearch-setup-passwords
命令为内置用户设置密码:
bin/elasticsearch-setup-passwords interactive
这将提示你为多个内置角色(如elastic
, kibana
, logstash_system
等)设置密码。
通过创建特定的角色和用户,可以更精细地控制谁可以访问哪些资源。
可以通过Elasticsearch API创建角色。例如,创建一个只能读取索引的用户角色:
PUT _security/role/read_only_role
{
"cluster": [],
"indices": [
{
"names": ["logs-*"],
"privileges": ["read"]
}
]
}
创建一个新用户并将上述角色分配给它:
PUT _security/user/johndoe
{
"password" : "strong_password",
"roles" : ["read_only_role"],
"full_name" : "John Doe"
}
如果你使用Kibana与ElasticSearch交互,也需要在Kibana中启用安全功能。
编辑kibana.yml: 添加或修改以下内容:
elasticsearch.username: "kibana_system"
elasticsearch.password: "your_kibana_system_password"
elasticsearch.ssl.certificateAuthorities: ["/path/to/your/ca.pem"]
重启Kibana服务: 应用更改后重启Kibana。