Skip to content
Latchkey

Least Privilegeとは?

least privilegeとは、CIのjobが仕事に必要な権限をちょうど - それ以上は与えず - 受け取ることで、侵害されても影響範囲が小さくなるようにすることです。

何でもできるパイプラインは、侵害されれば攻撃者が何でもできるパイプラインです。least privilegeの原則は各jobの権限を最小かつ具体的に保ち、漏洩したトークンや悪意あるdependencyによる被害が封じ込められるようにします。

原則

タスクに十分な最小限の権限セットを付与します。テストのjobは何かへの書き込みアクセスをほとんど必要とせず、deployのjobは1つのサービスをdeployする必要があるだけで、アカウントを管理する必要はありません。

CIでの適用

  • プラットフォームのトークンのスコープを絞る - 例えばデフォルトで permissions: contents: read とし、必要な場合のみ拡張します。
  • OIDCのroleには厳格な信頼ポリシーと最小限のクラウド権限を与えます。
  • 読み取りjobと書き込みjobを分離し、パイプラインの大部分が書き込みアクセスを持たないようにします。

小さな例

workflowレベルで permissions: contents: read を設定すると、デフォルトのトークンが読み取り専用になります。PRにコメントする必要がある単一のjobは、自分だけに pull-requests: write を追加します - パイプラインの他の部分は何も書き込めません。

なぜCIでより重要なのか

CIはやや信頼できないコード、つまりサードパーティのaction、dependency、pull requestを実行します。least privilegeはそれらのいずれもが敵対的かもしれないと想定し、たとえそうであっても、jobが狭い職務範囲を越えられないことを保証します。

権限の監査

権限は時間とともに肥大化します。各workflowとroleが何をできるかを定期的に見直し、使われていないものを削りましょう - パイプラインが決して行使しないアクセスは、いつか侵害された場合には純粋なマイナスでしかありません。

重要なポイント

  • least privilegeはjobに必要な権限だけを与えます。
  • トークンはデフォルトで読み取り専用にし、必要な場合のみ狭く拡張します。
  • 漏洩したトークンや敵対的なdependencyの影響範囲を抑えます。

関連ガイド