跳转至

DataKit 安全说明

DataKit 作为一个部署在您节点上的系统级可观测性代理,其核心使命是为您提供对基础设施最深入、最全面的洞察。为了达成这一目标——例如采集主机进程元数据、追踪网络流、利用 eBPF 捕获内核事件以及访问受保护的系统文件——DataKit 不可避免地需要比普通无状态应用更高的权限。

我们深知,强大的权限与安全责任并存。本文档旨在透明地解释每一项权限的用途,阐明其与特定采集功能之间的直接联系,并为您提供根据自身安全基线进行调整的建议。


权限详解

以下是安全扫描工具常见的告警项,以及它们对于 DataKit 核心功能的必要性说明。

Pod 级权限

这些权限打破了 Pod 的隔离边界,是 DataKit 作为节点代理采集宿主机信息的关键。

  1. 共享主机 PID 命名空间 (hostPID: true)

    • 用途:允许 DataKit 查看节点上所有的进程,而不仅仅是它自己。
    • 依赖功能
      • eBPF 网络追踪: 需要将网络流量(TCP/UDP 连接)与具体的进程(PID)关联起来,从而解决「哪个服务的哪个 Pod 发起了这次网络连接」这样的关键问题。
  2. 共享主机网络命名空间 (hostNetwork: true)

    • 用途:允许 DataKit 直接访问和监听节点的网络接口。
    • 依赖功能
      • eBPF 网络追踪 (netflow, bpf): 必须在主机网络下才能捕获所有进出节点的网络流量。
      • 便捷的数据接收: 允许 StatsD、OpenTelemetry 等服务直接将数据发送到 node-IP:Port,简化了服务发现和网络配置。
  3. 特权模式 (securityContext.privileged: true)

    • 用途: 这是最强大的权限,它赋予容器几乎等同于宿主机 root 用户的内核访问能力。
    • 依赖功能
      • eBPF 监控: 加载和运行 eBPF 程序是特权操作,需要直接与内核交互。这是启用 eBPF 功能的硬性要求。
      • 访问调试文件系统: 访问 /sys/kernel/debug 等路径以获取深度的内核和硬件指标。

容器级权限

这些权限定义了 DataKit 容器内部的行为和能力。

  1. 以 root 用户启动容器

    • 用途: 以 root 权限运行,以便读取受保护的系统文件和目录。
    • 依赖功能: 访问 /proc 下的进程信息、/sys 下的内核参数、/var/log 下的各类日志文件等。这是大多数节点级指标和日志采集的基础。
  2. 监听节点主机端口 (ports.hostPort)

    • 用途: 将容器的端口直接暴露在节点的 IP 地址上。
    • 依赖功能: 与 hostNetwork: true 的便捷数据接收目的一致,为外部服务提供一个稳定、易于访问的数据上报入口。
  3. 可写的文件系统 (readOnlyRootFilesystem: false)

    • 用途: 允许 DataKit 在其容器文件系统内写入数据。
    • 依赖功能:
      • 数据缓存: 在 volumeMounts 中指定的缓存路径(如 /usr/local/datakit/cache)需要写入权限。
      • 动态内容: 运行时下载的插件(如 Python 采集脚本)或生成的临时配置文件。
      • 内部日志: 记录 DataKit 自身的运行状态日志。

安全理念与配置建议

我们完全理解并尊重您所在组织的安全策略。DataKit 的设计是模块化的,您可以根据需要禁用部分高权限设置,但这将直接影响相关的数据采集能力。

为了帮助您做出明智的决策,下表总结了主要功能与所需权限的对应关系:

如果您不需要此功能 您可以安全地在 DaemonSet YAML 中进行如下修改
主机进程指标 (host_processes) 设置 hostPID: false
eBPF 监控 (网络、安全) 设置 securityContext.privileged: falsehostPID: false,并从 ENV_DEFAULT_ENABLED_INPUTS 中移除 ebpf 相关的采集器。
主机网络指标 (net) 设置 hostNetwork: false,并移除 ports.hostPort 的定义。
在节点上直接接收数据 (StatsD, OpenTelemetry) 设置 hostNetwork: false,并移除 ports.hostPort。您仍然可以通过 Kubernetes Service 来暴露端口。

建议:

  • 按需配置:请参考上表,根据您的实际监控需求,在部署前裁剪 DataKit 的权限。
  • 环境隔离:我们建议将 DataKit 部署在一个受信任的环境中。利用 Kubernetes 的 TolerationsNodeSelector,您可以将其部署范围限制在特定的节点池,而非整个集群。
  • 保持更新:请持续关注我们的官方发布,以获取最新的安全更新和最佳实践。

我们致力于在提供强大功能的同时,最大限度地尊重您的安全需求。如果您有任何进一步的问题,请随时与我们联系。

文档评价

文档内容是否对您有帮助? ×