【入門編】GitHub ActionsとSBOM(ソフトウェア部品表)の自動生成:セキュリティ脆弱性管理のパイプライン化 – バージョン管理・CI/CD活用バイブル

こんにちは!日々の開発、本当にお疲れ様です。
「機能は無事に動いたのに、なんだか最近セキュリティのチェック項目が多すぎてげっそりする……」なんて感じることはありませんか?

近年のソフトウェア開発において、私たちが書くコードの何倍、何十倍もの量の「他所で作られたオープンソースのライブラリ(依存関係)」を使うのは当たり前になりました。とても便利ですが、そこに潜む脆弱性を狙った「サプライチェーン攻撃」は、今や個人開発から巨大企業まで容赦なく襲う現実の脅威です。

「でも、どうやって自分のプロジェクトの安全性を保てばいいの?」
「セキュリティツールって導入が難しそう……」

そんな不安を抱えているあなたに朗報です。今回は、世界中の開発者が使っている GitHub Actions と、いま業界で最も熱いキーワードである SBOM(Software Bill of Materials:ソフトウェア部品表) を組み合わせて、「安全なパイプラインを完全に自動化する方法」 を優しく、かつ本質的なところまで徹底的に解説します。

これをマスターすれば、あなたはもうセキュリティのことで夜も眠れなくなることはありません。一緒にモダンな自動化の扉を開きましょう!

—

1. そもそも「SBOM」ってなに? なぜCI/CDに組み込むの?

難しい専門用語を並べるのはやめましょう。
SBOMとは、一言で言うと「あなたのアプリを構成する部品の『成分表示ラベル』」です。

お菓子の裏側を見ると、「小麦粉、砂糖、食塩……」と原材料がすべて書かれていますよね。あれと同じです。アプリケーションがどんなライブラリ(npmパッケージやPythonのpipパッケージなど)を、どのバージョン使っているのかをリスト化したものがSBOMです。

なぜCI/CD(GitHub Actions)で自動生成するべきなのか?

手動で「今使っているライブラリは何だっけ?」と調べるのは不可能ですし、人間は必ずミスをします。
だからこそ、「コードがプッシュされ、ビルドやテストが走るその裏側で、自動的に最新の成分表示(SBOM)を作り、GitHubに報告する」という仕組みをCI/CDに組み込む必要があります。

これを行っておくと、GitHubが勝手に「おっ、君が使っているその部品、実は最近見つかった重大な脆弱性(CVE)が含まれてるよ!」と教えてくれるようになります。これがGitHubのDependency Graph(依存関係グラフ)との連携の魔法です。

—

2. 基礎セットアップ:GitHub Actionsの第一歩

それでは実際に、Node.js(npm)のプロジェクトを例にして、SBOMを自動生成するパイプラインを作ってみましょう。

「GitHub Actionsなんて触ったことないよ」という方でも大丈夫。プロジェクトのルートディレクトリに `.github/workflows/` というフォルダを作り、その中に YAML ファイルを1つ置くだけで準備完了です。

チュートリアル:Hello World 的なワークフローを作ろう

まずは、コードがプッシュされたときに「動くこと」を確認する基本のファイルを作ります。

`.github/workflows/sbom.yml` というファイルを作成し、以下のコードを貼り付けてみてください。

ワークフローの名前
name: Generate SBOM

どんなタイミングでこの処理を走らせるか(トリガー)
on:
push:
branches: [ “main” ] # mainブランチにコードがプッシュされた時
pull_request:
branches: [ “main” ] # mainブランチ宛てのプルリクエスト作成時

jobs:
build-sbom:
name: Build and Export SBOM
# 実行環境の指定(最新のUbuntu環境を使います)
runs-on: ubuntu-latest

# GitHub SecurityにSBOMを送信するために必要な権限設定
permissions:
contents: read
actions: read
security-events: write # セキュリティイベントの書き込み権限

steps:
# 1. リポジトリのコードをチェックアウト(取得)する

  • name: Checkout Repository

uses: actions/checkout@v4

# 2. Node.jsの環境をセットアップする

  • name: Set up Node.js

uses: actions/setup-node@v4
with:
node-version: ’20’
cache: ‘npm’

# 3. 依存関係をインストールする(lockfileを生成・確認するため)

  • name: Install dependencies

run: npm ci

# 4. 【ここが本命!】SBOMを自動生成する公式アクション

  • name: Generate SBOM with GitHub Action

uses: anchore/sbom-action@v0
with:
# フォーマットは業界標準のSPDXを指定
format: spdx-json
output-file: ‘sbom.spdx.json’

# 5. 生成したSBOMファイルをGitHubにアーティファクト(成果物)として保存する

  • name: Upload SBOM Artifact

uses: actions/upload-artifact@v4
with:
name: sbom-artifact
path: sbom.spdx.json

たったこれだけです!このファイルを保存してGitHubにプッシュしてみてください。「Actions」タブを開くと、緑色のチェックマークと共に、あなたのプロジェクトの成分表示ラベル(SBOM)が自動で生成されているのが確認できます。

—

3. 【さらに一歩先へ】GitHub Dependency Graph との完全連携

先ほどのコードでも十分に素晴らしいのですが、プロの現場ではもう一工夫加えます。生成したSBOMをGitHubの「Dependency Graph(依存関係グラフ)」に直接インポートし、GitHubの脆弱性スキャン機能と完全に連動させましょう。

先ほどのワークフローの最後に、以下のステップを追加します。

# 6. 生成したSBOMをGitHubのDependency Submission APIに送信する

  • name: Submit SBOM to GitHub Dependency Graph

uses: drevOps/github-dependency-submission-action@v2 # またはGitHub公式のアクション等
# ※GitHub公式のaction-gh-dependency-submissionなどを使うこともできます

実は、`anchore/sbom-action` の中には、自動的にGitHubのDependency Graphへ結果を送信してくれるオプションを持つものもあります。

  • name: Generate and Submit SBOM

uses: anchore/sbom-action@v0
with:
format: spdx-json
# GitHubのAPIと連携して自動登録するフラグ
upload-catalog: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

この設定を入れておくと、GitHubのリポジトリ画面にある [Insights] -> [Dependency graph] を開いたとき、あなたが使っているすべてのライブラリが綺麗に可視化されます。万が一、その中に脆弱性を持つ古いライブラリがあれば、GitHubが自動で「Security」タブに警告(Alert)を出してくれます。

—

4. 現場で役立つハックと心構え

最後に、このパイプラインを運用する上で知っておくと得する「現場の知見」をいくつかシェアします。

1. `npm ci` を必ず使う理由
`npm install` ではなく `npm ci` を使っていることに気づきましたか? `ci` は `package-lock.json` を厳密に守ってインストールするため、開発者のローカル環境とCI環境で「違うバージョンの部品が混ざる」という事故を防げます。SBOMの精度を上げるための必須テクニックです。
2. 依存関係のアップデートを恐れない
SBOMと脆弱性スキャンを導入すると、今まで見えていなかった「警告」がたくさん見つかって最初は驚くかもしれません。「うわ、こんなに赤字が出てる!」と絶望しないでください。それはセキュリティが「見える化」されたという素晴らしい第一歩です。少しずつライブラリをアップデートしていきましょう。

まとめ

いかがでしたか?
今回は、GitHub Actionsを使ったSBOMの自動生成と、セキュリティパイプラインの構築について解説しました。

  • SBOMとは:アプリの「成分表示ラベル」。
  • GitHub Actionsでの自動化:コードをプッシュするだけで、自動で部品表が作られる。
  • メリット:サプライチェーン攻撃や脆弱性を早期に発見し、安心して開発に集中できる。

これをマスターすれば、あなたの開発ライフは劇的に安心でスマートなものになります。「セキュリティの守り」を自動化して、私たちは「最高の機能を作る楽しさ」に集中しましょう!

それでは、次のパイプラインの旅でお会いしましょう。Happy Coding!

タイトルとURLをコピーしました