Skip to content

强化任务运行器#

任务运行器负责执行来自 Code 节点的代码。虽然 Code 节点执行是安全的,但您可以遵循这些建议来进一步强化您的任务运行器。

在外部模式下将任务运行器作为 sidecar 运行#

为了增加核心 n8n 进程和 Code 节点中的代码之间的隔离,请在外部模式下运行任务运行器。外部任务运行器作为单独的容器启动,为执行 Code 节点中定义的 JavaScript 提供完全隔离的环境。

使用 distroless 镜像#

为了减少攻击面,请使用 distroless Docker 镜像变体。distroless 镜像只包含应用程序及其运行时依赖,不包含包管理器、shell 或其他运行时不需要的工具。

要使用 distroless 镜像,请在 Docker tag 后追加 -distroless 后缀。例如:2.4.6-distroless

以 nobody 用户运行#

为了提高安全性,将任务运行器配置为使用非特权 nobody 用户运行,并将用户与组 ID 设为 65532。这可以防止容器进程以 root 权限运行,从而降低安全漏洞带来的潜在损害。

配置只读根文件系统#

配置只读根文件系统以防止运行时对容器文件系统进行修改。这有助于防御尝试修改系统文件的恶意代码。

任务运行器仍需要一些临时存储以便运行。为此,请将最小化的 emptyDir 卷挂载到 /tmp。如果你的工作流需要更多临时空间,请相应增大卷大小。

配置 AppArmor profile#

作为纵深防御措施,请应用 AppArmor profile,防止任务运行器容器读取敏感的 /proc 文件,例如 environmounts。这些文件可能会把环境变量(包括密钥和凭据)暴露给容器内运行的代码。有关如何将 profile 应用于 pod,请参阅 Kubernetes AppArmor 文档

将以下规则添加到你的 AppArmor profile:

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

这会拒绝并记录任何读取、写入或链接到各进程 environmounts 文件的尝试。