태스크 러너 강화
n8n v2.29태스크 러너는 Code node의 코드 실행을 담당합니다. 핵심 n8n 프로세스와 Code node의 코드 간 격리를 높이려면, 태스크 러너를 외부 모드로 실행하세요. 공격 표면을 줄이려면 distroless Docker 이미지 변형을 사용하세요.
태스크 러너는 Code node의 코드 실행을 담당합니다. Code node 실행은 안전하지만, 다음 권장 사항을 따르면 태스크 러너를 더욱 강화할 수 있습니다.
외부 모드에서 태스크 러너를 사이드카로 실행하기#
핵심 n8n 프로세스와 Code node의 코드 간 격리를 높이려면, 태스크 러너를 외부 모드로 실행하세요. 외부 태스크 러너는 별도의 컨테이너로 실행되어, Code node에 정의된 JavaScript를 실행하기 위한 완전히 격리된 환경을 제공합니다.
distroless 이미지 사용하기#
공격 표면을 줄이려면 distroless Docker 이미지 변형을 사용하세요. distroless 이미지에는 애플리케이션과 런타임에 필요한 의존성만 포함되며, 런타임에 필요하지 않은 패키지 관리자, 셸, 기타 유틸리티는 제외됩니다.
distroless 이미지를 사용하려면 Docker 태그에 -distroless 접미사를 추가하세요. 예: 2.4.6-distroless.
nobody 사용자로 실행하기#
보안을 개선하려면 태스크 러너를 사용자 ID 및 그룹 ID가 65532인 권한 없는 nobody 사용자로 실행하도록 구성하세요. 이렇게 하면 컨테이너 프로세스가 루트 권한으로 실행되는 것을 방지하고, 보안 취약점으로 인한 잠재적 피해를 제한할 수 있습니다.
읽기 전용 루트 파일 시스템 구성하기#
읽기 전용 루트 파일 시스템을 구성하여 런타임 시 컨테이너 파일 시스템이 수정되는 것을 방지하세요. 이를 통해 시스템 파일을 수정하려는 악성 코드로부터 보호할 수 있습니다.
태스크 러너는 작동을 위해 여전히 임시 저장 공간이 일부 필요합니다. 이를 지원하려면 /tmp에 최소 크기의 emptyDir 볼륨을 마운트하세요. 워크플로에 더 많은 임시 공간이 필요한 경우, 그에 맞게 볼륨 크기를 늘리세요.
AppArmor 프로필 구성하기#
심층 방어 조치로, 태스크 러너 컨테이너가 environ 및 mounts와 같은 민감한 /proc 파일을 읽지 못하도록 AppArmor 프로필을 적용하세요. 이러한 파일은 컨테이너 내에서 실행되는 코드에 시크릿 및 자격 증명을 포함한 환경 변수를 노출할 수 있습니다. 파드에 프로필을 적용하는 방법은 Kubernetes AppArmor 문서를 참고하세요.
AppArmor 프로필에 다음 규칙을 추가하세요:
audit deny @{PROC}/[0-9]*/{environ,mounts} rwl,
이는 프로세스별 environ 및 mounts 파일에 대한 읽기, 쓰기, 링크 시도를 거부하고 로그로 남깁니다.