자체 호스팅 러너는 기본적으로 신뢰할 수 없는 코드를 실행해
저장소가 누구의 PR이든 다 받는다고 치자. 그 PR에 워크플로 변경 사항이 들어있을 수도 있어. 만약 격리가 안 되어 있다면 악의적인 PR이 파일 시스템을 읽거나, 환경 변수를 덤프하고, 백도어를 심거나 디스크 캐시에 있는 비밀값을 빼돌릴 수 있어. 기본 설정은 그냥 위험해.
보안 강화 체크리스트
- 퍼블릭 포크에 노출하지 마. 저장소 설정에서 Actions로 가서 Require approval for outside collaborators를 켜. 아니면 모든 PR에 승인을 요구해.
- 임시 러너를 써. VM 라이프사이클마다 작업 하나만 돌려. 작업이 끝나면 VM을 바로 파괴해. 쓸 만한 도구로는 액션-러너-controller(k8s), runs-on(AWS), philips-labs/terraform-aws-github-runner가 있어.
- 컨테이너나 VM 안에서 실행해. 호스트 OS에 직접 러너 에이전트를 돌리지 마.
- 네트워크 외부 연결을 엄격하게. GitHub하고 의도한 대상으로 향하는 아웃바운드만 허용해. 기본 허용은 막아.
- 신뢰 계층을 분리해. 퍼블릭 PR용 러너하고 신뢰하는 배포 러너는 호스트를 공유하면 안 돼.
- 비밀값은 등록 시점에 주고 디스크에 두지 마. 러너 이미지에 비밀값을 구워 넣지 마. OIDC랑 작업별 비밀값 주입을 활용해.
- 패치와 로테이션. 러너 에이전트는 자동 업데이트되지만, OS 패치는 네 책임이야.