菜单
实验性

loki.secretfilter

实验性:这是一个 实验性 组件。实验性组件可能会频繁进行重大更改,并可能在没有同等替代品的情况下被移除。必须将 stability.level 标志设置为 experimental 才能使用该组件。

loki.secretfilter 接收日志条目并从中编辑敏感信息,例如密钥。检测基于正则表达式模式,这些模式在组件内嵌的 Gitleaks 配置文件 中定义。 loki.secretfilter 也可以使用基于 Gitleaks 配置文件结构的自定义配置文件。

注意

个人身份信息 (PII) 目前不在范围内,并且某些密钥可能仍然无法检测到。此组件可能会生成误报或编辑过多。不要仅依赖此组件来编辑敏感信息。

注意

此组件对日志行进行操作,并且不扫描标签或其他元数据。

用法

alloy
loki.secretfilter "<LABEL>" {
    forward_to = <RECEIVER_LIST>
}

参数

loki.secretfilter 支持以下参数

名称类型描述默认值必需
forward_tolist(LogsReceiver)要将日志条目发送到的接收器列表。
allowlistmap(string)允许列表匹配密钥的正则表达式列表。{}
gitleaks_configstring自定义 gitleaks.toml 文件的路径。嵌入式 Gitleaks 文件
include_genericbool包含通用 API 密钥规则。false
partial_masknumber显示密钥的前 N 个字符。0
redact_withstring用于编辑密钥的字符串。<REDACTED-SECRET:$SECRET_NAME>
typesmap(string)要查找的密钥类型。所有类型

gitleaks_config 参数是自定义 gitleaks.toml 文件的路径。如果您不提供自定义配置文件的路径,则使用组件中嵌入的 Gitleaks 配置文件。

注意

此组件不支持 Gitleaks 配置文件的所有功能。它仅支持基于正则表达式的规则、secretGroup 和允许列表正则表达式。regexTarget 仅支持默认值 secret。不支持其他功能,例如 keywordsentropypathsstopwords。不支持 extend 功能。如果您使用自定义配置文件,则必须在配置文件中包含要使用的所有规则。配置文件中不支持的字段和值将被忽略。

types 参数是要查找的密钥类型的映射。提供的值用作前缀,以匹配 Gitleaks 配置中的规则 ID。例如,提供 grafana 类型会匹配规则 grafana-api-keygrafana-cloud-api-tokengrafana-service-account-token。如果您不提供此参数,则将使用所有规则。

注意

强烈建议配置此参数,并指定您要查找的密钥类型。如果您不这样做,组件将查找所有已知类型,这将消耗大量资源。

注意

Gitleaks 配置文件中的某些密钥类型依赖于正则表达式模式,这些模式不检测密钥本身,而是检测密钥周围的上下文。例如,aws-access-token 类型检测 AWS 密钥 ID,而不是密钥本身。这是因为密钥没有可以使用正则表达式轻松检测到的唯一模式。因此,启用此密钥类型后,组件将编辑密钥 ID,但不编辑实际密钥。此行为与 Gitleaks 编辑功能一致,但可能不是您期望的行为。目前,已知具有此行为的密钥类型为:aws-access-token

redact_with 参数是一个字符串,可以使用变量,例如 $SECRET_NAME(替换为匹配的密钥类型)和 $SECRET_HASH(替换为密钥的 SHA1 哈希值)。

如果将 include_generic 参数设置为 true,则该参数是一个布尔值,用于在 Gitleaks 配置文件中包含通用 API 密钥规则。默认情况下禁用此参数,因为它可能会生成误报。

allowlist 参数是允许匹配密钥的正则表达式映射。如果密钥与任何正则表达式匹配,则不会被编辑。Gitleaks 配置文件中的允许列表也适用。

partial_mask 参数是要从密钥开头显示的字符数,然后再添加编辑字符串。如果设置为 0,则整个密钥将被编辑。如果密钥长度不足 6 个字符,则将被完全编辑。对于短密钥,最多显示密钥的一半。

loki.secretfilter 组件不支持任何块。您可以使用参数配置此组件。

导出的字段

以下字段已导出,可以被其他组件引用

名称类型描述
receiverLogsReceiver其他组件可用于向其发送日志条目的值。

组件运行状况

仅当 loki.secretfilter 被赋予无效配置时,才会被报告为不健康。

调试指标

loki.secretfilter 不会公开任何组件特定的调试信息。

示例

此示例展示了如何在将日志行转发到 Loki 接收器之前,使用 loki.secretfilter 编辑日志行中的密钥。它使用自定义编辑字符串,其中包含密钥类型及其哈希值。

alloy
local.file_match "local_logs" {
    path_targets = "<PATH_TARGETS>"
}

loki.source.file "local_logs" {
    targets    = local.file_match.local_logs.targets
    forward_to = [loki.secretfilter.secret_filter.receiver]
}

loki.secretfilter "secret_filter" {
    forward_to  = [loki.write.local_loki.receiver]
    redact_with = "<ALLOY-REDACTED-SECRET:$SECRET_NAME:$SECRET_HASH>"
}

loki.write "local_loki" {
    endpoint {
        url = "<LOKI_ENDPOINT>"
    }
}

替换以下内容

  • <PATH_TARGETS>:要监控的日志文件的路径。
  • <LOKI_ENDPOINT>:要将日志发送到的 Loki 实例的 URL。

兼容组件

loki.secretfilter 可以接受来自以下组件的参数

loki.secretfilter 具有可以被以下组件使用的导出

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。