> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# イメージ署名とアテステーションの検証

> サプライチェーンの完全性を確認するため、ABBYY Vantage セルフホスト型のコンテナーイメージに対する Cosign 署名、SPDX SBOM、脆弱性スキャンのアテステーションを検証します。

このドキュメントでは、vantage-packager のイメージ公開パイプラインで作成された暗号署名とアテステーションを検証する方法を説明します。

<div id="overview">
  ## 概要
</div>

vantage-packager パイプラインは、公開済みの各イメージに対して複数のセキュリティアーティファクトを作成します。

* **コンテナーイメージ署名**: Cosign を使用した暗号学的署名
* **SPDX SBOMアテステーション**: SPDX 2.3 形式のソフトウェア部品表
* **脆弱性スキャンアテステーション**: SARIF 形式のセキュリティスキャン結果
  すべてのアーティファクトは同じ秘密鍵で署名されており、対応する公開鍵を使用して検証できます。

<div id="prerequisites">
  ## 前提条件
</div>

以下のツールがインストールされている必要があります。

* `cosign` - 署名およびアテステーションの検証用
* `jq` - JSON のパースと解析用
* `curl` - アーティファクトのダウンロード用 (任意)

<div id="signature-verification">
  ## 署名の検証
</div>

<div id="basic-verification">
  ### 基本的な検証
</div>

公開鍵を使用して、イメージ署名を検証します：

```bash theme={null}
# 署名を検証する（プライベートレジストリの透明性ログをスキップ）
cosign verify --key cosign.key.pub --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

<div id="with-tls-verification-disabled">
  ### TLS検証を無効にする場合
</div>

自己署名証明書を使用しているレジストリの場合:

```bash theme={null}
cosign verify --key cosign.key.pub --insecure-ignore-tlog --allow-insecure-registry \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

想定される出力結果:

```json theme={null}
[{
  "critical": {
    "identity": {
      "docker-reference": "abyvtgonprm27.azurecr.io/vantage-installer"
    },
    "image": {
      "docker-manifest-digest": "sha256:a4190ad9d5289d7ad2d02d05749c10713a7aac217e8010b5e4ef15161b181c94"
    },
    "type": "cosign container image signature"
  }
}]
```

<div id="attestation-verification">
  ## アテステーションの検証
</div>

<div id="spdx-sbom-attestation">
  ### SPDX SBOM アテステーション
</div>

SPDX Software Bill of Materials のアテステーションを検証します:

```bash theme={null}
# SPDX アテステーションを検証する
cosign verify-attestation --key cosign.key.pub --type spdx --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

<div id="vulnerability-scan-attestation">
  ### 脆弱性スキャンアテステーション
</div>

脆弱性スキャンのアテステーションを検証します。

```bash theme={null}
# 脆弱性スキャンのアテステーションを検証する
cosign verify-attestation --key cosign.key.pub --type vuln --insecure-ignore-tlog \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

<div id="retrieving-attestation-data">
  ## アテステーションデータの取得
</div>

<div id="download-spdx-sbom">
  ### SPDX SBOM をダウンロード
</div>

アテステーションから SPDX SBOM を取得します:

```bash theme={null}
# SPDX SBOMをダウンロードして抽出する
cosign download attestation --predicate-type spdx \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1 | \
  jq -r '.payload' | base64 -d | jq -r '.predicate' > sbom.json
```

<div id="download-vulnerability-scan">
  ### 脆弱性スキャンをダウンロード
</div>

脆弱性スキャンの結果を取得します：

```bash theme={null}
# 脆弱性スキャン結果のダウンロードと抽出
cosign download attestation --predicate-type vuln \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1 | \
  jq -r '.payload' | base64 -d | jq -r '.predicate' > vuln-scan.sarif
```

<div id="analyzing-spdx-sbom-data">
  ## SPDX SBOM データの分析
</div>

<div id="basic-sbom-information">
  ### SBOMの基本情報
</div>

```bash theme={null}
# SBOMメタデータを表示
jq '{
  name: .name,
  spdxVersion: .spdxVersion,
  creationInfo: .creationInfo,
  packageCount: (.packages | length)
}' sbom.json
```

<div id="list-all-packages">
  ### すべてのパッケージを一覧表示
</div>

```bash theme={null}
# バージョンを含む全パッケージを一覧表示する
jq -r '.packages[] | "\(.name) \(.versionInfo // "unknown")"' sbom.json | sort
```

<div id="find-packages-with-known-vulnerabilities">
  ### 既知の脆弱性があるパッケージを特定する
</div>

```bash theme={null}
# CPE識別子（脆弱性参照）を持つパッケージを一覧表示する
jq -r '.packages[] | select(.externalRefs[]?.referenceType == "cpe23Type") |
  "\(.name) \(.versionInfo // "unknown") - \(.externalRefs[0].referenceLocator)"' sbom.json
```

<div id="license-information">
  ### License 情報
</div>

```bash theme={null}
# 宣言済みライセンスを持つパッケージを表示する
jq -r '.packages[] | select(.licenseDeclared != "NOASSERTION") |
  "\(.name): \(.licenseDeclared)"' sbom.json
```

<div id="analyzing-vulnerability-scan-data">
  ## 脆弱性スキャンデータの分析
</div>

<div id="basic-scan-information">
  ### スキャンの基本情報
</div>

```bash theme={null}
# スキャンメタデータを表示する
jq '{
  version: .version,
  tool: .runs[0].tool.driver.name,
  toolVersion: .runs[0].tool.driver.version,
  resultCount: (.runs[0].results | length)
}' vuln-scan.sarif
```

<div id="list-vulnerabilities">
  ### 脆弱性の一覧
</div>

```bash theme={null}
# 検出されたすべての脆弱性を一覧表示する
jq -r '.runs[0].results[] |
  "\(.ruleId) - \(.level // "unknown") - \(.message.text)"' vuln-scan.sarif
```

<div id="high-severity-vulnerabilities">
  ### 深刻度の高い脆弱性
</div>

```bash theme={null}
# 深刻度が高い脆弱性のみを表示する
jq -r '.runs[0].results[] | select(.level == "error") |
  "\(.ruleId): \(.message.text)"' vuln-scan.sarif
```

<div id="sbom-visualization-tools">
  ## SBOM可視化ツール
</div>

<div id="cli-tools">
  ### CLI ツール
</div>

<div id="cyclonedx-sbom-utility">
  #### CycloneDX SBOM Utility
</div>

高度な解析を行うには、CycloneDX SBOMユーティリティをインストールして使用します。

```bash theme={null}
# sbom-utilityをインストールする（利用可能な場合）
go install github.com/CycloneDX/sbom-utility@latest

# SPDX SBOMを検証する
sbom-utility validate --input-file sbom.json

# コンポーネントレポートを生成する
sbom-utility query --input-file sbom.json --select "name,version" --from "packages"
```

<div id="custom-analysis-with-jq">
  #### jq を使ったカスタム解析
</div>

```bash theme={null}
# 依存関係ツリービューを作成する
jq -r '.packages[] |
  select(.name != null) |
  "\(.name)@\(.versionInfo // "unknown") (\(.supplier // "unknown"))"' sbom.json |
  sort | uniq
```

<div id="web-based-visualization">
  ### Web上での可視化
</div>

<div id="sbomsh-online-viewer">
  #### SBOM.sh オンラインビューアー
</div>

1. [https://sbom.sh/](https://sbom.sh/) にアクセスします
2. `sbom.json` ファイルをアップロードします
3. コンポーネントと依存関係をインタラクティブに可視化して確認します

<div id="artifact-reference-discovery">
  ## アーティファクト参照の検出
</div>

<div id="find-signature-artifacts">
  ### 署名アーティファクトを探す
</div>

```bash theme={null}
# 署名アーティファクトの参照を検索
cosign triangulate --type signature \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```

<div id="find-attestation-artifacts">
  ### アテステーション アーティファクトを検索する
</div>

```bash theme={null}
# アテステーションアーティファクト参照を検索
cosign triangulate --type attestation \
  abyvtgonprm27.azurecr.io/vantage-installer:2.7.1
```
