保护您与 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。
Elasticsearch Serverless 简化了 Logstash 和 Elasticsearch 之间安全可靠的通信。
配置Logstash Elasticsearch 输出插件以使用cloud_id
和api_key
来建立 Logstash 和 Elasticsearch Serverless 之间安全可靠的通信。无需额外的 SSL 配置步骤。
配置示例
-
output {elasticsearch { cloud_id => "<云 ID>" api_key => "<API 密钥>" } }
有关更多详细信息,请查看使用 API 密钥授予访问权限。
我们在 Elastic Cloud 上的托管 Elasticsearch Service 简化了 Logstash 和 Elasticsearch 之间安全可靠的通信。当您配置Logstash Elasticsearch 输出插件以使用cloud_id
,并使用cloud_auth
选项或api_key
选项时,无需额外的 SSL 配置步骤。我们的托管 Elasticsearch Service 在 AWS、GCP 和 Azure 上可用,您可以免费试用。
配置示例
-
output {elasticsearch { cloud_id => "<云 ID>" cloud_auth => "<云身份验证>" } }
-
output {elasticsearch { cloud_id => "<云 ID>" api_key => "<API 密钥>" } }
有关更多详细信息,请查看使用 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 中使用管理 > 角色 UI 或使用
role
API 创建一个logstash_writer
角色。对于 集群 特权,添加manage_index_templates
和monitor
。对于 索引 特权,添加write
、create
和create_index
。如果您计划使用索引生命周期管理,则为集群添加
manage_ilm
,为索引添加manage
和manage_ilm
。 -
创建一个
logstash_internal
用户并为其分配logstash_writer
角色。您可以通过 Kibana 中的管理 > 用户 UI 或通过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_reader
角色,该角色对 Logstash 索引具有read
和view_index_metadata
特权。您可以通过 Kibana 中的管理 > 角色 UI 或通过role
API 创建角色POST _security/role/logstash_reader { "cluster": ["manage_logstash_pipelines"] }
-
为您的 Logstash 用户分配
logstash_reader
角色。如果 Logstash 用户将使用集中式管道管理,还需要分配logstash_admin
角色。您可以通过 Kibana 中的管理 > 用户 UI 或通过user
API 创建和管理用户
配置 Logstash 以使用 TLS/SSL 加密
编辑如果本地 Elasticsearch 集群上启用了 TLS 加密,则需要在 Logstash .conf
文件中配置 ssl
和 cacert
选项
托管 Elasticsearch Service 简化了安全性。对于 Elastic Cloud 上的托管 Elasticsearch Service,此配置步骤不是必需的。我们的托管 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 密钥部分中使用的示例创建了一个 API 密钥,用于使用Elasticsearch 输出插件发布到 Elasticsearch。
这是一个在您的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 密钥。