为 Elastic Stack 设置基本安全措施并启用安全的 HTTPS 通信
编辑为 Elastic Stack 设置基本安全措施并启用安全的 HTTPS 通信
编辑当您在 HTTP 层启用 TLS 时,它会提供额外的安全层,以确保与集群的所有通信都经过加密。
当您在 http
模式下运行 elasticsearch-certutil
工具时,该工具会询问您关于如何生成证书的几个问题。 虽然有很多选项,但以下选择可以生成适用于大多数环境的证书。
先决条件
编辑完成为 Elastic Stack 设置基本安全措施中的所有步骤。
为 Elasticsearch 加密 HTTP 客户端通信
编辑- 在集群中的每个节点上,如果 Elasticsearch 和 Kibana 正在运行,请停止它们。
-
在任意单个节点上,从您安装 Elasticsearch 的目录中,运行 Elasticsearch HTTP 证书工具以生成证书签名请求 (CSR)。
./bin/elasticsearch-certutil http
此命令生成一个
.zip
文件,其中包含用于 Elasticsearch 和 Kibana 的证书和密钥。每个文件夹都包含一个README.txt
,说明如何使用这些文件。- 当被问及是否要生成 CSR 时,输入
n
。 - 当被问及是否要使用现有的 CA 时,输入
y
。 - 输入您的 CA 的路径。这是您为集群生成的
elastic-stack-ca.p12
文件的绝对路径。 - 输入您的 CA 的密码。
- 输入证书的到期值。您可以以年、月或天为单位输入有效期。例如,输入
90D
表示 90 天。 -
当被问及是否要为每个节点生成一个证书时,输入
y
。每个证书都将有自己的私钥,并且将针对特定的主机名或 IP 地址颁发。
- 出现提示时,输入集群中第一个节点的名称。使用您在生成节点证书时使用的相同节点名称。
-
输入用于连接到您的第一个节点的所有主机名。这些主机名将作为 DNS 名称添加到证书中的主题备用名称 (SAN) 字段中。
列出用于通过 HTTPS 连接到您的集群的每个主机名和变体。
- 输入客户端可以用来连接到您的节点的 IP 地址。
- 为集群中的每个其他节点重复这些步骤。
- 当被问及是否要生成 CSR 时,输入
- 在为每个节点生成证书后,出现提示时,输入私钥的密码。
-
解压缩生成的
elasticsearch-ssl-http.zip
文件。此压缩文件包含 Elasticsearch 和 Kibana 的一个目录。/elasticsearch |_ README.txt |_ http.p12 |_ sample-elasticsearch.yml
/kibana |_ README.txt |_ elasticsearch-ca.pem |_ sample-kibana.yml
-
在集群中的每个节点上,完成以下步骤
- 将相关的
http.p12
证书复制到$ES_PATH_CONF
目录。 -
编辑
elasticsearch.yml
文件以启用 HTTPS 安全性并指定http.p12
安全证书的位置。xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: http.p12
-
将私钥的密码添加到 Elasticsearch 中的安全设置中。
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
- 启动 Elasticsearch。
- 将相关的
为 Kibana 加密 HTTP 客户端通信
编辑浏览器将流量发送到 Kibana,而 Kibana 将流量发送到 Elasticsearch。这些通信通道被分别配置为使用 TLS。您加密 Kibana 和 Elasticsearch 之间的流量,然后加密浏览器和 Kibana 之间的流量。
加密 Kibana 和 Elasticsearch 之间的流量
编辑当您使用 http
选项运行 elasticsearch-certutil
工具时,它会创建一个 /kibana
目录,其中包含一个 elasticsearch-ca.pem
文件。您可以使用此文件来配置 Kibana,使其信任 HTTP 层的 Elasticsearch CA。
- 将
elasticsearch-ca.pem
文件复制到 Kibana 配置目录,如$KBN_PATH_CONF
路径定义的那样。 -
打开
kibana.yml
并添加以下行以指定 HTTP 层的安全证书的位置。elasticsearch.ssl.certificateAuthorities: $KBN_PATH_CONF/elasticsearch-ca.pem
-
添加以下行以指定 Elasticsearch 集群的 HTTPS URL。
elasticsearch.hosts: https://<your_elasticsearch_host>:9200
- 重新启动 Kibana。
加密浏览器和 Kibana 之间的流量
编辑您为 Kibana 创建服务器证书和私钥。Kibana 在接收来自 Web 浏览器的连接时使用此服务器证书和相应的私钥。
当您获得服务器证书时,您必须正确设置其主题备用名称 (SAN),以确保浏览器信任它。您可以将一个或多个 SAN 设置为 Kibana 服务器的完全限定域名 (FQDN)、主机名或 IP 地址。在选择 SAN 时,请选择您将在浏览器中使用哪个属性来连接到 Kibana,这可能是 FQDN。
以下说明为 Kibana 创建证书签名请求 (CSR)。CSR 包含 CA 用于生成和签署安全证书的信息。该证书可以是受信任的(由公共受信任的 CA 签名)或不受信任的(由内部 CA 签名)。自签名或内部签名的证书对于开发环境和构建概念验证是可接受的,但不应在生产环境中使用。
在投入生产之前,请使用受信任的 CA(例如 Let’s Encrypt 或您组织的内部 CA)对证书进行签名。使用签名证书可建立浏览器对内部访问或在公共 Internet 上连接到 Kibana 的信任。
-
为 Kibana 生成服务器证书和私钥。
./bin/elasticsearch-certutil csr -name kibana-server -dns example.com,www.example.com
CSR 的通用名称 (CN) 为
kibana-server
,SAN 为example.com
,另一个 SAN 为www.example.com
。默认情况下,此命令会生成一个
csr-bundle.zip
文件,其中包含以下内容/kibana-server |_ kibana-server.csr |_ kibana-server.key
- 解压缩
csr-bundle.zip
文件以获取kibana-server.csr
未签名的安全证书和kibana-server.key
未加密的私钥。 - 将
kibana-server.csr
证书签名请求发送到您的内部 CA 或受信任的 CA 进行签名,以获得签名的证书。 签名的文件可以采用不同的格式,例如像kibana-server.crt
这样的.crt
文件。 -
打开
kibana.yml
并添加以下行,以配置 Kibana 来访问服务器证书和未加密的私钥。server.ssl.certificate: $KBN_PATH_CONF/kibana-server.crt server.ssl.key: $KBN_PATH_CONF/kibana-server.key
$KBN_PATH_CONF
包含 Kibana 配置文件的路径。如果您使用存档分发版(zip
或tar.gz
)安装了 Kibana,则该路径默认为$KBN_HOME/config
。如果您使用了包分发版(Debian 或 RPM),则该路径默认为/etc/kibana
。 -
将以下行添加到
kibana.yml
以启用入站连接的 TLS。server.ssl.enabled: true
- 启动 Kibana。
进行这些更改后,您必须始终通过 HTTPS 访问 Kibana。 例如,https://<your_kibana_host>.com
。
下一步:配置 Beats 安全性
配置 Beats 安全性
编辑Beats 是开源数据传输器,您可以作为代理安装在服务器上,以将操作数据发送到 Elasticsearch。 每个 Beat 都是一个单独可安装的产品。以下步骤涵盖了为 Metricbeat 配置安全性。对于您想要配置安全性的每个附加的 Beat,请按照这些步骤操作。
为 Metricbeat 创建角色
编辑通常,您需要创建以下单独的角色
- setup 角色,用于设置索引模板和其他依赖项
- monitoring 角色,用于发送监控信息
- writer 角色,用于发布 Metricbeat 收集的事件
- reader 角色,用于需要查看和创建访问 Metricbeat 数据的可视化的 Kibana 用户
这些说明假设您正在使用 Metricbeat 索引的默认名称。 如果未列出指示的索引名称,或者您正在使用自定义名称,请在定义角色时手动输入它,并修改权限以匹配您的索引命名模式。
要从 Kibana 中的 Stack Management 创建用户和角色,请从侧面导航中选择角色或用户。
下一步:创建安装角色
创建安装角色和用户
编辑设置 Metricbeat 的管理员通常需要加载映射、仪表板和用于将数据索引到 Elasticsearch 中并在 Kibana 中将其可视化的其他对象。
设置 Metricbeat 是一项需要额外权限的管理级任务。最佳实践是,仅向管理员授予设置角色,并使用限制性更强的角色进行事件发布。
- 创建设置角色
- 输入 metricbeat_setup 作为角色名称。
- 选择 monitor 和 manage_ilm 集群权限。
-
在 metricbeat-\* 索引上,选择 manage 和 write 权限。
如果 metricbeat-\* 索引未列出,请将该模式输入到索引列表中。
- 创建设置用户
- 输入 metricbeat_setup 作为用户名。
- 输入用户名、密码和其他用户详细信息。
-
将以下角色分配给 metricbeat_setup 用户
角色 目的 metricbeat_setup
设置 Metricbeat。
kibana_admin
如果可用,将依赖项(例如示例仪表板)加载到 Kibana 中
ingest_admin
设置索引模板以及(如果可用)摄取管道
下一步: 创建监控角色
创建监控角色和用户
编辑要安全地发送监控数据,请创建监控用户并授予其必要的权限。
如果您的环境中可用,可以使用内置的 beats_system
用户。由于内置用户在 Elastic Cloud 中不可用,因此以下说明创建专门用于监控 Metricbeat 的用户。
-
如果您正在使用内置的
beats_system
用户,请在集群中的任何节点上运行elasticsearch-reset-password
实用程序,为该用户设置密码此命令会将
beats_system
用户的密码重置为自动生成的值。./bin/elasticsearch-reset-password -u beats_system
如果要将密码设置为特定值,请使用交互式 (
-i
) 参数运行该命令。./bin/elasticsearch-reset-password -i -u beats_system
- 创建监控角色
- 输入 metricbeat_monitoring 作为角色名称。
- 选择 monitor 集群权限。
- 在 .monitoring-beats-\* 索引上,选择 create_index 和 create_doc 权限。
- 创建监控用户
- 输入 metricbeat_monitoring 作为用户名。
- 输入用户名、密码和其他用户详细信息。
-
将以下角色分配给 metricbeat_monitoring 用户
角色 目的 metricbeat_monitoring
监控 Metricbeat。
kibana_admin
使用 Kibana
monitoring_user
在 Kibana 中使用 Stack Monitoring 来监控 Metricbeat
下一步: 创建写入角色
创建写入角色和用户
编辑将事件发布到 Elasticsearch 的用户需要创建并写入 Metricbeat 索引。为了最大程度地减少写入角色所需的权限,请使用设置角色预加载依赖项。本节假设您已创建了设置角色。
- 创建写入角色
- 输入 metricbeat_writer 作为角色名称。
- 选择 monitor 和 read_ilm 集群权限。
- 在 metricbeat-\* 索引上,选择 create_doc、create_index 和 view_index_metadata 权限。
- 创建写入用户
- 输入 metricbeat_writer 作为用户名。
- 输入用户名、密码和其他用户详细信息。
-
将以下角色分配给 metricbeat_writer 用户
角色 目的 metricbeat_writer
监控 Metricbeat
remote_monitoring_collector
从 Metricbeat 收集监控指标
remote_monitoring_agent
将监控数据发送到监控集群
下一步: 创建读取角色
创建读取角色和用户
编辑Kibana 用户通常需要查看包含 Metricbeat 数据的仪表板和可视化效果。这些用户可能还需要创建和编辑仪表板和可视化效果。创建读取角色以将适当的权限分配给这些用户。
- 创建读取角色
- 输入 metricbeat_reader 作为角色名称。
- 在 metricbeat-\* 索引上,选择 read 权限。
-
在 Kibana 下,单击 添加 Kibana 权限。
- 在 空间 下,选择 默认。
- 为“发现”、“可视化”、“仪表板”和“指标”选择 读取 或 全部。
- 创建读取用户
- 输入 metricbeat_reader 作为用户名。
- 输入用户名、密码和其他用户详细信息。
-
将以下角色分配给 metricbeat_reader 用户
角色 目的 metricbeat_reader
读取 Metricbeat 数据。
monitoring_user
允许用户监控 Metricbeat 本身的运行状况。仅将此角色分配给管理 Metricbeat 的用户
beats_admin
在 Beats 中央管理中创建和管理配置。仅将此角色分配给需要使用 Beats 中央管理的用户。
配置 Metricbeat 以使用 TLS
编辑在启动 Metricbeat 之前,您需要配置与 Elasticsearch 和 Kibana 的连接。您可以配置身份验证,以使用基本身份验证、API 密钥身份验证或公钥基础设施 (PKI) 证书将数据发送到安全的集群。
以下说明使用您创建的 metricbeat_writer
和 metricbeat_setup
用户的凭据。如果您需要更高的安全性,我们建议使用 PKI 证书。
配置与 Elasticsearch 和 Kibana 的连接后,您将启用 elasticsearch-xpack
模块并将该模块配置为使用 HTTPS。
在生产环境中,我们强烈建议使用单独的集群(称为监控集群)来存储您的数据。使用单独的监控集群可以防止生产集群中断影响您访问监控数据的能力。它还可以防止监控活动影响生产集群的性能。
- 在您为 HTTP 层生成证书的节点上,导航到
/kibana
目录。 - 将
elasticsearch-ca.pem
证书复制到安装 Metricbeat 的目录。 -
打开
metricbeat.yml
配置文件并配置与 Elasticsearch 的连接。在
output.elasticsearch
下,指定以下字段output.elasticsearch: hosts: ["<your_elasticsearch_host>:9200"] protocol: "https" username: "metricbeat_writer" password: "<password>" ssl: certificate_authorities: ["elasticsearch-ca.pem"] verification_mode: "certificate"
-
hosts
- 指定 Elasticsearch 集群正在运行的主机。
-
protocol
- 指示连接到 Elasticsearch 时要使用的协议。此值必须为
https
。 -
username
- 具有将事件发布到 Elasticsearch 所需权限的用户名。您创建的
metricbeat_writer
用户具有这些权限。 -
password
- 指示的
username
的密码。 -
certificate_authorities
- 指示包含您的 CA 证书的本地
.pem
文件的路径。
-
-
配置与 Kibana 的连接。
在
setup.kibana
下,指定以下字段setup.kibana host: "https://<your_elasticsearch_host>:5601" ssl.enabled: true username: "metricbeat_setup" password: "p@ssw0rd"
-
hosts
- 用于所有查询的 Elasticsearch 实例的 URL。确保在 URL 中包含
https
。 -
username
- 具有在 Kibana 中设置仪表板所需权限的用户名。您创建的
metricbeat_setup
用户具有这些权限。 -
password
- 指示的
username
的密码。
-
-
启用
elasticsearch-xpack
模块。./metricbeat modules enable elasticsearch-xpack
-
修改
elasticsearch-xpack
模块以使用 HTTPS。此模块收集有关 Elasticsearch 的指标。打开
/modules.d/elasticsearch-xpack.yml
并指定以下字段- module: elasticsearch xpack.enabled: true period: 10s hosts: ["https://<your_elasticsearch_host>:9200"] username: "remote_monitoring_user" password: "<password>" ssl: enabled: true certificate_authorities: ["elasticsearch-ca.pem"] verification_mode: "certificate"
在监控具有加密流量的节点时,需要配置 SSL。请参阅 为 Metricbeat 配置 SSL。
-
hosts
- 指定 Elasticsearch 集群正在运行的主机。确保在 URL 中包含
https
。 -
username
- 具有收集指标数据权限的用户名。内置的
monitoring_user
用户具有这些权限。或者,您可以创建一个用户并为其分配monitoring_user
角色。 -
password
- 指示的
username
的密码。 -
certificate_authorities
- 指示包含您的 CA 证书的本地
.pem
文件的路径。
-
-
如果要使用预定义的资产来解析、索引和可视化数据,请运行以下命令来加载这些资产
./metricbeat setup -e
-
启动 Elasticsearch,然后启动 Metricbeat。
./metricbeat -e
-e
是可选的,它将输出发送到标准错误,而不是配置的日志输出。 -
登录 Kibana,打开主菜单,然后单击 Stack Monitoring。
您将看到需要您注意的集群警报以及 Elasticsearch 可用监控指标的摘要。单击可用卡上的任何标题链接以查看其他信息。