태스크 러너 강화
셀프 호스팅 n8n 인스턴스의 격리를 강화하기 위해 태스크 러너를 강화합니다.
태스크 러너 는 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 파일에 대한 읽기, 쓰기, 링크 시도를 거부하고 로그로 남깁니다.