Elastic Serverless Forwarder 输入插件

编辑

Elastic Serverless Forwarder 输入插件

编辑
  • 插件版本:v0.1.5
  • 发布日期:2024-09-12
  • 更改日志

对于其他版本,请参阅 版本化插件文档

获取帮助

编辑

有关插件的问题,请在 Discuss 论坛中发起主题。对于错误或功能请求,请在 Github 中提交问题。有关 Elastic 支持的插件列表,请查阅 Elastic 支持矩阵

描述

编辑

使用此输入,您可以通过 http(s) 连接接收来自 Elastic Serverless Forwarder 的事件,连接到配置的 port

最小配置

编辑
SSL 已启用 SSL 已禁用
input {
  elastic_serverless_forwarder {
    port => 8080
    ssl_certificate => "/path/to/logstash.crt"
    ssl_key => "/path/to/logstash.key"
  }
}
input {
  elastic_serverless_forwarder {
    port => 8080
    ssl_enabled => false
  }
}

丰富

编辑

此输入对事件提供 最少的丰富,并避免包含有关自身、接收数据客户端或从请求解码的原始事件的信息。

建议发送方注意 Logstash 中 保留的字段。ESF 默认发送 Logstash 需要的 @timestamp 字段,但如果此值缺失,则将使用当前时间填充。

安全

编辑

此插件默认启用 SSL。

至少,您需要配置插件以显示其身份,或禁用 SSL。

此外,您可能希望使用 SSL 客户端身份验证对客户端进行身份验证,或使用下面所述的 HTTP 基本身份验证对请求进行身份验证。

SSL 身份

编辑

为了与客户端建立 SSL 连接,此输入插件需要显示客户端信任的 SSL 证书,并能够访问关联的密钥。这些可以通过 ssl_certificatessl_key 和可选的 ssl_key_passphrase 进行配置。

SSL 客户端身份验证

编辑

默认情况下,此插件在 SSL 协商期间不会向客户端请求证书。

可以使用 ssl_client_authentication将其配置为请求或要求客户端证书,这通常还需要将其配置为信任 ssl_certificate_authorities 列表。在验证所呈现的证书时,ssl_verification_mode 控制证书的验证方式。

ESF 目前不支持 显示 客户端证书,因此请求或要求客户端显示身份仅在与 SSL 终止代理结合使用时才有用。

SSL 高级配置

编辑

此插件公开了几个高级 SSL 配置

HTTP 基本身份验证

编辑

您可以通过配置 auth_basic_usernameauth_basic_password 将此插件配置为使用 HTTP 基本身份验证对请求进行身份验证。

基本身份验证不能替代 SSL,因为它本身不提供机密性或安全性。当与 SSL 禁用一起使用时,HTTP 基本凭据实际上以明文形式传输,攻击者可以轻松地恢复它们。

将 Elastic Serverless Forwarder 与 Elasticsearch 输出一起使用

编辑

以下是一些有关如何配置 Elastic Serverless Forwarder 输入以与 elasticsearch 输出一起使用的提示

  • 当您将 Elastic Serverless Forwarder 输入与 Elasticsearch 输出插件 一起使用时,请在输出配置中设置 document_id

    output {
      elasticsearch {
          ...
          document_id => "%{[@metadata][_id]}"
          ...
      }
    }
  • 从 Elastic Serverless Forwarder 1.10.0 版本开始,配置如上例所示的 document_id 就足够了(_id 字段不再可用,而是 Logstash 现在接收 @metadata._id 字段)。
  • 对于 Elastic Serverless Forwarder v1.9.0 及更早版本,请使用过滤器将字段 _id 重命名为 @metadata._id

    filter {
        # support ESF < 1.10
        if [_id] and ![@metadata][_id] {
          mutate { rename => { "_id" => "[@metadata][_id]" } }
        }
    }

Elastic Serverless Forwarder 输入配置选项

编辑

此插件支持以下配置选项以及稍后描述的 通用选项

设置 输入类型 必需

auth_basic_username

字符串

auth_basic_password

密码

主机

字符串

端口

数字

ssl

布尔值

已弃用

ssl_certificate

有效的系统文件路径

ssl_certificate_authorities

数组

ssl_client_authentication

字符串,其中之一为 ["none", "optional", "required"]

ssl_cipher_suites

数组

ssl_enabled

布尔值

ssl_handshake_timeout

数字

ssl_key

有效的系统文件路径

ssl_key_passphrase

密码

ssl_supported_protocols

数组

ssl_verification_mode

字符串,其中之一为 ["certificate"]

另请参阅 通用选项,了解所有输入插件支持的选项列表。

 

auth_basic_password

编辑
  • 值类型为 密码
  • 此设置没有默认值。

HTTP 基本授权的密码。需要 auth_basic_username

auth_basic_username

编辑
  • 值类型为 字符串
  • 此设置没有默认值。

基本授权的用户名。需要 auth_basic_password

host

编辑
  • 值类型为 字符串
  • 默认值为 "0.0.0.0"(所有可用接口)

要绑定的主机或 IP

port

编辑
  • 值类型为 数字
  • 默认值为 8080

要绑定的 TCP 端口

在 0.1.3 中已弃用。

ssl_enabled 替换

事件默认通过 SSL 发送,这需要配置此插件以使用 ssl_certificate 显示身份证书,并使用 ssl_key 显示密钥。

您可以使用 +ssl => false+ 禁用 SSL。

ssl_certificate

编辑
  • 值类型为 路径
  • 此设置没有默认值。

要使用的 SSL 证书。此证书 必须 是 PEM 格式,并且 可以 包含证书链,从标识自身的证书开始,后跟零个或多个有序中间证书,最后可选地以根签名颁发机构结束。提供完整的链允许客户端信任我们的证书,如果其配置允许他们信任我们的某个中间证书。

ssl_certificate_authorities

编辑
  • 值类型为 数组
  • 默认值为 []

针对这些颁发机构验证客户端证书。您可以定义多个文件或路径。所有证书都将被读取并添加到信任库。

如果您希望执行客户端身份验证,则需要将 ssl_client_authentication 设置为 optionalrequired

ssl_cipher_suites

编辑
  • 值类型为 数组
  • 默认值为 ['TLS_AES_256_GCM_SHA384', 'TLS_AES_128_GCM_SHA256', 'TLS_CHACHA20_POLY1305_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384', 'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256', 'TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384', 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384', 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256', 'TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256']

要使用的密码套件列表,按优先级列出。

这是一个高级 SSL 配置。

此默认列表适用于 OpenJDK 11.0.14 及更高版本。对于较旧的 JDK 版本,默认列表仅包含该版本支持的套件。例如,ChaCha20 系列密码在较旧版本中不受支持。

ssl_client_authentication

编辑
  • 值可以是以下任意一个

    • none:不请求客户端证书,或验证所提供的证书
    • optional:请求客户端证书,并在仅当提供时根据我们的信任机构验证它
    • required:要求客户端提供由受信任的证书颁发机构签发的有效证书
  • 默认值为 "none"

默认情况下,服务器不执行任何客户端身份验证。这意味着当启用 SSL 时,来自客户端的连接是私有的,但此输入将允许来自任何客户端的 SSL 连接。如果希望将此插件配置为拒绝来自不受信任主机的连接,则需要将此插件配置为对客户端进行身份验证,并且可能还需要将其配置为包含 ssl_certificate_authorities 列表。

ssl_enabled

编辑

默认情况下,事件通过 SSL 发送,这需要将此插件配置为使用 ssl_certificate 提供身份证书,并使用 ssl_key 提供密钥。

可以使用 +ssl_enabled => false+ 禁用 SSL。

ssl_handshake_timeout

编辑
  • 值类型为 数字
  • 默认值为 10000

不完整的 ssl 握手超时的时间(毫秒)

这是一个高级 SSL 配置。

ssl_key

编辑
  • 值类型为 路径
  • 此设置没有默认值。

要使用的 SSL 密钥。

此密钥需要为 PKCS8 格式,可以使用 OpenSSL 进行转换,更多信息请参阅。

ssl_key_passphrase

编辑
  • 值类型为 密码
  • 此设置没有默认值。

要使用的 SSL 密钥密码。

ssl_supported_protocols

编辑
  • 值类型为 数组
  • 允许的值为:'TLSv1.1''TLSv1.2''TLSv1.3'
  • 默认值取决于使用的 JDK。对于最新的 Logstash,默认值为 ['TLSv1.2', 'TLSv1.3']'TLSv1.1' 不被认为是安全的,仅为旧版应用程序提供。

在与 HTTP 端点建立连接时要使用的允许的 SSL/TLS 版本列表。

这是一个高级 SSL 配置。

对于 Java 8,'TLSv1.3' 仅从 8u262(AdoptOpenJDK)开始支持,但要求您在 Logstash 中设置 LS_JAVA_OPTS="-Djdk.tls.client.protocols=TLSv1.3" 系统属性。

如果将插件配置为在任何最近的 JVM(例如 Logstash 附带的 JVM)上使用 'TLSv1.1',则默认情况下会禁用该协议,并且需要通过更改 $JDK_HOME/conf/security/java.security 配置文件中的 jdk.tls.disabledAlgorithms 手动启用它。也就是说,需要从列表中删除 TLSv1.1

ssl_verification_mode

编辑
  • 值类型为 字符串
  • 当前仅支持一种模式

    • certificate:验证客户端提供的证书是否由受信任的颁发机构 (CA) 签署,是否在其有效日期范围内,以及客户端是否拥有关联的密钥,但不执行主机名验证。
  • 默认值为 certificate

ssl_client_authentication 导致客户端提供证书时,此设置控制如何验证该证书。

通常不使用 SSL 验证客户端身份,因为接收服务器只能访问客户端的出站 IP,该 IP 并不总是恒定的,并且通常不在证书的主题或 subjectAltNames 扩展中表示。有关更多信息,请参阅 RFC2818 第 3.2 节(通过 TLS 的 HTTP — 客户端身份)

通用选项

编辑

所有输入插件都支持这些配置选项

设置 输入类型 必需

add_field

hash

enable_metric

布尔值

id

字符串

tags

数组

type

字符串

add_field

编辑
  • 值类型为 hash
  • 默认值为 {}

向事件添加字段

enable_metric

编辑
  • 值类型为 boolean
  • 默认值为 true

禁用或启用此特定插件实例的指标日志记录,默认情况下,我们会记录所有可以记录的指标,但您可以禁用特定插件的指标收集。

  • 值类型为 string
  • 此设置没有默认值。

向插件配置添加唯一的 ID。如果未指定 ID,Logstash 将生成一个。强烈建议在配置中设置此 ID。当您有两个或多个相同类型的插件时,这尤其有用,例如,如果您有两个 elastic_serverless_forwarder 输入。在这种情况下,添加命名 ID 将有助于使用监控 API 监控 Logstash。

input {
  elastic_serverless_forwarder {
    id => "my_plugin_id"
  }
}

id 字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。

tags

编辑
  • 值类型为 array
  • 此设置没有默认值。

向您的事件添加任意数量的任意标签。

这可以帮助以后进行处理。

type

编辑
  • 值类型为 string
  • 此设置没有默认值。

向此输入处理的所有事件添加 type 字段。

类型主要用于过滤器激活。

类型存储在事件本身中,因此您也可以使用类型在 Kibana 中搜索它。

如果您尝试在已经具有类型的事件上设置类型(例如,当您从发送方发送事件到索引器时),则新的输入不会覆盖现有类型。在发送到另一个 Logstash 服务器时,即使在发送方设置的类型也会一直保留在该事件中。