このページはパッケージ開発の基礎の姉妹ページです。GitHub Actionsの基本的な使用方法を前提としています。
GitHub Actionsのセキュリティリスク
タグベースの参照の危険性
通常、GitHub Actionsは以下のようにタグで参照されます。- タグは移動可能 — タグは削除・再作成されても同じ名前を持てます
- 改ざんリスク — リポジトリ所有者のアカウント乗っ取りで悪意あるコードを注入可能
- サプライチェーン攻撃 — 依存するアクションが攻撃されると、あなたのワークフローが侵害されます
公式Laravelプロジェクトでの対応
laravel/laravel と laravel/framework では、全てのアクションをコミットハッシュ(SHA)にピン留めしています。ピン留めの実装戦略
ステップ1:Dependabot設定ファイルの作成
パッケージのリポジトリに.github/dependabot.yml を作成します。Laravelのファイルをそのままコピーできます。
- 自動スキャン — GitHub Actionsの新しいバージョンをスキャン
- 自動PR作成 — 更新が利用可能な場合、アップデートPRを自動作成
- 更新方法の制御 — ピン留めされていないアクションはバージョンで、ピン留めされたアクションはSHAで更新
ステップ2:既存アクションをSHAにピン留める
既存のワークフロー内のすべてのアクション参照をSHAハッシュに変更します。これは pinact などのツールで自動化できます。pinactツールを使った自動化
手動による変更
pinact が利用できない場合は、GitHubの Lookup latest version ページから各アクションのコミットSHAを調べて手動で置き換えます。
ステップ3:Dependabotの設定を有効化
.github/dependabot.yml をリポジトリにコミットしてプッシュすると、Dependabotが自動的にスキャンを開始します。
Dependabotによる自動更新メカニズム
Dependabotはdependabot.yml の設定に基づいて、異なる更新戦略を適用します。
ピン留めされていないアクション
ピン留めされたアクション
ワークフローの実装例
複数のワークフローでアクションを使用する場合の完全な例です。Dependabotの更新PR対応
Dependabotが作成するアップデートPRは以下のように対応します。単一アクションの更新PR
- ワークフロー実行結果を確認
- 破壊的変更がないか確認
- マージして完了
セキュリティアップデートPR
複数アクションのグループ更新
dependabot.yml で groups を設定している場合、複数のアクションが一度のPRで更新されます。
ピン留めのメリットとデメリット
メリット
| メリット | 説明 |
|---|---|
| サプライチェーン攻撃対策 | 特定のコミットハッシュを参照するため、アクションの改ざんに対抗できる |
| 監査可能性 | 各アクションがいつどのバージョンから更新されたかを追跡できる |
| 明示的な更新 | Dependabotが更新を提案する形式なので、人間のレビューを必ず経由する |
| 再現性 | 同じコミットハッシュで実行すれば、完全に同じ環境が再現される |
デメリット
| デメリット | 対処方法 |
|---|---|
| 手作業の初期セットアップ | pinact ツールで自動化 |
| 更新管理の手間増加 | Dependabotで自動PR作成するため、実装コスト最小化 |
| 読みにくさ | コメントでバージョンを併記して可読性確保 |
セキュリティ監査チェックリスト
新しいパッケージプロジェクトを開始する場合のチェックリストです。初期セットアップ
初期セットアップ
-
.github/dependabot.ymlを作成 - 既存アクションすべてをSHAにピン留め
-
pinactまたは手動で確認完了 - ワークフローが正常に実行されることを確認
定期メンテナンス
定期メンテナンス
- Dependabotの更新PRを週1回以上レビュー
- セキュリティ更新は優先的にマージ
- 新しいアクション追加時は必ずSHAで参照
- 月に1回、全ワークフローの状態を確認
監査
監査
- すべてのアクション参照がSHAになっているか確認
- Dependabotが有効になっているか確認
- 過去6ヶ月のDependabotのPRが全てマージされているか確認
関連ページ
パッケージ開発の基礎
サービスプロバイダーを核としたLaravelパッケージの開発方法を解説します。
パッケージのバージョン互換性管理
Laravelのメジャーバージョンアップへのパッケージ対応戦略を解説します。