ソフトウェア部品表(SBOM)を生成するツール

no extension

Go コードのビルドとリリースを一度にやってくれる GoReleaser というツールがあるのだが,これの最近のバージョンはソフトウェア部品表(Software Bill of Materials; SBOM)も生成・リリースできるらしい。 というわけで,自作ツールでちょっと試してみた。

設定自体は難しくなく .goreleaser.yaml ファイルに以下の記述を追加すればいいだけのようだ。

sboms:
  - artifacts: archive

早速この記述を追加して手元で動かしてみたのだが…

 • cataloging artifacts
    • cataloging                      artifact=dist/ml_SNAPSHOT-a83f2d0b1db0ade89d839cd70b6870cd90011f55_Windows_ARM64.zip cmd=syft sboms=ml_SNAPSHOT-a83f2d0b1db0ade89d839cd70b6870cd90011f55_Windows_ARM64.zip.sbom
  ⨯ release failed after 1s   error=cataloging artifacts: syft failed: exec: "syft": executable file not found in $PATH: 

ふむむ? syft がないって言ってるのか? 調べてみたら syft というのはこれのことらしい。

GoReleaser は内部で syft を起動して SBOM を生成しているようだ。 SBOM を生成するための設定を .goreleaser.yaml ファイルに記述する際の詳細情報は以下のページが参考になる。

つか,最初からマニュアルを読めっての!>自分

GitHub Actions の goreleaser-action を使って SBOM を含むリリースを行う場合は,自前で syft をインストールする必要がある。 とはいえ goreleaser-action を使うなら Go のコンパイラは事前に導入されているはずなので,簡単に

name: build

on:
  push:
    tags:
      - v*

permissions:
  contents: write

jobs:
  goreleaser:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      -
        name: Set up Go
        uses: actions/setup-go@v3
        with:
          go-version-file: 'go.mod'
      -
        name: install syft
        run: go install github.com/anchore/syft/cmd/syft@latest
      -
        name: Run GoReleaser
        uses: goreleaser/goreleaser-action@v4
        with:
          # either 'goreleaser' (default) or 'goreleaser-pro'
          distribution: goreleaser
          version: latest
          args: release --clean
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution
          # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}

といった感じに go install コマンドでインストールしてしまっても問題なく行けるっぽい。 でも,これをすると SBOM に syft のバージョンが入らなくなるんだよなぁ。 sbom-action と組み合わせればいいのだろうか。 要検証だな。

syftGo 製だが Go エコシステム専用というわけではなく,以下のものに対応しているらしい。

  • Alpine (apk)
  • C (conan)
  • C++ (conan)
  • Dart (pubs)
  • Debian (dpkg)
  • Dotnet (deps.json)
  • Objective-C (cocoapods)
  • Elixir (mix)
  • Erlang (rebar3)
  • Go (go.mod, Go binaries)
  • Haskell (cabal, stack)
  • Java (jar, ear, war, par, sar, native-image)
  • JavaScript (npm, yarn)
  • Jenkins Plugins (jpi, hpi)
  • PHP (composer)
  • Python (wheel, egg, poetry, requirements.txt)
  • Red Hat (rpm)
  • Ruby (gem)
  • Rust (cargo.lock)
  • Swift (cocoapods)

んー。 メジャーどころは網羅してる感じ?

他にも grype と組み合わせることで脆弱性のチェックとかもできるし,その結果を証明書として作成して発行することもできるそうな。 私が公開しているような小物パッケージではそこまで不要だろうが,企業とかが運用している,それなりに規模の大きなプロジェクトでは重宝するかもしれない。

覚えておこう。

ブックマーク

参考図書

photo
セキュリティはなぜやぶられたのか
ブルース・シュナイアー (著), 井口 耕二 (翻訳)
日経BP 2007-02-15
単行本
4822283100 (ASIN), 9784822283100 (EAN), 4822283100 (ISBN)
評価     

原書のタイトルが “Beyond Fear: Thinking Sensibly About Security in an Uncertain World” なのに対して日本語タイトルがどうしようもなくヘボいが中身は名著。とりあえず読んどきなはれ。ゼロ年代当時 9.11 およびその後の米国のセキュリティ政策と深く関連している内容なので,そのへんを加味して読むとよい。

reviewed by Spiegel on 2019-02-11 (powered by PA-APIv5)

photo
プログラミング言語Go
アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)
丸善出版 2016-06-20 (Release 2021-07-13)
Kindle版
B099928SJD (ASIN)
評価     

Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想はこちら

reviewed by Spiegel on 2021-05-22 (powered by PA-APIv5)

photo
デベロッパーゴースーパーゴラン Tシャツ
Geek Go Super Golang Tees
ウェア&シューズ
B09C2XBC2F (ASIN)
評価     

ついカッとなってポチった。反省はしない

reviewed by Spiegel on 2022-04-10 (powered by PA-APIv5)