Skip to content
Latchkey

runner 分離とは? - job が互いに影響し合わないようにする

runner 分離とは、各 CI job が他の job からどれだけ分離されているかの度合いであり、ある job が他の job の secret を読んだり、そのファイルを見たり、その環境を破壊したりできないようにします。

CI job は secret や信頼できないコードを扱うため、分離は便利さではなくセキュリティ上の性質です。弱い分離は、ある job(あるいは悪意ある PR)が別の job に手を伸ばせることを意味します。強い分離は、すべての job が密封されていることを意味します。

なぜ分離が重要なのか

job は secret、ソースコード、認証情報へのアクセス権を持って実行されます。分離がなければ、共有 runner 上の侵害された、または悪意ある job が、次の job の secret を盗んだり、その出力を改ざんしたり、後で使うためのバックドアを残したりできてしまいます。

分離のレベル

  • プロセス: 弱い - job が同じ OS を共有し、互いを見られる。
  • コンテナ: より良い - namespace が job を分けるが、kernel は共有する。
  • VM / 新しいマシン: 強い - 各 job が自身のマシンを得て、あとで破棄される。

分離とエフェメラル性

エフェメラル runner は実用上最も強い分離です。job ごとに新しいマシンを用意し、あとで破棄するため、ある job のものが次の job に届くまで残ることはありません。永続的な共有 runner は最も弱く、状態やアクセスが引き継がれてしまいます。

マネージド runner における分離

Latchkey は各 job を、あとで破棄される専用のエフェメラル runner 上で実行します。そのため job はデフォルトで分離され、secret が次の job に見つかるまで残ることはありません。

分離と信頼できない pull request

最もリスクの高い CI ワークロードは、secret へのアクセス権を持って実行される fork からの pull request です。強い分離、つまり job のあとに取り壊される新しい使い捨てのマシンは、悪意ある PR が到達できる範囲を制限し、それが行うことが次の実行まで残らないことを保証します。

重要なポイント

  • runner 分離は、各 job を他のすべての job から分離する。
  • 分離がなければ、ある job が secret を盗んだり別の job を破壊したりできる。
  • 分離は、弱いプロセスレベルから、job ごとのマシンによる強いものまで幅がある。
  • エフェメラルで使い捨ての runner が、実用上最も強い分離を与える。

関連ガイド