こんにちは。今年からグループ情報部という部署にいる 池田(@mashiike) です。
背景
先日、GitHub Actionsの tj-actions/changed-files
にセキュリティインシデントがありました。実は、 reviewdog/action-setup
経由らしいという話が直近の話題です。
サプライチェーン攻撃が本格的に心配になってきた今日このごろです。 さて、このような状況で、GitHub Actionsの外部actionへの攻撃に対する対策はどうしたら良いのでしょうか?
そんなとき、ちょうど次の記事が公開されまして、「へぇーRenovateとDependabotならCommitHash直指定でも自動で上げてくれるんだ〜」と知りました。
やっぱり、対策はCommitHashで直指定して、あとはRenovateやDependabotつくったPRを精査という感じなのでしょう。 これから、たくさんのリポジトリのものを置き換えねば!
実際にやってみたら・・・
試しに1つのリポジトリでやってみました。
しっかりCI/CDを整えていると、48行と地味に差分が多くなります。
さらに、現行で使っているバージョンのコミットハッシュが何なのかを調べる作業が地味にトイルでした。
これを、多数のリポジトリにやるのは面倒だ!と思いました。 そこで、誰かが作ってそうですがシュッと小物を作成しました。
$ brew install mashiike/tap/actionspin
homebrew tapもあるので、インストールも簡単です。
このツールでは、リポジトリルートで actionspin
と実行すると、 .github
配下のワークフローの uses
の中で、version tag
で参照しているものを見つけて、 commit hash
に変換してくれます。
$ actionspin {"time":"2025-03-18T14:42:20.911018+09:00","level":"INFO","msg":"replace uses","path":"workflows/test.yaml","owner":"actions","repo":"setup-go","ref":"v5","commitHash":"f111f3307d8850f501ac008e886eec1fd1932a34"} {"time":"2025-03-18T14:42:21.415795+09:00","level":"INFO","msg":"replace uses","path":"workflows/test.yaml","owner":"actions","repo":"checkout","ref":"v4","commitHash":"11bd71901bbe5b1630ceea73d27597364c9af683"} Replaced uses: - actions/setup-go@v5 -> f111f3307d8850f501ac008e886eec1fd1932a34 - actions/checkout@v4 -> 11bd71901bbe5b1630ceea73d27597364c9af683 Replaced files: - .github/workflows/test.yaml
実際に実行してみるとこんな感じですね。
--- a/.github/workflows/test.yaml 2025-03-18 11:41:16 +++ b/.github/workflows/test.yaml 2025-03-18 14:36:32 @@ -20,13 +20,13 @@ runs-on: ubuntu-latest steps: - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5 with: go-version: ${{ matrix.go }} id: go - name: Check out code into the Go module directory - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - name: Build & Test run: |
これで、一括で commit hash
に変換できました。
余談&まとめ
そこで、誰かが作ってそうですがシュッと小物を作成しました。
x.com(便利なやつなのでいくつあってもよさそうと思いつつ、類似ツールです)https://t.co/41icngULWl
— Yasuhisa Yoshida (@syou6162) 2025年3月18日
ツール作成の告知に、類似ツールがあるそうですというご報告をいただきました。
ちょっとした作業を自動化するときに、100行くらいかーとすぐに書いてしまうのが、エンジニアの性なのかもしれませんね。
このようなツールはいくつかがあるようなので、今回を期にGitHub Actionsの外部Actionはcommit hashでピン留めすることをご検討ください。