自动启用安全功能启动Elastic Stack

edit

自动启用安全功能启动Elastic Stack

edit

当您首次启动 Elasticsearch 时,会自动进行以下安全配置:

  • 证书和密钥 为传输层和HTTP层生成。
  • TLS配置设置被写入 elasticsearch.yml
  • elastic 用户生成一个密码。
  • 为Kibana生成一个注册令牌。

然后,您可以启动 Kibana 并输入有效期为 30 分钟的注册令牌。此令牌会自动应用来自 Elasticsearch 集群的安全设置,使用内置的 kibana 服务账户向 Elasticsearch 进行身份验证,并将安全配置写入 kibana.yml

某些情况下,安全无法自动配置,因为节点启动过程检测到该节点已经是集群的一部分,或者安全已经配置或明确禁用。

先决条件

edit
  • 下载 并解压适用于您环境的 elasticsearch 包分发版。
  • 下载 并解压适用于您环境的 kibana 包分发版。

启动Elasticsearch并启用安全功能注册Kibana

edit
  1. 从安装目录启动 Elasticsearch。

    bin/elasticsearch

    该命令打印出elastic用户的密码以及Kibana的注册令牌。

  2. 复制生成的 elastic 密码和注册令牌。这些凭证仅在您首次启动 Elasticsearch 时显示。

    如果您需要重置elastic用户或其他内置用户的密码,请运行elasticsearch-reset-password工具。 要为Kibana或Elasticsearch节点生成新的注册令牌,请运行elasticsearch-create-enrollment-token工具。 这些工具可以在Elasticsearch的bin目录中找到。

    我们建议将 elastic 密码存储为 shell 中的环境变量。示例:

    export ELASTIC_PASSWORD="your_password"
  3. (可选) 打开一个新的终端,并通过进行身份验证的调用来验证您可以连接到您的 Elasticsearch 集群。

    curl --cacert config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
  4. 从您安装Kibana的目录中,启动Kibana。

    bin/kibana
  5. 使用交互模式或分离模式注册 Kibana。

    • 交互模式(浏览器)

      1. 在您的终端中,点击生成的链接以在您的浏览器中打开Kibana。
      2. 在您的浏览器中,粘贴您复制的注册令牌并点击按钮,以将您的Kibana实例与Elasticsearch连接。

        如果Kibana检测到Elasticsearch的现有凭证(elasticsearch.usernameelasticsearch.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参数启动一个新节点,使其加入现有集群。

  1. 在运行 Elasticsearch 的终端之外,导航到您安装 Elasticsearch 的目录,并运行 elasticsearch-create-enrollment-token 工具以生成新节点的注册令牌。

    bin/elasticsearch-create-enrollment-token -s node

    复制注册令牌,您将使用该令牌在您的 Elasticsearch 集群中注册新节点。

  2. 从您的新节点的安装目录中,启动 Elasticsearch 并使用 --enrollment-token 参数传递注册令牌。

    bin/elasticsearch --enrollment-token 

    Elasticsearch 会自动在以下目录中生成证书和密钥:

    config/certs
  3. 重复上一步,以注册您想要加入的任何新节点。

连接客户端到 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.p12transport.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 the elasticsearch.keystore isn’t readable
如果这些文件中的任何一个不可读,我们将无法确定Elasticsearch安全功能是否已启用。这种情况也可能表明节点启动过程没有以具有足够权限的用户身份运行来修改节点配置。
The Elasticsearch configuration directory isn’t writable
此状态可能表明管理员将此目录设置为只读, 或者启动 Elasticsearch 的用户不是安装 Elasticsearch 的用户。

检测到现有设置

edit

以下设置与安全自动配置不兼容。如果存在这些设置中的任何一个,节点启动过程将跳过自动配置安全,并且节点将正常启动。