Skip to content
Published on

GitHub Actions ARC 運用ガイド: Ephemeral Runner、Scale Set、セキュリティ境界

Authors

GitHub Actions ARC 運用ガイド

はじめに

GitHub Actions を組織規模で運用し始めると、self-hosted runner は単なるコスト最適化ではなく、実行隔離とセキュリティ境界の設計対象になります。特に ARC を Kubernetes 上で使うと、重要な問いは次のようになります。

  • runner は長寿命にするか、ephemeral にするか
  • scale set を workload や trust boundary ごとにどう分けるか
  • イメージ、キャッシュ、シークレット、ネットワークをどう分離するか

この記事では GitHub の ARC 公式ドキュメントを基に、運用判断に必要な観点を整理します。

なぜ ephemeral runner が安全な既定値になりやすいのか

長寿命 runner は始めやすい一方で、時間とともに状態が蓄積します。

  • 前回 job のファイルが残る
  • ツールバージョンが drift する
  • 汚染や侵害が長く残る

ephemeral runner は短いライフサイクル後に破棄されるため、次の利点があります。

  • job 間隔離が強い
  • イメージベースの標準化がしやすい
  • 汚染状態を次に引き継ぎにくい

Scale set は workload と trust boundary で分ける

ARC 導入時の典型的な失敗は、すべての保存庫と workload を 1 つの巨大 scale set にまとめることです。管理は単純に見えても、セキュリティ境界と優先度制御が弱くなります。

推奨される分離基準:

  • 信頼できないコードと信頼済みコード
  • build 系と deploy 系
  • 異なるネットワークアクセス要件

例:

scale set用途分離理由
public-ci外部寄稿 PR の検証untrusted code を隔離
internal-build内部 build と test制御された package と cache アクセス
deploy-opsdeployment と運用 workflow強い資格情報と承認境界が必要

セキュリティは runner 本体より周辺境界で決まる

runner セキュリティはイメージ更新だけでは足りません。重要なのは周辺の実行境界です。

  • job が触れられる secret
  • Kubernetes service account 権限
  • イメージ provenance
  • outbound network policy
  • cache と artifact 保存境界

特に untrusted pull request 用 runner と deploy credential を持つ runner を同じ境界に置くのは避けるべきです。

イメージ戦略は起動速度と清潔性のバランス

ephemeral runner ではイメージ設計が重要です。空に近すぎると毎回インストールコストがかかり、重すぎると pull が遅くなります。

現実的なバランス:

  • 言語ランタイムや共通 build tool はベースイメージへ入れる
  • プロジェクト固有依存は cache または workflow で復元する
  • runner image のバージョンと rollout 履歴を明確にする

ネットワークとシークレットは最小権限で

ARC runner は CI workload ですが、実際にはかなり強い権限が付きやすい実行環境です。次を推奨します。

  • scale set ごとに egress policy を分離する
  • cloud credential は deploy runner に限定する
  • 単純な test runner は最小権限に保つ
  • 可能なら long-lived secret より GitHub OIDC を優先する

本番で見るべき指標

  • job queue 待ち時間
  • runner 生成時間
  • Pod scheduling failure
  • image pull 時間
  • 失敗 job 後の cleanup 状態
  • scale out, scale in の遅延

運用チェックリスト

  • untrusted workload と privileged workload が分離されているか
  • ephemeral runner が基本パターンか
  • runner image バージョンが追跡可能か
  • scale set ごとに network policy 境界があるか
  • OIDC または最小権限 secret 戦略があるか

よくあるアンチパターン

すべての保存庫を 1 つの runner group に入れる

一見シンプルですが、セキュリティと優先度制御が崩れます。

状態を多く残す長寿命 runner

見かけ上は速くても、drift と汚染のリスクが増えます。

deploy credential と外部 PR 検証を同じ境界で処理する

最も避けたい構成の一つです。

まとめ

ARC 運用の本質は Kubernetes 上で runner を動かす技術ではなく、どの job をどの信頼境界で動かすかという運用モデルです。ephemeral runner、分離された scale set、最小権限のネットワークと secret 戦略がその中心になります。

References