artifact-sbom-publisher について
ソフトウェアサプライチェーンのメタデータを付けて成果物を公開する、ビルドおよびリリースワークフロー向けのスキルです。SBOM 生成、脆弱性スキャン、来歴情報、メタデータ、アテステーションを扱います。
主な機能
- 01ビルド成果物の公開
- 02SPDX と CycloneDX の SBOM 生成
- 03SBOM の脆弱性スキャン
- 04SLSA 来歴情報の生成
- 05成果物メタデータとアテステーション
活用シーン
- 01ソフトウェアリリースへの SBOM 添付
- 02リリース前の SBOM スキャン
- 03ビルド来歴と成果物メタデータの記録
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ patricio0312rev/ skills --skill artifact-sbom-publisherインストール後、Claude Code で/artifact-sbom-publisherを入力して読み込まれたか確認します。
詳細
Artifact & SBOM パブリッシャー
サプライチェーンのセキュリティメタデータを含むアーティファクトを生成し、公開します。
ビルドアーティファクト
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- run: npm ci
- run: npm run build
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: dist-${{ github.sha }}
path: |
dist/
!dist/**/*.map
retention-days: 30
if-no-files-found: error
SBOM の生成(CycloneDX)
sbom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Generate SBOM
uses: CycloneDX/gh-node-module-generatebom@master
with:
path: ./
output: ./sbom.json
- name: Upload SBOM
uses: actions/upload-artifact@v4
with:
name: sbom-${{ github.sha }}
path: sbom.json
Syft を使用した SBOM
- name: Generate SBOM with Syft
run: |
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
syft . -o spdx-json > sbom-spdx.json
syft . -o cyclonedx-json > sbom-cyclonedx.json
- name: Upload SBOMs
uses: actions/upload-artifact@v4
with:
name: sboms
path: |
sbom-spdx.json
sbom-cyclonedx.json
Docker イメージの SBOM
- name: Build image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: myapp:${{ github.sha }}
sbom: true
provenance: true
- name: Generate SBOM for image
run: |
syft myapp:${{ github.sha }} -o spdx-json > image-sbom.json
- name: Scan SBOM for vulnerabilities
uses: anchore/scan-action@v3
with:
sbom: image-sbom.json
fail-build: true
severity-cutoff: high
ビルドの来歴(SLSA)
provenance:
runs-on: ubuntu-latest
permissions:
actions: read
id-token: write
contents: write
steps:
- uses: actions/checkout@v4
- name: Build
run: npm run build
- name: Generate provenance
uses: actions/attest-build-provenance@v1
with:
subject-path: "dist/**"
アーティファクトのメタデータ
- name: Create artifact metadata
run: |
cat > artifact-metadata.json << EOF
{
"version": "${{ github.ref_name }}",
"commit": "${{ github.sha }}",
"branch": "${{ github.ref }}",
"build_time": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"builder": "GitHub Actions",
"workflow": "${{ github.workflow }}",
"run_id": "${{ github.run_id }}",
"actor": "${{ github.actor }}"
}
EOF
- name: Upload metadata
uses: actions/upload-artifact@v4
with:
name: metadata
path: artifact-metadata.json
パッケージ化とリリース
release:
runs-on: ubuntu-latest
needs: [build, sbom]
if: github.event_name == 'release'
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: artifacts/
- name: Create release package
run: |
cd artifacts
tar -czf ../release.tar.gz dist-* sbom-* metadata/
- name: Upload to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ./release.tar.gz
asset_name: release-${{ github.ref_name }}.tar.gz
asset_content_type: application/gzip
脆弱性スキャン
- name: Scan SBOM for vulnerabilities
uses: aquasecurity/trivy-action@master
with:
scan-type: "sbom"
format: "sarif"
output: "trivy-results.sarif"
sbom-sources: "sbom.json"
- name: Upload scan results
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: "trivy-results.sarif"
アーティファクトの証明
- name: Attest artifact
uses: actions/attest@v1
with:
subject-path: "dist/myapp.tar.gz"
predicate-type: "https://slsa.dev/provenance/v1"
predicate: |
{
"buildType": "https://github.com/actions/workflow",
"builder": {
"id": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
},
"metadata": {
"buildInvocationId": "${{ github.run_id }}",
"completeness": {
"parameters": true,
"environment": false,
"materials": true
}
}
}
ベストプラクティス
- SBOM を生成する:すべてのリリースで実施します
- 複数の形式を使用する:SPDX と CycloneDX
- 脆弱性をスキャンする:リリース前に実施します
- アーティファクトに署名する:検証できるようにします
- 来歴を含める:SLSA 証明
- 保持ポリシーを設定する:アーティファクトを 30 日間保持します
- メタデータを含める:バージョン、コミット、タイムスタンプ
- 自動化する:すべてのビルドに組み込みます
出力チェックリスト
- ビルドアーティファクトをアップロード済み
- SBOM を生成済み(SPDX または CycloneDX)
- 脆弱性スキャンを設定済み
- ビルドの来歴を生成済み
- アーティファクトのメタデータを含め済み
- リリースのパッケージ化を自動化済み
- 証明/署名(任意)
- 保持ポリシーを設定済み
コメント
Markdown 対応