保护与 Elasticsearch 的连接
编辑保护与 Elasticsearch 的连接编辑
Logstash Elasticsearch 输出、输入和 过滤器插件,以及监控和集中管理,支持通过 HTTPS 进行身份验证和加密。
Elasticsearch 集群默认是安全的(从 8.0 开始)。您需要为 Logstash 配置身份验证凭据才能建立通信。如果身份验证失败,Logstash 会抛出异常并停止处理管道。
除了为 Logstash 配置身份验证凭据之外,您还需要授予授权用户访问 Logstash 索引的权限。
默认情况下,Elasticsearch 集群上的安全性处于启用状态(从 8.0 开始)。您必须在 Logstash 配置的 Elasticsearch 输出部分启用 TLS/SSL,以便允许 Logstash 与 Elasticsearch 集群通信。
默认启用 Elasticsearch 安全性编辑
Elasticsearch 在启动时会生成自己的默认自签名安全套接字层 (SSL) 证书。
Logstash 必须先建立安全套接字层 (SSL) 连接,然后才能将数据传输到受保护的 Elasticsearch 集群。Logstash 必须具有已签署 Elasticsearch 集群证书的证书颁发机构 (CA) 的副本。当一个新的 Elasticsearch 集群在*没有*专用证书的情况下启动时,它会在启动时生成自己的默认自签名证书颁发机构。有关更多信息,请参阅在启用安全性的情况下启动 Elastic Stack。
Elasticsearch Service 使用由标准公共受信任证书颁发机构签署的证书,因此无需设置 cacert。
与 Elastic Cloud 无服务器的安全连接
无服务器上的 Elasticsearch 简化了 Logstash 和 Elasticsearch 之间的安全通信。
将 Logstash Elasticsearch 输出插件配置为使用 cloud_id
和 api_key
,以在无服务器上的 Logstash 和 Elasticsearch 之间建立安全通信。无需额外的 SSL 配置步骤。
配置示例
-
output {elasticsearch { cloud_id => "<cloud id>" api_key => "<api key>" } }
有关更多详细信息,请查看使用 API 密钥授予访问权限。
与托管 Elasticsearch Service 的安全连接
我们在 Elastic Cloud 上托管的 Elasticsearch Service 简化了 Logstash 和 Elasticsearch 之间的安全通信。当您将 Logstash Elasticsearch 输出插件配置为使用 cloud_id
以及 cloud_auth 选项
或 api_key 选项
时,无需额外的 SSL 配置步骤。我们托管的 Elasticsearch Service 在 AWS、GCP 和 Azure 上可用,您可以免费试用。
配置示例
-
output {elasticsearch { cloud_id => "<cloud id>" cloud_auth => "<cloud auth>" } }
-
output {elasticsearch { cloud_id => "<cloud id>" api_key => "<api key>" } }
有关更多详细信息,请查看使用 API 密钥授予访问权限或将数据发送到 Elastic Cloud(托管 Elasticsearch Service)。
与本地 Elasticsearch 集群的安全通信编辑
如果您在自己的硬件上运行 Elasticsearch 并使用 Elasticsearch 集群的默认自签名证书,则需要完成更多步骤才能在 Logstash 和 Elasticsearch 之间建立安全通信。
您需要
- 从 Elasticsearch 复制自签名 CA 证书并将其保存到 Logstash。
- 将 elasticsearch-output 插件配置为使用该证书。
如果您的集群使用的是公共受信任证书,则无需执行这些步骤。
复制并保存证书编辑
默认情况下,本地 Elasticsearch 集群会在启动时生成自签名 CA 并创建自己的 SSL 证书。因此,Logstash 需要拥有 Elasticsearch 集群的自签名 CA 副本,以便 Logstash 验证 Elasticsearch 提供的证书。
从 Elasticsearch config/certs
目录复制自签名 CA 证书。
将其保存到 Logstash 可以访问的位置,例如 Logstash 实例上的 config/certs
。
配置 elasticsearch 输出编辑
使用 elasticsearch 输出
的 cacert 选项
指向证书的位置。
示例
有关与 Elasticsearch 建立安全通信的更多信息,请参阅默认启用安全性。
将 Logstash 配置为使用基本身份验证编辑
Logstash 需要能够管理索引模板、创建索引以及在其创建的索引中写入和删除文档。
为 Logstash 设置身份验证凭据
-
使用 Kibana 中的管理 > 角色用户界面或
role
API 创建logstash_writer
角色。对于集群权限,添加manage_index_templates
和monitor
。对于索引权限,添加write
、create
和create_index
。如果您计划使用索引生命周期管理,请为集群添加
manage_ilm
,为索引添加manage
和manage_ilm
。 -
创建一个
logstash_internal
用户并为其分配logstash_writer
角色。您可以从 Kibana 中的管理 > 用户用户界面或通过user
API 创建用户POST _security/user/logstash_internal { "password" : "x-pack-test-password", "roles" : [ "logstash_writer"], "full_name" : "Internal Logstash User" }
-
将 Logstash 配置为以您刚创建的
logstash_internal
用户身份进行身份验证。您需要在 Logstash.conf
文件中为每个 Elasticsearch 插件分别配置凭据。例如input { elasticsearch { ... user => logstash_internal password => x-pack-test-password } } filter { elasticsearch { ... user => logstash_internal password => x-pack-test-password } } output { elasticsearch { ... user => logstash_internal password => x-pack-test-password } }
授予对 Logstash 索引的访问权限编辑
要访问 Logstash 创建的索引,用户需要 read
和 view_index_metadata
权限
-
创建一个对 Logstash 索引具有
read
和view_index_metadata
权限的logstash_reader
角色。您可以从 Kibana 中的管理 > 角色用户界面或通过role
API 创建角色POST _security/role/logstash_reader { "cluster": ["manage_logstash_pipelines"] }
-
为您的 Logstash 用户分配
logstash_reader
角色。如果 Logstash 用户将使用集中式管道管理,还要分配logstash_admin
角色。您可以从 Kibana 中的管理 > 用户用户界面或通过user
API 创建和管理用户
将 Logstash 配置为使用 TLS/SSL 加密编辑
如果在本地 Elasticsearch 集群上启用了 TLS 加密,则需要在 Logstash .conf
文件中配置 ssl
和 cacert
选项
托管 Elasticsearch Service 简化了安全性。托管 Elasticsearch Service on Elastic Cloud 不需要此配置步骤。我们托管的 Elasticsearch Service 在 AWS、GCP 和 Azure 上可用,您可以免费试用。
将 Elasticsearch 输出配置为使用 PKI 身份验证编辑
elasticsearch
输出支持 PKI 身份验证。要使用 X.509 客户端证书进行身份验证,您需要在 Logstash .conf
文件中配置 keystore
和 keystore_password
选项
output { elasticsearch { ... keystore => /path/to/keystore.jks keystore_password => realpassword truststore => /path/to/truststore.jks truststore_password => realpassword } }
为 Logstash 监控配置凭据编辑
如果您想使用 Elastic Stack 监控功能监控 Logstash 实例,并将监控数据存储在安全的 Elasticsearch 集群中,则必须使用具有适当权限的用户的用户名和密码配置 Logstash。
安全功能预先配置了一个为此目的而设的logstash_system
内置用户。此用户具有监控功能所需的最低权限,并且*不应*用于任何其他目的 - 它*并非*用于 Logstash 管道。
默认情况下,logstash_system
用户没有密码。在您设置密码之前,该用户将无法启用。请参阅设置内置用户密码。
然后在 logstash.yml
配置文件中配置用户名和密码
xpack.monitoring.elasticsearch.username: logstash_system xpack.monitoring.elasticsearch.password: t0p.s3cr3t
如果您最初安装了旧版本的 X-Pack 然后进行了升级,则出于安全原因,logstash_system
用户可能默认设置为disabled
。您可以通过 user
API 启用该用户
PUT _security/user/logstash_system/_enable
为集中式管道管理配置凭据编辑
如果您打算使用 Logstash 集中式管道管理,则需要配置 Logstash 用于管理配置的用户名和密码。
您可以在 logstash.yml
配置文件中配置用户名和密码
xpack.management.elasticsearch.username: logstash_admin_user xpack.management.elasticsearch.password: t0p.s3cr3t
使用 API 密钥授予访问权限编辑
您可以使用 API 密钥来授予对 Elasticsearch 资源的访问权限,而不是使用用户名和密码。您可以将 API 密钥设置为在特定时间过期,并且可以显式地使其失效。任何具有 manage_api_key
或 manage_own_api_key
集群权限的用户都可以创建 API 密钥。
创建 API 密钥的技巧
- API 密钥与其创建所在的集群绑定。如果您要将输出发送到不同的集群,请确保创建正确类型的 API 密钥。
- Logstash 可以将收集的数据和监控信息发送到 Elasticsearch。如果您要将两者都发送到同一个集群,则可以使用同一个 API 密钥。对于不同的集群,您需要为每个集群使用一个 API 密钥。
- 单个集群可以共享用于摄取和监控目的的密钥。
- 生产集群和监控集群需要单独的密钥。
出于安全原因,我们建议为每个 Logstash 实例使用唯一的 API 密钥。您可以根据需要为每个用户创建任意数量的 API 密钥。
创建 API 密钥编辑
您可以使用创建 API 密钥 API 或Kibana UI 创建 API 密钥。本节将指导您使用创建 API 密钥 API 创建 API 密钥。两种方法所需的权限相同。
以下示例展示了如何使用Elasticsearch 输出插件 创建用于发布到 Elasticsearch 的 API 密钥。
POST /_security/api_key { "name": "logstash_host001", "role_descriptors": { "logstash_writer": { "cluster": ["monitor", "manage_ilm", "read_ilm"], "index": [ { "names": ["logstash-*"], "privileges": ["view_index_metadata", "create_doc"] } ] } } }
返回值应类似于以下内容
创建用于发布的 API 密钥编辑
您很幸运!我们在创建 API 密钥部分中使用的示例使用Elasticsearch 输出插件 创建了一个用于发布到 Elasticsearch 的 API 密钥。
以下示例展示了如何在您的Elasticsearch 输出插件 配置中使用 API 密钥。
格式为 |
创建用于读取的 API 密钥编辑
创建用于从 Elasticsearch 读取数据的 API 密钥与创建用于发布的 API 密钥类似,如前所述。您可以使用创建 API 密钥部分中的示例,并授予适当的权限。
以下示例展示了如何在您的Elasticsearch 输入插件 配置中使用 API 密钥。
格式为 |
创建用于过滤的 API 密钥编辑
创建用于处理来自 Elasticsearch 的数据的 API 密钥与创建用于发布的 API 密钥类似,如前所述。您可以使用创建 API 密钥部分中的示例,并授予适当的权限。
以下示例展示了如何在您的Elasticsearch 过滤器插件 配置中使用 API 密钥。
格式为 |
创建用于监控的 API 密钥编辑
要创建用于将监控数据发送到 Elasticsearch 的 API 密钥,请使用创建 API 密钥 API。例如
POST /_security/api_key { "name": "logstash_host001", "role_descriptors": { "logstash_monitoring": { "cluster": ["monitor"], "index": [ { "names": [".monitoring-ls-*"], "privileges": ["create_index", "create"] } ] } } }
返回值应类似于以下内容
现在,您可以在您的 logstash.yml 配置文件中使用此 API 密钥
格式为 |
创建用于集中管理的 API 密钥编辑
要创建用于集中管理的 API 密钥,请使用创建 API 密钥 API。例如
POST /_security/api_key { "name": "logstash_host001", "role_descriptors": { "logstash_monitoring": { "cluster": ["monitor"], "index": ["read"] } } }
返回值应类似于以下内容
现在,您可以在您的 logstash.yml 配置文件中使用此 API 密钥
格式为 |
了解有关 API 密钥的更多信息编辑
有关更多信息,请参阅 Elasticsearch API 密钥文档
有关通过 Kibana 管理 API 密钥的信息,请参阅API 密钥。