DataKit 安全说明¶
DataKit 作为一个部署在您节点上的系统级可观测性代理,其核心使命是为您提供对基础设施最深入、最全面的洞察。为了达成这一目标——例如采集主机进程元数据、追踪网络流、利用 eBPF 捕获内核事件以及访问受保护的系统文件——DataKit 不可避免地需要比普通无状态应用更高的权限。
我们深知,强大的权限与安全责任并存。本文档旨在透明地解释每一项权限的用途,阐明其与特定采集功能之间的直接联系,并为您提供根据自身安全基线进行调整的建议。
权限详解¶
以下是安全扫描工具常见的告警项,以及它们对于 DataKit 核心功能的必要性说明。
Pod 级权限¶
这些权限打破了 Pod 的隔离边界,是 DataKit 作为节点代理采集宿主机信息的关键。
-
共享主机 PID 命名空间 (
hostPID: true)- 用途:允许 DataKit 查看节点上所有的进程,而不仅仅是它自己。
- 依赖功能:
- eBPF 网络追踪: 需要将网络流量(TCP/UDP 连接)与具体的进程(PID)关联起来,从而解决「哪个服务的哪个 Pod 发起了这次网络连接」这样的关键问题。
-
共享主机网络命名空间 (
hostNetwork: true)- 用途:允许 DataKit 直接访问和监听节点的网络接口。
- 依赖功能:
- eBPF 网络追踪 (
netflow,bpf): 必须在主机网络下才能捕获所有进出节点的网络流量。 - 便捷的数据接收: 允许 StatsD、OpenTelemetry 等服务直接将数据发送到
node-IP:Port,简化了服务发现和网络配置。
- eBPF 网络追踪 (
-
特权模式 (
securityContext.privileged: true)- 用途: 这是最强大的权限,它赋予容器几乎等同于宿主机 root 用户的内核访问能力。
- 依赖功能:
- eBPF 监控: 加载和运行 eBPF 程序是特权操作,需要直接与内核交互。这是启用 eBPF 功能的硬性要求。
- 访问调试文件系统: 访问
/sys/kernel/debug等路径以获取深度的内核和硬件指标。
容器级权限¶
这些权限定义了 DataKit 容器内部的行为和能力。
-
以 root 用户启动容器
- 用途: 以
root权限运行,以便读取受保护的系统文件和目录。 - 依赖功能: 访问
/proc下的进程信息、/sys下的内核参数、/var/log下的各类日志文件等。这是大多数节点级指标和日志采集的基础。
- 用途: 以
-
监听节点主机端口 (
ports.hostPort)- 用途: 将容器的端口直接暴露在节点的 IP 地址上。
- 依赖功能: 与
hostNetwork: true的便捷数据接收目的一致,为外部服务提供一个稳定、易于访问的数据上报入口。
-
可写的文件系统 (
readOnlyRootFilesystem: false)- 用途: 允许 DataKit 在其容器文件系统内写入数据。
- 依赖功能:
- 数据缓存: 在
volumeMounts中指定的缓存路径(如/usr/local/datakit/cache)需要写入权限。 - 动态内容: 运行时下载的插件(如 Python 采集脚本)或生成的临时配置文件。
- 内部日志: 记录 DataKit 自身的运行状态日志。
- 数据缓存: 在
安全理念与配置建议¶
我们完全理解并尊重您所在组织的安全策略。DataKit 的设计是模块化的,您可以根据需要禁用部分高权限设置,但这将直接影响相关的数据采集能力。
为了帮助您做出明智的决策,下表总结了主要功能与所需权限的对应关系:
| 如果您不需要此功能 | 您可以安全地在 DaemonSet YAML 中进行如下修改 |
|---|---|
主机进程指标 (host_processes) |
设置 hostPID: false |
| eBPF 监控 (网络、安全) | 设置 securityContext.privileged: false 和 hostPID: false,并从 ENV_DEFAULT_ENABLED_INPUTS 中移除 ebpf 相关的采集器。 |
主机网络指标 (net) |
设置 hostNetwork: false,并移除 ports.hostPort 的定义。 |
| 在节点上直接接收数据 (StatsD, OpenTelemetry) | 设置 hostNetwork: false,并移除 ports.hostPort。您仍然可以通过 Kubernetes Service 来暴露端口。 |
建议:
- 按需配置:请参考上表,根据您的实际监控需求,在部署前裁剪 DataKit 的权限。
- 环境隔离:我们建议将 DataKit 部署在一个受信任的环境中。利用 Kubernetes 的
Tolerations和NodeSelector,您可以将其部署范围限制在特定的节点池,而非整个集群。 - 保持更新:请持续关注我们的官方发布,以获取最新的安全更新和最佳实践。
我们致力于在提供强大功能的同时,最大限度地尊重您的安全需求。如果您有任何进一步的问题,请随时与我们联系。