👻

スタートアップ初期フェーズなどでgithubセキュリティを最低限やりたいときは、ossf/allstarとか使ってみてもいいかも

2022/02/10に公開

現在勤めている企業では、OPA/Regoを利用して自作して対応したのですが、 zennでは「最低限動いてチェックできればいい」を実現するにはどうするかを書いてみようかなと思います。

最低限なにをチェックしたいか

  • RepositoryがPrivateである事
  • DefaultブランチがProtectedされている事
  • DefaultブランチへのForce Pushが禁止されている事
  • DefaultブランチへのマージにはApproveが必要である事
  • Approve後にcommitしたら再度Approveが必要である事

ここでは最低限を上記の通り定義しておきます。
意図としては、プロダクトコードがインターネット上で誰でも見える状態ではなく、更にProduction=Mainブランチであると仮定したときに、Productionに悪意・ミスによる変更を加えないようにする為。
※勿論これだけで守れるわけではないですが、最低限状態を保証できるだけでも、小さな安心は手に入るかと

じゃあ何を使おうか

もともと所属企業ではOPA/Regoを用いて柔軟にポリシー定義できるようにしていましたが、まだまだそういった都合のいいOSSは存在はしてない気がします(僕調べ)

そんななかでもとりあえず入れておけば、最低限の安心は得られるオールインワンな物がありますので、こちらを使います。

Google releases new open-source security software program: Scorecards
https://github.com/ossf/allstar

使い方とイメージ

README.mdに詳しく書いてくれてますので、雑に紹介

.allstarリポジトリを作成することで、allstartsはorg全体に対してどういうポリシーチェックを行うか、どのリポジトリを対象とするかをコントロールできます。

optIn/outOutについてはこちら

# .allstar/allstar.yaml in .allstar repository
optConfig:
  optOutStrategy: false
  optInRepos:
  - hoge

optOutStrategy: falseと書くことで、明示的に指定したリポジトリのみに作用させることができます。逆にすべてに適応して、各リポジトリ単位でoutOutもできます。推奨は全てに適応してリポジトリ単位でoptOutする方法です。

次にoutIn済みのリポジトリに対して、Protected branch関連のポリシーをチェックする設定を作ります。

# .allstar/branch_protection.yaml in .allstar repository
optConfig:
  optOutStrategy: true
  disableRepoOverride: false

# optInしているrepositoryのissueに書き出す設定
action: issue
enforceDefault: true

# approvalが必須
requireApproval: true
approvalCount: 1

# commitしたら再度approve必要
dismissStale: true

# forceを禁止
blockForce: true

このように書くだけです。

https://github.com/shinofara/cicd/issues/43
にて動作確認をしましたが、以下の内容のissueが作られます。

Allstar has detected that this repository’s Branch Protection security policy is out of compliance. Status:
PR Approvals not configured for branch main

This issue will auto resolve when the policy is in compliance.

Issue created by Allstar. See https://github.com/ossf/allstar/ for more information. For questions specific to the repository, please contact the owner or maintainer.

Approvalを設定してなかったので、しろって怒られました。
そしてdissmissを設定してなかったら次の通り

Updating issue after ping interval. Status:
Dismiss stale reviews not configured for branch main

すべて対応したらcloseされました。
少なくてもこの通りallstarで設定できるポリシーを満たしていない事はしれるので、とりあえず入れてみるでもいいなと思えました。

大体24時間サイクルくらいでチェックされてるかなー。あれされないな。ドキュメントに書いてるじゃん。。。
まぁ気長に待つか...になるのでポリシー変更して動作確認してのサイクルは数日かかります。(かかりました)
なので即時アラートあげたい!とかであれば今はAPIを時前で書いてチェックするとか、なにかOSS/SaaSを利用する事は必要になると思います。しかし最低限きづいたらチェックしてくれてるでいいなら、今はいいと思いました。

その他できる事

https://github.com/ossf/allstar#binary-artifacts
https://github.com/ossf/allstar#outside-collaborators
まだProtected Branchしか検証ができてないので、上記はまた後ほどですが、じょじょにGithubを扱う上で存在する様々なリスクに関して機能が追加されていくと思います。

https://github.com/ossf/allstar/issues

Discussion