菜单
实验性 开源

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 功能。如果您使用自定义配置文件,则必须在配置文件中包含所有要使用的规则。配置文件中不受支持的字段和值将被忽略。

注意

嵌入式配置文件可能会在 Alloy 版本之间发生变化。为确保一致性,请使用外部配置文件。

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.secretfilter 从日志行中删除秘密,然后再将其转发到 Loki 接收器。它使用包含秘密类型及其哈希值的自定义删除字符串。

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 具有可由以下组件使用的导出字段:

注意

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