从 Elasticsearch 6.8.0 和 7.1.0 开始,Elastic 将基本的安全功能(如用户身份验证和角色管理)包含在免费基础版(Basic license)中。
在这之前的版本中 X-Pack 安全功能在基础版中不可用,需要付费许可证。你可以申请一个 30 天的试用许可证来体验这些功能。
测试版本 Elasticsearch 6.8.6
配置用户名密码
启用 X-Pack 安全功能
在 elasticsearch.yml 配置文件中,添加以下配置来启用基本安全功能:
xpack.security.enabled: true
启动 Elasticsearch
启动或重启 Elasticsearch:
bin/elasticsearch
如果你使用系统服务:
sudo systemctl restart elasticsearch
设置内置用户的密码
运行以下命令来设置内置用户的密码:
bin/elasticsearch-setup-passwords interactive
该命令会提示你设置几个内置用户(如 elastic、kibana、logstash_system 等)的密码。
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
验证配置
完成后,你可以使用设置的用户名和密码来连接 Elasticsearch 以验证配置。例如:
curl -u elastic:yourpassword http://localhost:9200
这将使用用户名 elastic 和你设置的密码来进行身份验证。
启用SSL
当设置了 network.host: 0.0.0.0
之后,es会无法启动,要求你配置SSL
使用 elasticsearch-certutil 工具生成自签名证书以及相关配置如下:
生成 CA 证书
CA 证书是用来签署其他证书的。它被用作信任的根证书,能签发节点证书、客户端证书等。
它的主要作用是建立一个信任链,确保被签名的证书是可信的。
运行 elasticsearch-certutil ca 命令:
bin/elasticsearch-certutil ca
你将被提示输入证书相关的信息。一般情况下,可以直接按 Enter 使用默认值。
选择输出格式:
你会看到如下提示:
Please enter the desired output file [elastic-stack-ca.p12]:
输入文件名或按 Enter 使用默认文件名 elastic-stack-ca.p12。
接下来你会看到:
Enter password for elastic-stack-ca.p12 :
输入一个密码并记住它,你将在稍后使用。
最终,你会看到如下信息:
CA certificate written to /path/to/elasticsearch/bin/elastic-stack-ca.p12
生成节点证书
节点证书是由 CA 签署的证书,用于标识和加密特定节点(如服务器、客户端)
它包括节点的公钥和其他身份信息,并由 CA 证书签名,证明其真实性。
运行 elasticsearch-certutil cert 命令并指定 CA 证书:
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
你将被提示输入 CA 证书的密码(之前设置的密码)。
选择输出格式:
你会看到如下提示:
Please enter the desired output file [elastic-certificates.p12]:
输入文件名或按 Enter 使用默认文件名 elastic-certificates.p12。
接下来你会看到:
Enter password for elastic-certificates.p12 :
输入一个密码并记住它,你将在配置 Elasticsearch 时使用它。
最终,你会看到如下信息:
Certificate written to /path/to/elasticsearch/bin/elastic-certificates.p12
配置 Elasticsearch 使用生成的证书
将证书文件移动到配置目录
将生成的证书文件 elastic-certificates.p12 移动到 Elasticsearch 配置目录(如 /etc/elasticsearch 或 config 目录)。
编辑 elasticsearch.yml 文件
在 elasticsearch.yml 文件中添加或修改以下配置项
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /path/to/your/config/elastic-certificates.p12
xpack.security.transport.ssl.keystore.password: your-password
xpack.security.transport.ssl.truststore.path: /path/to/your/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.password: your-password
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: /path/to/your/config/elastic-certificates.p12
xpack.security.http.ssl.keystore.password: your-password
xpack.security.http.ssl.truststore.path: /path/to/your/config/elastic-certificates.p12
xpack.security.http.ssl.truststore.password: your-password
其中 /path/to/your/config/elastic-certificates.p12 替换为你的证书文件路径,your-password 替换为你在生成证书时设置的密码。
重启并访问
修改配置文件后,重启 Elasticsearch 服务以使更改生效。
然后使用https访问,如:
https://127.0.0.1:9200/
然后在浏览器中信任这个证书
会弹出用户名密码输入框,用户可以用elastic,密码就是上面设置的
会提示不安全“您的连接不是私密连接”,点高级,选择继续前往
可以查看证书相关信息,CN是instance,有效期是3年
其他
设置密码时提示需要License
设置密码 报错了:“Please check if you have installed a license that allows access to X-Pack Security feature.”
你的版本太老了,许可证不支持 X-Pack 安全功能
查看许可证
curl -X GET "http://localhost:9200/_xpack/license"
如:
{
license: {
status: "active",
uid: "ae895865-22d6-42e5-aaa0-66b78a65d885",
type: "basic",
issue_date: "2023-09-11T09:15:37.704Z",
issue_date_in_millis: 1694423737704,
max_nodes: 1000,
issued_to: "elasticsearch",
issuer: "elasticsearch",
start_date_in_millis: -1
}
}
启动时报错
ERROR: [1] bootstrap checks failed
[1]: Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]
当设置了绑定主机时,需要配置ssl
network.host: 0.0.0.0