Skip to content
Published on

GitHub Actions ARC 운영 가이드: Ephemeral Runner, Scale Set, 보안 경계

Authors

GitHub Actions ARC 운영 가이드

들어가며

GitHub Actions를 조직 규모로 운영하기 시작하면 self-hosted runner는 단순 비용 절감 수단이 아니라 실행 격리와 보안 경계를 설계하는 인프라가 됩니다. 특히 Kubernetes 환경에서는 Actions Runner Controller, ARC를 쓰는 순간 다음 질문이 중요해집니다.

  • runner를 장수형으로 둘 것인가, ephemeral로 둘 것인가
  • scale set은 조직별, 저장소별, workload별로 어떻게 나눌 것인가
  • 빌드 이미지, 캐시, 시크릿, 네트워크를 어디까지 분리할 것인가

이 글은 GitHub 공식 ARC 문서를 기준으로 운영 관점의 판단 기준을 정리합니다.

왜 Ephemeral Runner가 기본값에 가까운가

장수형 runner는 빠르게 시작할 수 있지만, 시간이 지날수록 상태가 누적됩니다.

  • 이전 job의 파일과 캐시가 남을 수 있음
  • 도구 버전이 drift할 수 있음
  • 침해나 오염이 있었을 때 영향 범위가 커짐

반면 ephemeral runner는 job 또는 짧은 수명 주기 후 사라지므로 다음 장점이 있습니다.

  • 작업 간 격리가 좋아짐
  • 이미지 기반 표준화가 쉬워짐
  • 오염된 상태를 다음 job으로 넘기지 않음

운영 난이도는 조금 올라가지만, 보안과 재현성을 생각하면 기본 선택지로 두는 편이 더 안전합니다.

Scale Set 경계는 workload와 trust boundary 기준으로 나눈다

ARC를 처음 도입할 때 흔한 실수는 조직 전체를 하나의 giant scale set으로 묶는 것입니다. 이렇게 하면 자원 공유는 쉬워 보여도, 보안 경계와 우선순위 제어가 약해집니다.

더 나은 기준은 다음과 같습니다.

  • 신뢰 수준이 다른 저장소는 분리
  • 빌드 성격이 다른 workload는 분리
  • 네트워크 접근 범위가 다른 job은 분리

예시:

scale set용도분리 이유
public-ci외부 기여 PR 검증신뢰되지 않은 코드 격리
internal-build내부 서비스 빌드내부 패키지, 캐시 접근 허용
deploy-ops배포와 운영 자동화강한 자격 증명과 승인 경계 필요

보안은 runner 자체보다 주변 경계가 좌우한다

runner 보안은 단순히 컨테이너 이미지를 최신으로 유지하는 문제보다 넓습니다.

꼭 봐야 할 보안 경계

  • job이 접근 가능한 시크릿
  • 러너 Pod의 서비스 계정 권한
  • 컨테이너 이미지 provenance
  • 아웃바운드 네트워크 정책
  • artifact와 cache 저장소 경계

특히 untrusted pull request를 처리하는 runner와 배포 자격 증명을 가진 runner를 같은 경계에 두는 것은 피해야 합니다.

이미지 전략은 "빠른 시작"과 "깨끗한 실행" 사이 균형이다

ephemeral runner를 쓰면 이미지 전략이 중요해집니다. 이미지가 너무 비어 있으면 매 job 설치 비용이 커지고, 너무 무거우면 pull 시간이 커집니다.

실무적으로는 다음 방식이 균형이 좋습니다.

  • 언어 런타임, 공통 빌드 도구는 베이스 이미지에 포함
  • 프로젝트별 종속성은 cache나 job 단계에서 복원
  • runner 이미지는 버전 태그와 변경 이력을 명확히 관리

네트워크와 시크릿은 최소 권한 원칙으로

ARC runner는 CI 워크로드지만, 실제로는 매우 강한 권한이 붙기 쉬운 실행 환경입니다. 따라서 다음 기준을 권장합니다.

  • scale set별 egress 정책 분리
  • 배포 runner에만 cloud credential 접근 허용
  • 단순 test runner는 read-only 수준으로 제한
  • GitHub OIDC를 사용할 수 있으면 long-lived secret보다 우선 고려

운영 지표와 체크리스트

운영 중에는 다음을 봐야 합니다.

  • job 대기 시간
  • runner 생성 시간
  • Pod scheduling 실패율
  • 이미지 pull 시간
  • 실패한 job 후 cleanup 상태
  • scale out과 scale in 지연

운영 체크리스트

  • untrusted workload와 privileged workload가 분리되어 있는가
  • ephemeral runner가 기본 동작인가
  • runner 이미지 버전이 추적 가능한가
  • scale set별 네트워크 정책이 분리되어 있는가
  • OIDC 또는 최소 권한 secret 전략이 있는가

흔한 안티패턴

모든 저장소를 하나의 runner 그룹에 넣는다

운영은 단순해 보여도 보안과 우선순위 제어가 무너집니다.

장수형 runner에 상태를 많이 남긴다

빠른 빌드처럼 보이지만, drift와 오염 가능성이 커집니다.

배포 자격 증명과 외부 PR 검증을 같은 경계에서 처리한다

가장 피해야 할 구성입니다.

마무리

ARC 운영의 핵심은 Kubernetes 위에서 runner를 띄우는 기술이 아니라, 어떤 job을 어떤 신뢰 경계에서 실행할지 결정하는 운영 모델입니다. ephemeral runner, 분리된 scale set, 최소 권한 네트워크와 시크릿 전략이 그 모델의 중심입니다.

References