火曜日, 8月 19, 2025
火曜日, 8月 19, 2025
- Advertisment -
ホームニューステックニュースGitHub Actions の Enforce SHA Pinning の検証

GitHub Actions の Enforce SHA Pinning の検証


2025 年 8 月 15 日に GitHub Actions に Enforce SHA Pinning という機能が追加されたので検証してみました。

https://github.blog/changelog/2025-08-15-github-actions-policy-now-supports-blocking-and-sha-pinning-actions/#enforce-sha-pinning

Enforce SHA Pinning とは

Enforce SHA Pinning は、GitHub Actions で使用する action を完全な commit SHA で指定することを強制する機能です。
これにより、タグやブランチに悪意のあるコードが追加されても、それが自動的に使用されることを防ぐことができます。

従来、action のバージョン指定には以下のような方法がありました:


- uses: actions/checkout@v4


- uses: actions/[email protected]


- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683

Enforce SHA Pinning を有効にすると、commit SHA 以外の指定方法を使っている workflow は実行時に失敗するようになります。

設定方法

Enforce SHA Pinning は Organization レベルまたは Repository レベルで有効化できます。

Repository レベルでの設定は、Settings → Actions → General から行えます:

なお、Organization レベルで有効化した場合、Repository レベルで無効化することはできません。

実際に試してみた

検証用のリポジトリを作成して動作を確認しました。

https://github.com/szksh-lab-2/test-enforce-sha

重要な発見:実行時チェック

当初、Pull Request の作成やマージが制限されるのかと思いましたが、そうではありませんでした。
Enforce SHA Pinning は workflow の実行時にチェックされる ため、以下のような特徴があります:

  1. SHA pinning していないコードを含む Pull Request でも作成・マージは可能
  2. workflow が実行される際に Set up job の段階で失敗する
  3. 該当のコードが実行されなければ問題は検出されない

実際のエラーメッセージ:

Error: The action actions/[email protected] is not allowed in szksh-lab-2/test-enforce-sha because all actions must be pinned to a full-length commit SHA.

依存 action も対象

さらに興味深い点として、直接使用している action だけでなく、その action が内部で使用している action もチェック対象となります。

例えば、以下のような構造の場合:


- uses: szksh-lab-2/test-action-2@9e2a72fb2ec7ffe46e18ab4782a7742955839c85


- uses: actions/setup-node@v4  

この場合、actions/setup-node@v4 が SHA pinning されていないため、workflow の実行は失敗します。

メリットとデメリット

メリット

  • セキュリティの大幅な向上: 依存 action まで遡ってチェックするため、サプライチェーン攻撃のリスクを大幅に軽減
  • GitHub 公式機能: 外部ツール不要で利用可能
  • シンプルな設定: チェックボックスを有効にするだけ

デメリット

  • 実行時エラー: 事前に問題を検出できないため、PR マージ後に初めて問題が発覚する可能性
  • 依存 action の影響: 自分が適切に SHA pinning していても、依存先が対応していないと動作しない
  • 移行の困難さ: 多くの既存 action が SHA pinning に対応していないため、導入のハードルが高い
  • 除外設定の不在: 特定の action を除外する機能がないため、全か無かの選択になる

既存ツールとの比較

pinact のような静的解析ツールとの違い:

観点 Enforce SHA Pinning pinact 等の静的解析ツール
チェックタイミング 実行時 PR 作成時・事前
依存 action のチェック 可能 不可能
問題の早期発見 ×
除外設定 ×
導入の容易さ ○(設定のみ) △(CI への組み込み必要)

まとめ

GitHub Actions の Enforce SHA Pinning は、セキュリティを重視する組織にとって強力な機能です。
しかし、以下の点に注意が必要です:

  1. 段階的な導入を推奨: いきなり Organization 全体で有効化すると、多くの workflow が動かなくなる可能性が高い
  2. 事前の影響調査: 使用している action とその依存関係を確認し、SHA pinning 対応状況を把握
  3. 静的解析ツールとの併用: 実行前に問題を検出するため、pinact などのツールと組み合わせる

セキュリティと運用のバランスを考慮しながら、組織に合った導入方法を検討することが重要です。
特に新規プロジェクトや、セキュリティ要件が厳しいリポジトリから導入を始めることをお勧めします。

参考リンク

人力による補足

先日 scrap にメモをさっとメモを書いたものの、それなりに有用な内容なのでブログにも書いとこうかな、けどメモと同じ内容を態々ブログに書くの面倒だなと思い、 AI の勉強がてら AI に書かせてみることにしました。

Claude Code を使いました。
まず以下のプロンプトで自分の文体を学ばせて STYLE_GUIDE.md を作成させました。

articles 配下の記事を読んで文体の特徴などを学び STYLE_GUIDE.md を作成してください。

AI が生成した STYLE_GUIDE.md:

https://zenn.dev/shunsuke_suzuki/scraps/9f730d6f8a2049

次に scrap と STYLE_GUIDE.md を参考にブログを書かせました。
scrap の URL 渡すだけでも良かったかもしれませんが、マークダウンのほうが原文コピペしたり画像へのリンクそのまま使ったりしやすいんじゃないかなと思って scrap に書いた内容をてきとうなファイル pinning.md にコピペしました。

最近リリースされた GitHub Actions の Enforce SHA Pinning について調べました。
調べた内容は https://zenn.dev/shunsuke_suzuki/scraps/17ed43e51702eb にまとめていて、その内容を @pinning.md に記載しました。
この内容を元に @articles/github-actions-enforce-sha-pinning.md にブログ記事を書いてください。

そうするとざっと記事を書いてくれました。

ざっと読んだ感じまぁ読めます。
今回は敢えて修正とかはしていません。
ちょっと面白いのは、 scrap には書いてない内容も書かれていることです。

まぁ AI に書かせた記事を自分が書いたものとして公開するのは現状抵抗があるので、今後どうするかは分かりませんが、良い経験にはなりました。

記事の訂正

AI に書かせた上記の内容には敢えて修正を加えていませんが、こちらのほうで気になった点を訂正 (補足) します。

移行の困難さ: 多くの既存 action が SHA pinning に対応していないため、導入のハードルが高い

多くの action が対応してないとまで言っていいのかは正直良く分かりませんが、対応してない action は少なくないでしょう。
Enforce SHA Pinning が普及することでこれまで pinning されてなかったサードパーティの action でも pinning されるようになると嬉しいですね。

pinact 等の静的解析ツール
依存 action のチェック: 不可能

執筆時点では ghalint や pinact のようなツールは対応してませんが、技術的には可能です。
気が向いたら対応したいなとは思いますが、他にもやることがたくさんあるのでやれるかは分かりません。

段階的な導入を推奨: いきなり Organization 全体で有効化すると、多くの workflow が動かなくなる可能性が高い

もちろん Organization によります。
例えば個人で管理している小規模な Organization であれば問題ないかもしれません。
一方、会社で管理している大規模な Organization で元々利用可能な action を特に管理していないような場合だと大変かもしれません。

補足

https://x.com/szkdash/status/1956542160859484461

会社の action だけ除外したいみたいな場合は有効にできないので、その場合は LayerX さんのように pinact run --check を Required Workflow で実行するみたいな手法が有効でしょう。

https://tech.layerx.co.jp/entry/github-supplychain-risk-and-sponsorship



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -