跳到主要内容

加固任务运行器

任务运行器负责执行 Code 节点中的代码。Code 节点执行本身具有安全保护,也可以通过以下建议进一步加固运行器。

在外部模式下以边车容器运行 ​

要加强 n8n 核心进程与 Code 节点代码之间的隔离,请使用外部模式运行任务运行器。外部运行器在独立容器中启动,为 Code 节点定义的 JavaScript 提供完全隔离的执行环境。

使用 distroless 镜像 ​

为缩小攻击面,可以使用 distroless Docker 镜像变体。它只包含应用及运行时依赖,不包含运行时不需要的包管理器、Shell 或其他工具。

使用此镜像时,在 Docker 标签后添加 -distroless 后缀,例如 2.4.6-distroless。

以 nobody 用户运行 ​

为提高安全性,将任务运行器配置为使用无特权的 nobody 用户,其用户和组 ID 均为 65532。这样可以避免容器进程以 root 权限运行,限制安全漏洞可能造成的损害。

配置只读根文件系统 ​

配置只读根文件系统,禁止运行时修改容器文件系统,防止恶意代码试图改写系统文件。

任务运行器仍需要少量临时存储。因此,将最小规模的 emptyDir 卷挂载到 /tmp。工作流需要更多临时空间时,相应增加卷大小。

配置 AppArmor 策略 ​

作为纵深防御措施,可应用 AppArmor 策略,禁止任务运行器容器读取敏感的 /proc 文件,例如 environ 和 mounts。这些文件可能向容器内代码暴露环境变量,包括密钥和凭据。如何将策略应用到 Pod,请参阅 Kubernetes AppArmor 文档。

将以下规则添加到 AppArmor 策略:

audit deny @{PROC}/[0-9]*/{environ,mounts} rwl,

此规则拒绝并记录任何读取、写入或链接各进程 environ 和 mounts 文件的尝试。

相关资源 ​

本文为社区中文翻译。查看对应英文原文