loki.secretfilter
实验性:这是一个实验性组件。实验性组件可能会频繁发生破坏性变更,并且可能被移除而没有等效的替代方案。必须将
stability.level
标志设置为experimental
才能使用此组件。
loki.secretfilter
接收日志条目并从日志行中删除检测到的秘密。检测依赖于正则表达式模式,这些模式在嵌入在组件内的 Gitleaks 配置文件中定义。loki.secretfilter
还可以使用基于 Gitleaks 配置文件结构的自定义配置文件。
注意
个人身份信息 (PII) 目前不在范围之内,并且某些秘密可能未被检测到。此组件可能会产生误报或删除过多内容。请勿完全依赖此组件来删除敏感信息。
注意
此组件对日志行进行操作,不扫描标签或其他元数据。
用法
loki.secretfilter "<LABEL>" {
forward_to = <RECEIVER_LIST>
}
参数
loki.secretfilter
支持以下参数:
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
forward_to | list(LogsReceiver) | 用于发送日志条目的接收器列表。 | 是 | |
allowlist | map(string) | 允许匹配秘密的正则表达式列表。 | {} | 否 |
gitleaks_config | string | 自定义 gitleaks.toml 文件的路径。 | 嵌入式 Gitleaks 文件 | 否 |
include_generic | bool | 是否包含通用 API 密钥规则。 | false | 否 |
partial_mask | number | 显示秘密的前 N 个字符。 | 0 | 否 |
redact_with | string | 用于删除秘密的字符串。 | <REDACTED-SECRET:$SECRET_NAME> | 否 |
types | map(string) | 要查找的秘密类型。 | 所有类型 | 否 |
gitleaks_config
参数是自定义 gitleaks.toml
文件的路径。如果您未提供自定义配置文件的路径,则使用嵌入在组件中的 Gitleaks 配置文件。
注意
此组件不支持 Gitleaks 配置文件的所有功能。它仅支持基于正则表达式的规则、
secretGroup
和允许列表正则表达式。regexTarget
仅支持默认值secret
。不支持keywords
、entropy
、paths
和stopwords
等其他功能。不支持extend
功能。如果您使用自定义配置文件,则必须在配置文件中包含所有要使用的规则。配置文件中不受支持的字段和值将被忽略。
注意
嵌入式配置文件可能会在 Alloy 版本之间发生变化。为确保一致性,请使用外部配置文件。
types
参数是一个映射,用于指定要查找的秘密类型。提供的值用作与 Gitleaks 配置中规则 ID 匹配的前缀。例如,提供类型 grafana
会匹配规则 grafana-api-key
、grafana-cloud-api-token
和 grafana-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
组件不支持任何块。您可以通过参数配置此组件。
导出的字段
以下字段是导出的,可以被其他组件引用:
名称 | 类型 | 描述 |
---|---|---|
receiver | LogsReceiver | 其他组件可以用来发送日志条目的值。 |
组件健康状态
仅当配置无效时,loki.secretfilter
会报告不健康状态。
调试指标
loki.secretfilter
不会公开任何组件特定的调试信息。
示例
此示例展示了如何使用 loki.secretfilter
从日志行中删除秘密,然后再将其转发到 Loki 接收器。它使用包含秘密类型及其哈希值的自定义删除字符串。
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
LogsReceiver
的组件
loki.secretfilter
具有可由以下组件使用的导出字段:
- 使用 Loki
LogsReceiver
的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正常工作。有关更多详细信息,请参阅链接的文档。