본문 바로가기
C.W.K.
Stream
Lesson 04 of 13 · published

자체 호스팅 러너 보안

~12 min · security, isolation, ephemeral

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

자체 호스팅 러너는 기본적으로 신뢰할 수 없는 코드를 실행해

저장소가 누구의 PR이든 다 받는다고 치자. 그 PR에 워크플로 변경 사항이 들어있을 수도 있어. 만약 격리가 안 되어 있다면 악의적인 PR이 파일 시스템을 읽거나, 환경 변수를 덤프하고, 백도어를 심거나 디스크 캐시에 있는 비밀값을 빼돌릴 수 있어. 기본 설정은 그냥 위험해.

보안 강화 체크리스트

  1. 퍼블릭 포크에 노출하지 마. 저장소 설정에서 Actions로 가서 Require approval for outside collaborators를 켜. 아니면 모든 PR에 승인을 요구해.
  2. 임시 러너를 써. VM 라이프사이클마다 작업 하나만 돌려. 작업이 끝나면 VM을 바로 파괴해. 쓸 만한 도구로는 액션-러너-controller(k8s), runs-on(AWS), philips-labs/terraform-aws-github-runner가 있어.
  3. 컨테이너나 VM 안에서 실행해. 호스트 OS에 직접 러너 에이전트를 돌리지 마.
  4. 네트워크 외부 연결을 엄격하게. GitHub하고 의도한 대상으로 향하는 아웃바운드만 허용해. 기본 허용은 막아.
  5. 신뢰 계층을 분리해. 퍼블릭 PR용 러너하고 신뢰하는 배포 러너는 호스트를 공유하면 안 돼.
  6. 비밀값은 등록 시점에 주고 디스크에 두지 마. 러너 이미지에 비밀값을 구워 넣지 마. OIDC랑 작업별 비밀값 주입을 활용해.
  7. 패치와 로테이션. 러너 에이전트는 자동 업데이트되지만, OS 패치는 네 책임이야.

Code

Docker로 임시 러너 구성하기·bash
# Run one ephemeral runner that picks up exactly one job
docker run --rm \
  -e RUNNER_TOKEN=$RUNNER_TOKEN \
  -e RUNNER_REPOSITORY_URL=https://github.com/my-org/my-repo \
  -e RUNNER_LABELS='self-hosted,linux-x64,ephemeral' \
  -e EPHEMERAL=true \
  --network=runner-net \
  --read-only --tmpfs /tmp --tmpfs /home/runner \
  ghcr.io/myrepo/runner:latest

External links

Exercise

자체 호스팅 러너를 쓴다면 7개 항목의 보안 강화 체크리스트를 꼭 실행해. '아니오'를 '예'로 바꾸거나 위험성을 글로 적어 수용해. 감사는 대충하지 마.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.