为 Elastic Stack 设置基本安全性编辑

首次启动 Elasticsearch 时,会为 elastic 用户生成密码,并自动为您配置 TLS。如果您在启动 Elasticsearch 节点之前手动配置安全性,则自动配置过程将尊重您的安全性配置。您可以随时调整 TLS 配置,例如 更新节点证书

如果您的集群有多个节点,则必须在节点之间配置 TLS。 生产模式 集群在您未启用 TLS 的情况下将无法启动。

传输层依赖于双向 TLS 来对节点进行加密和身份验证。正确应用 TLS 可确保恶意节点无法加入集群并与其他节点交换数据。虽然在 HTTP 层实现用户名和密码身份验证对于保护本地集群很有用,但节点之间通信的安全性需要 TLS。

在节点之间配置 TLS 是防止未经授权的节点访问您的集群的基本安全设置。

生成证书颁发机构编辑

您可以在集群中添加任意数量的节点,但它们必须能够相互通信。集群中节点之间的通信由传输模块处理。为了保护您的集群,您必须确保节点间通信是加密和验证的,这可以通过双向 TLS 实现。

在安全集群中,Elasticsearch 节点使用证书在与其他节点通信时识别自身。

集群必须验证这些证书的真实性。建议的方法是信任特定的证书颁发机构 (CA)。当节点添加到您的集群时,它们必须使用由同一 CA 签名的证书。

对于传输层,我们建议使用单独的专用 CA,而不是现有的可能共享的 CA,以便严格控制节点成员资格。使用 elasticsearch-certutil 工具为您的集群生成 CA。

  1. 在启动 Elasticsearch 之前,请在任何单个节点上使用 elasticsearch-certutil 工具为您的集群生成 CA。

    ./bin/elasticsearch-certutil ca
    1. 出现提示时,接受默认文件名,即 elastic-stack-ca.p12。此文件包含您的 CA 的公钥证书以及用于为每个节点签名证书的私钥。
    2. 为您的 CA 输入密码。如果您未部署到生产环境,可以选择将密码留空。
  2. 在任何单个节点上,为集群中的节点生成证书和私钥。您需要包含在上一步中生成的 elastic-stack-ca.p12 输出文件。

    ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
    --ca <ca_file>

    用于签名证书的 CA 文件的名称。elasticsearch-certutil 工具的默认文件名是 elastic-stack-ca.p12

    1. 输入您的 CA 密码,或者如果您在上一步中未配置密码,请按 Enter 键。
    2. 为证书创建密码并接受默认文件名。

      输出文件是一个名为 elastic-certificates.p12 的密钥库。此文件包含节点证书、节点密钥和 CA 证书。

  3. 在集群中的 每个 节点上,将 elastic-certificates.p12 文件复制到 $ES_PATH_CONF 目录。

使用 TLS 加密节点间通信编辑

传输网络层用于集群中节点之间的内部通信。启用安全功能后,您必须使用 TLS 来确保节点之间的通信是加密的。

现在您已经生成了证书颁发机构和证书,您将更新您的集群以使用这些文件。

Elasticsearch 监控所有配置为 TLS 相关节点设置值的证书、密钥、密钥库或信任库等文件。如果您更新了这些文件中的任何一个,例如当您的主机名更改或您的证书即将过期时,Elasticsearch 会重新加载它们。这些文件以由全局 Elasticsearch resource.reload.interval.high 设置确定的频率轮询更改,该设置默认为 5 秒。

完成以下步骤 针对集群中的每个节点。要加入同一个集群,所有节点必须共享相同的 cluster.name 值。

  1. 打开 $ES_PATH_CONF/elasticsearch.yml 文件并进行以下更改

    1. 添加 cluster-name 设置并输入您的集群的名称

      cluster.name: my-cluster
    2. 添加 node.name 设置并输入节点的名称。节点名称在 Elasticsearch 启动时默认为机器的主机名。

      node.name: node-1
    3. 添加以下设置以启用节点间通信并提供对节点证书的访问权限。

      因为您在集群中的每个节点上都使用相同的 elastic-certificates.p12 文件,所以将验证模式设置为 certificate

      xpack.security.transport.ssl.enabled: true
      xpack.security.transport.ssl.verification_mode: certificate 
      xpack.security.transport.ssl.client_authentication: required
      xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
      xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

      如果您要使用主机名验证,请将验证模式设置为 full。您应该为每个与 DNS 或 IP 地址匹配的主机生成不同的证书。请参阅 TLS 设置 中的 xpack.security.transport.ssl.verification_mode 参数。

  2. 如果您在创建节点证书时输入了密码,请运行以下命令将密码存储在 Elasticsearch 密钥库中

    ./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
    ./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
  3. 完成集群中每个节点的先前步骤。
  4. 在集群中的 每个 节点上,启动 Elasticsearch。 启动停止 Elasticsearch 的方法因您安装它的方式而异。

    例如,如果您使用存档分发版(tar.gz.zip)安装了 Elasticsearch,则可以在命令行中输入 Ctrl+C 来停止 Elasticsearch。

    您必须执行完全集群重启。配置为使用 TLS 进行传输的节点无法与使用未加密传输连接的节点通信(反之亦然)。

下一步是什么?编辑

恭喜!您已经加密了集群中节点之间的通信,并且可以通过 TLS 引导检查

要添加另一层安全性,请 为 Elastic Stack 设置基本安全性以及安全 HTTPS 流量。除了在 Elasticsearch 集群的传输接口上配置 TLS 之外,您还将在 Elasticsearch 和 Kibana 的 HTTP 接口上配置 TLS。