12.3 确保 Elasticsearch 中数据的安全

Elasticsearch 群集节点可由不同客户端访问,如:

  • Sentinel:提取事件数据并在事件可视化仪表板中显示。

  • 在 YARN NodeManager 节点运行的 Spark 作业:对从 Kafka 接收的事件执行批量索引。(针对 SSDM)

  • Collector Manager:对具有传统储存的 Sentinel 中的事件执行批量索引。

  • 其他外部客户端:执行自定义操作,例如自定义分析。

Sentinel 为 Elasticsearch 提供名为 elasticsearch-security-plugin 的安全插件,该插件可鉴定和授予对 Elasticsearch 的访问权限。

根据客户端的连接方式,插件使用 SAML 令牌或白名单进行验证:

  • 当客户端与请求一同发送 SAML 令牌时,插件针对 Sentinel 鉴定服务器鉴定令牌。鉴定成功后,插件仅允许客户端访问其具备访问权限的的筛选事件。

    例如,事件可视化仪表板(客户端)仅显示来自 Elasticsearch、用户角色有权查看的那些事件。

    有关角色和权限的相关信息,请参见 Sentinel 管理指南中的创建角色。

  • 客户端无法发送 SAML 令牌时,插件检查其合法客户端的白名单。验证成功后,插件允许访问所有事件,无需筛选。

  • 客户端不发送有效 SAML 令牌或白名单不允许此客户端时,插件将其认定为非法客户端并拒绝对此客户端的访问。

此部分提供有关安装和配置 Elasticsearch 安全插件的信息:

12.3.1 安装 Elasticsearch 安全插件

必须在 Elasticsearch 群集的每个节点以及 Sentinel 中所包含的 Elasticsearch 节点中安装 Elasticsearch 安全插件。

要在 Sentinel 中所包含的 Elasticsearch 节点上安装 Elasticsearch 安全插件:

  1. 登录 Sentinel 主仪表板或 SSDM 服务器。

  2. 按下列方式设置 JAVA_HOME 环境变量路径:

    export JAVA_HOME=/<Sentinel_installation_path>/opt/novell/sentinel/jdk/
  3. 安装插件:

    在 Linux 中,以运行 Elasticsearch 的用户身份登录,并运行下列命令:

    <sentinel_installation_path>/opt/novell/sentinel/3rdparty/elasticsearch/bin/elasticsearch-plugin install file://localhost/<Sentinel_installation_path>/etc/opt/novell/sentinel/scalablestore/elasticsearch-security-plugin*.zip --verbose

    提示继续安装时,输入 y。

  4. (有条件)如果 Elasticsearch 不在侦听默认 HTTP 端口 (9200),则必须在 <Sentinel_installation_path>/opt/novell/sentinel/3rdparty/elasticsearch/plugins/elasticsearch-security-plugin/elasticsearch-ip-whitelist.txt 文件中的每个条目中更新 Elasticsearch 端口号。

    有关详细信息,请参见通过使用白名单提供对 Elasticsearch 客户端的访问权限。

  5. 使用下列命令在 Sentinel 中重启动索引服务:

    rcsentinel stopSIdb
    rcsentinel startSIdb

要在外部 Elasticsearch 节点安装 Elasticsearch 安全插件:

在 Elasticsearch 群集的每个节点执行下列步骤:

  1. 登录 Sentinel 主仪表板或 SSDM 服务器。

  2. 将 <Sentinel_installation_path>/etc/opt/novell/sentinel/scalablestore/elasticsearch-security-plugin*.zip 文件复制到 Elasticsearch 群集每个节点的临时位置。

  3. 安装插件:

    在 Linux 中,以运行 Elasticsearch 的用户身份登录,并运行下列命令:

    <elasticsearch_install_directory>/bin/elasticsearch-plugin install file://localhost/<full path of elasticsearch-security-plugin*.zip file> --verbose

    提示继续安装时,输入 y。

  4. (有条件)如果 Elasticsearch 不在侦听默认 HTTP 端口 (9200),则必须在 <elasticsearch_install_directory>/plugins/elasticsearch-security-plugin/elasticsearch-ip-whitelist.txt 文件中的每个条目中更新 Elasticsearch 端口号。

    有关详细信息,请参见通过使用白名单提供对 Elasticsearch 客户端的访问权限。

  5. 重启动 Elasticsearch。

12.3.2 提供对其他 Elasticsearch 客户端的安全访问

默认情况下,受信客户端如 SSDM 服务器(针对事件可视化仪表板)、YARN NodeManager、Sentinel 服务器(针对事件可视化仪表板)以及 RCM 拥有 Elasticsearch 的访问权限。如果想要使用其他 Elasticsearch 客户端,必须通过使用 SAML 令牌或白名单提供这些其他客户端的安全访问权限。

通过使用 SAML 令牌提供 Elasticsearch REST 客户端的访问权限

如果使用 REST 客户端访问 Elasticsearch,可以按下列方式在请求标题中包含一个 SAML 令牌:

  1. 从 Sentinel 鉴定服务器获取 SAML 令牌。有关更多信息,请参见 Sentinel 中提供的 REST API 文档。

    单击帮助 > API > 教程 > API 安全性 > 获取 SAML 令牌(登录)。

  2. 在后续 REST 请求中使用 SAML 令牌:在 REST 客户端所作的每个请求的授权标题中包含 SAML 令牌。将标题名称指定为 Authorization,标题值指定为步骤 1 中所获得的 <SAML 令牌>。

通过使用白名单提供对 Elasticsearch 客户端的访问权限

默认情况下,Sentinel 用受信 Elasticsearch 客户端,如 SSDM 服务器(针对事件可视化仪表板)、YARN NodeManager、Sentinel 服务器(针对事件可视化仪表板)以及 RCM 的 IP 地址自动填充白名单。Elasticsearch 安全插件为白名单中所列的所有客户端授予对 Elasticsearch 的访问权限。

要为不发送有效 Sentinel 令牌的其他客户端提供访问权限,则必须以 IP address:port 的格式将客户端的 IP 地址和 Elasticsearch 服务器的 HTTP 端口号添加到白名单中。您必须确保添加到白名单的外部客户端合法且可信,以阻止任意未授权的访问。

要更新白名单:

  1. 以运行 Elasticsearch 的用户身份登录 Sentinel 服务器或 Elasticsearch 节点。

  2. 在下列文件中添加条目 <Elasticsearch_Client_IP>:<Target_Elasticsearch_HTTP_Port>:

    • Sentinel 所包含的 Elasticsearch 节点的 <Sentinel_installation_path>/opt/novell/sentinel/3rdparty/elasticsearch/plugins/elasticsearch-security-plugin//elasticsearch-ip-whitelist.txt。

    • 外部 Elasticsearch 节点的 <elasticsearch_install_directory>/plugins/elasticsearch-security-plugin/elasticsearch-ip-whitelist.txt

    如果有多个条目,在新行中添加每个条目并保存文件。

  3. 在 Elasticsearch 群集的每个节点重复上述步骤。

12.3.3 更新 Elasticsearch 插件配置

如果修改可缩放储存组件的 IP 地址/主机名和端口号或 Elasticsearch 版本和端口号,则必须相应更新 Elasticsearch 插件配置文件。

在 Elasticsearch 群集的每个节点执行下列步骤:

  1. 以运行 Elasticsearch 的用户身份登录 Elasticsearch 节点。

  2. (有条件)如果修改 YARN NodeManager IP 地址、SSDM 或 Sentinel 服务器 IP 地址、RCM IP 地址或 Elasticsearch 端口号,则相应更新白名单以确保 Elasticsearch 安全插件授予对 Elasticsearch 客户端的访问权限。

    如果在 HA 模式中配置 SSDM 或 Sentinel,为 HA 群集的每个活动节点和被动节点的物理 IP 地址添加条目。

    如果修改 HA 群集任意节点的物理 IP 地址或向 HA 群集添加新节点,请用修改或新添加节点的物理 IP 地址更新白名单。

    有关详细信息,请参见通过使用白名单提供对 Elasticsearch 客户端的访问权限。

  3. (有条件)如果修改 SSDM IP 地址、Sentinel 服务器 IP 地址或 Web 服务器端口号,更新下列文件中的 authServer.host 和 authServer.port 属性并重启动 Elasticsearch:

    • Sentinel 所包含的 Elasticsearch 节点的 <sentinel_installation_path>/opt/novell/sentinel/3rdparty/elasticsearch/plugins/elasticsearch-security-plugin/plugin-configuration.properties。

    • 外部 Elasticsearch 节点的 <elasticsearch_install_directory>/plugins/elasticsearch-security-plugin/plugin-configuration.properties。

    如果在 HA 模式中配置 SSDM 或 Sentinel,将 authServer.host 属性设置为 HA 群集的虚拟 IP 地址。

    如果修改 HA 群集的虚拟 IP 地址,将 authServer.host 属性更新为修改的虚拟 IP 地址。

  4. (有条件)如果已将 Elasticsearch 升级为更新的版本,在下列文件中更新 elasticsearch.version 属性并重启动 Elasticsearch:

    • Sentinel 所包含的 Elasticsearch 节点的 /opt/novell/sentinel/3rdparty/elasticsearch/plugins/elasticsearch-security-plugin/plugin-descriptor.properties。

    • 外部 Elasticsearch 节点的 <elasticsearch_install_directory>/plugins/elasticsearch-security-plugin/plugin-descriptor.properties。