自动启用安全功能启动Elastic Stack
edit自动启用安全功能启动Elastic Stack
edit当您首次启动 Elasticsearch 时,会自动进行以下安全配置:
- 证书和密钥 为传输层和HTTP层生成。
-
TLS配置设置被写入
elasticsearch.yml
。 -
为
elastic
用户生成一个密码。 - 为Kibana生成一个注册令牌。
然后,您可以启动 Kibana 并输入有效期为 30 分钟的注册令牌。此令牌会自动应用来自 Elasticsearch 集群的安全设置,使用内置的 kibana
服务账户向 Elasticsearch 进行身份验证,并将安全配置写入 kibana.yml
。
在某些情况下,安全无法自动配置,因为节点启动过程检测到该节点已经是集群的一部分,或者安全已经配置或明确禁用。
先决条件
edit启动Elasticsearch并启用安全功能注册Kibana
edit-
从安装目录启动 Elasticsearch。
bin/elasticsearch
该命令打印出
elastic
用户的密码以及Kibana的注册令牌。 -
复制生成的
elastic
密码和注册令牌。这些凭证仅在您首次启动 Elasticsearch 时显示。如果您需要重置
elastic
用户或其他内置用户的密码,请运行elasticsearch-reset-password
工具。 要为Kibana或Elasticsearch节点生成新的注册令牌,请运行elasticsearch-create-enrollment-token
工具。 这些工具可以在Elasticsearch的bin
目录中找到。我们建议将
elastic
密码存储为 shell 中的环境变量。示例:export ELASTIC_PASSWORD="your_password"
-
(可选) 打开一个新的终端,并通过进行身份验证的调用来验证您可以连接到您的 Elasticsearch 集群。
curl --cacert config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
-
从您安装Kibana的目录中,启动Kibana。
bin/kibana
-
使用交互模式或分离模式注册 Kibana。
-
交互模式(浏览器)
- 在您的终端中,点击生成的链接以在您的浏览器中打开Kibana。
-
在您的浏览器中,粘贴您复制的注册令牌并点击按钮,以将您的Kibana实例与Elasticsearch连接。
如果Kibana检测到Elasticsearch的现有凭证(
elasticsearch.username
和elasticsearch.password
)或现有的URL用于elasticsearch.hosts
,它将不会进入交互模式。
-
分离模式(非浏览器)
运行
kibana-setup
工具,并使用--enrollment-token
参数传递生成的注册令牌。bin/kibana-setup --enrollment-token
-
在您的集群中注册额外的节点
edit当Elasticsearch首次启动时,安全自动配置过程将HTTP层绑定到0.0.0.0
,但仅将传输层绑定到localhost。这种预期行为确保您可以在默认情况下启用安全性的情况下启动单节点集群,而无需任何额外配置。
在注册新节点之前,通常需要在生产集群中执行一些额外操作,例如绑定到除 localhost
以外的地址或满足引导检查。在此期间,自动生成的注册令牌可能会过期,这就是为什么注册令牌不会自动生成的原因。
此外,只有位于同一主机上的节点可以在无需额外配置的情况下加入集群。如果您希望来自其他主机的节点加入您的集群,您需要将transport.host
设置为支持的值(例如取消注释建议的0.0.0.0
值),或绑定到其他主机可以访问的接口的IP地址。更多信息请参阅传输设置。
要在集群中注册新节点,请在集群中的任何现有节点上使用elasticsearch-create-enrollment-token
工具创建一个注册令牌。然后,您可以使用--enrollment-token
参数启动一个新节点,使其加入现有集群。
-
在运行 Elasticsearch 的终端之外,导航到您安装 Elasticsearch 的目录,并运行
elasticsearch-create-enrollment-token
工具以生成新节点的注册令牌。bin/elasticsearch-create-enrollment-token -s node
复制注册令牌,您将使用该令牌在您的 Elasticsearch 集群中注册新节点。
-
从您的新节点的安装目录中,启动 Elasticsearch 并使用
--enrollment-token
参数传递注册令牌。bin/elasticsearch --enrollment-token
Elasticsearch 会自动在以下目录中生成证书和密钥:
config/certs
- 重复上一步,以注册您想要加入的任何新节点。
连接客户端到 Elasticsearch
edit当您首次启动 Elasticsearch 时,TLS 会自动为 HTTP 层配置。CA 证书会生成并存储在磁盘上的以下位置:
/etc/elasticsearch/certs/http_ca.crt
此证书的十六进制编码的 SHA-256 指纹也会输出到终端。任何连接到 Elasticsearch 的客户端,例如 Elasticsearch 客户端、 Beats、独立的 Elastic Agents 和 Logstash,都必须验证它们信任 Elasticsearch 用于 HTTPS 的证书。Fleet Server 和 Fleet 管理的 Elastic Agents 会自动配置为信任 CA 证书。其他客户端可以通过使用 CA 证书的指纹或 CA 证书本身来建立信任。
如果自动配置过程已经完成,您仍然可以获取安全证书的指纹。您还可以将CA证书复制到您的机器并配置您的客户端以使用它。
使用 CA 指纹
edit复制Elasticsearch启动时输出到终端的指纹值,并配置您的客户端使用此指纹在连接到Elasticsearch时建立信任。
如果自动配置过程已经完成,您仍然可以通过运行以下命令获取安全证书的指纹。路径是HTTP层自动生成的CA证书的路径。
openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt
该命令返回安全证书,包括指纹。
issuer
应为 Elasticsearch security auto-configuration HTTP CA
。
issuer= /CN=Elasticsearch security auto-configuration HTTP CA SHA256 Fingerprint=<fingerprint>
使用 CA 证书
edit如果您的库不支持验证指纹的方法,则自动生成的CA证书将创建在每个Elasticsearch节点上的以下目录中:
/etc/elasticsearch/certs/http_ca.crt
将 http_ca.crt
文件复制到您的机器,并配置您的客户端使用此证书在连接到 Elasticsearch 时建立信任。
下一步是什么?
edit恭喜!您已成功启用安全功能启动了 Elastic Stack。 Elasticsearch 和 Kibana 在 HTTP 层上使用 TLS 进行安全保护,并且节点间通信已加密。如果您想为 Web 流量启用 HTTPS,您可以 加密浏览器与 Kibana 之间的流量。
安全证书和密钥
edit当您安装 Elasticsearch 时,以下证书和密钥会在 Elasticsearch 配置目录中生成,这些证书和密钥用于将 Kibana 实例连接到您的安全 Elasticsearch 集群并加密节点间通信。此处列出这些文件以供参考。
-
http_ca.crt
- 用于签署此Elasticsearch集群HTTP层证书的CA证书。
-
http.p12
- 包含此节点的HTTP层密钥和证书的密钥库。
-
transport.p12
- 包含用于集群中所有节点的传输层的密钥和证书的密钥库。
http.p12
和 transport.p12
是受密码保护的 PKCS#12 密钥库。Elasticsearch 将这些密钥库的密码存储为 安全设置。要检索密码以便您可以检查或更改密钥库内容,请使用 bin/elasticsearch-keystore
工具。
使用以下命令来检索http.p12
的密码:
bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
使用以下命令来检索transport.p12
的密码:
bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password
此外,当您使用注册令牌将 Kibana 连接到安全的 Elasticsearch 集群时,HTTP 层 CA 证书会从 Elasticsearch 中检索并存储在 Kibana 的 /data
目录中。此文件建立了 Kibana 与 Elasticsearch 证书颁发机构 (CA) 之间的 HTTP 层信任。
跳过安全自动配置的情况
edit当你首次启动 Elasticsearch 时,节点启动过程会尝试自动为你配置安全性。该过程会运行一些检查来确定:
- 如果这是节点第一次启动
- 是否已经配置了安全设置
- 启动过程是否可以修改节点配置
如果这些检查中的任何一个失败,这表明你可能已经手动配置了安全,或者不希望安全自动配置。在这种情况下,节点将使用现有的配置正常启动。
如果你将 Elasticsearch 输出重定向到一个文件,安全自动配置将被跳过。 自动配置的凭证只能在第一次启动 Elasticsearch 时在终端上查看。 如果你需要将输出重定向到一个文件,第一次启动 Elasticsearch 时不要重定向输出, 并在所有后续启动时使用重定向。
检测到现有环境
edit如果某些目录已经存在,这强烈表明该节点之前已经启动过。同样,如果某些文件不存在,或者我们无法读取或写入特定文件或目录,那么我们可能没有以安装Elasticsearch的用户或管理员施加的限制运行。如果以下任何环境检查为真,则不会自动配置安全性。
-
The Elasticsearch
/data
directory exists and isn’t empty - 此目录的存在强烈表明该节点之前已启动,并且可能已经是集群的一部分。
-
The
elasticsearch.yml
file doesn’t exist (or isn’t readable), or theelasticsearch.keystore
isn’t readable - 如果这些文件中的任何一个不可读,我们将无法确定Elasticsearch安全功能是否已启用。这种情况也可能表明节点启动过程没有以具有足够权限的用户身份运行来修改节点配置。
- The Elasticsearch configuration directory isn’t writable
- 此状态可能表明管理员将此目录设置为只读, 或者启动 Elasticsearch 的用户不是安装 Elasticsearch 的用户。
检测到现有设置
edit以下设置与安全自动配置不兼容。如果存在这些设置中的任何一个,节点启动过程将跳过自动配置安全,并且节点将正常启动。
-
node.roles
设置为一个值,其中节点不能被选为master
,或者如果节点不能保存数据 -
xpack.security.autoconfiguration.enabled
设置为false
-
xpack.security.enabled
已设置值 -
xpack.security.transport.ssl.*
或xpack.security.http.ssl.*
设置在elasticsearch.yml
配置文件或elasticsearch.keystore
中已设置值 -
任何
发现和集群形成设置discovery.type
、discovery.seed_hosts
或cluster.initial_master_nodes
的值已设置当
discovery.type
设置为single-node
,或者当cluster.initial_master_nodes
存在但仅包含当前节点的名称时,会出现异常。