
Trivyスキャン用のGitLab CIコンポーネント
Trivy(オールインワンのセキュリティスキャナー:コンテナイメージ、ファイルシステム、リポジトリ、Kubernetesクラスター、SBOM、ライセンスコンプライアンスをカバー)のためのGitLab CIコンポーネントです。これらのテンプレートをパイプラインに直接組み込むことで、繰り返し可能なスキャン、GitLabネイティブのレポート、スクリプトをほとんど書かずにポータブルなアーティファクトを取得できます。
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/main@latest
stages:
- test
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/main@latest
inputs:
job_name: "security:remote"
TRIVY_SCAN_REMOTE_IMAGE: "registry.gitlab.com/group/app:latest"
severity: "CRITICAL,HIGH,MEDIUM"
exit_on_vulnerability: true
stages:
- test
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/main@latest
inputs:
job_name: "security:local"
TRIVY_SCAN_LOCAL_IMAGES: "dist/"
TRIVY_SCANNERS: "vuln,secret"
exit_on_vulnerability: false
stages:
- test
以下の各テンプレートは、コンポーネント仕様で定義された利用可能な入力とデフォルト値、および最小限の動作例を示しています。
templates/main.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/main@latest
inputs:
job_name: "trivy:basic"
TRIVY_SCAN_REMOTE_IMAGE: "nginx:latest"
templates/target_container.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_container@latest
inputs:
job_name: "trivy:containers"
TRIVY_SCAN_REMOTE_IMAGE: "registry.gitlab.com/group/service:latest"
TRIVY_SCANNERS: "vuln,secret"
exit_on_vulnerability: true
templates/target_filesystem.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_filesystem@latest
inputs:
TRIVY_FS_PATH: "services/api"
TRIVY_SCANNERS: "vuln,misconfig,secret"
templates/target_rootfs.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_rootfs@latest
inputs:
TRIVY_ROOTFS_PATH: "/mnt/root"
TRIVY_SCANNERS: "vuln"
templates/target_repository.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_repository@latest
inputs:
TRIVY_REPO_TARGET: "https://github.com/aquasecurity/trivy"
TRIVY_REPO_BRANCH: "main"
templates/target_vm.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_vm@latest
inputs:
TRIVY_VM_TARGET: "ami-0123456789abcdef0"
TRIVY_AWS_REGION: "us-east-1"
templates/target_kubernetes.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_kubernetes@latest
inputs:
TRIVY_K8S_OBJECT: "namespace/prod"
TRIVY_K8S_REPORT: "summary"
templates/scanner_iac_config.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/scanner_iac_config@latest
inputs:
TRIVY_CONFIG_PATH: "examples/iac/terraform"
severity: "CRITICAL,HIGH,MEDIUM"
templates/scanner_license.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/scanner_license@latest
inputs:
TRIVY_SCAN_LOCAL_IMAGES: "test.tar"
TRIVY_LICENSE_FULL: true
templates/sbom_generate_image.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_generate_image@latest
inputs:
TRIVY_SBOM_INPUT: "test.tar"
TRIVY_SBOM_FILENAME: "ci-image-sbom.cdx.json"
templates/sbom_generate_repo.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_generate_repo@latest
inputs:
TRIVY_REPO_TARGET: "."
TRIVY_SBOM_FORMAT: "spdx-json"
templates/sbom_generate_kbom.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_generate_kbom@latest
inputs:
TRIVY_K8S_TARGET: "namespace/default"
scan_kbom: true
templates/sbom_scan_file.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_scan_file@latest
inputs:
TRIVY_SBOM_PATH: "artifacts/trivy/ci-image-sbom.cdx.json"
TRIVY_SCANNERS: "vuln,license"
templates/sbom_scan_rekor.yml例
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_scan_rekor@latest
inputs:
TRIVY_SCAN_REMOTE_IMAGE: "registry.gitlab.com/group/app@sha256:..."
TRIVY_REKOR_URL: "https://rekor.sigstore.dev"
| 入力 | 説明 | デフォルト |
|---|
job_name | CIジョブの名前 | "trivy scanning" |
stage | パイプラインステージ | "test" |
image | Trivyを実行するコンテナイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_NEEDED_STAGE | Trivyが実行される前に完了している必要があるステージ | "build" |
TRIVY_SCAN_REMOTE_IMAGE | スキャンするリモートイメージ | "" |
TRIVY_SCAN_LOCAL_IMAGES | tar/OCI入力へのパス(空の場合は.を検索) | "" |
TRIVY_SCANNERS | カンマ区切りのスキャナー | "vuln,secret,misconfig" |
severity | 含める重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 問題が見つかった場合ジョブを失敗させる | true |
TRIVY_EXTRA_ARGS | 追加のCLIフラグ | "" |
allow_failure | パイプラインを失敗させずにジョブの失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | CIジョブ名 | "trivy:scan:containers" |
stage | パイプラインステージ | "test" |
image | Trivyコンテナイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | リモートイメージ参照 | "" |
TRIVY_SCAN_LOCAL_IMAGES | ローカルスキャン用のディレクトリ/tar | "" |
TRIVY_SCANNERS | 有効なスキャナー | "vuln,secret,misconfig" |
TRIVY_IMAGE_SRC | イメージソースバックエンド(remote/docker/...) | "" |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 重大度一致で失敗 | true |
TRIVY_IGNORE_UNFIXED | 修正のない問題を無視 | true |
TRIVY_PKG_TYPES | パッケージタイプ | "os,library" |
TRIVY_VULN_TYPE | 非推奨: pkg typesのエイリアス | "" |
TRIVY_TIMEOUT | コマンドタイムアウト | "10m" |
TRIVY_EXTRA_ARGS | 追加CLI引数 | "" |
TRIVY_DB_REPOSITORY | カスタムDBミラー | "" |
TRIVY_JAVA_DB_REPOSITORY | カスタムJava DBミラー | "" |
TRIVY_SKIP_FILES | ファイルグロブ除外 | "" |
TRIVY_SKIP_DIRS | ディレクトリ除外 | "" |
allow_failure | パイプライン失敗を伴わずに失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | CIジョブ名 | "trivy:scan:filesystem" |
stage | パイプラインステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_FS_PATH | スキャンするファイルまたはディレクトリ | "." |
TRIVY_SCANNERS | 有効なスキャナー | "vuln,secret" |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 重大度一致で失敗 | true |
TRIVY_IGNORE_UNFIXED | 修正のない問題を無視 | true |
TRIVY_PKG_TYPES | パッケージタイプ | "os,library" |
TRIVY_TIMEOUT | タイムアウト | "10m" |
TRIVY_SKIP_FILES | スキップするファイルグロブ | "" |
TRIVY_SKIP_DIRS | スキップするディレクトリ | "" |
TRIVY_EXTRA_ARGS | 追加CLI引数 | "" |
TRIVY_REPORT_BASENAME | アーティファクトのベース名 | "filesystem-scan" |
allow_failure | ジョブの失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:scan:rootfs" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_ROOTFS_PATH | ルートファイルシステムパス | "/" |
TRIVY_SCANNERS | スキャナー | "vuln,secret" |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 検出時にジョブを失敗 | true |
TRIVY_IGNORE_UNFIXED | 未修正を無視 | true |
TRIVY_PKG_TYPES | パッケージタイプ | "os,library" |
TRIVY_TIMEOUT | タイムアウト | "10m" |
TRIVY_SKIP_FILES | スキップするファイル | "" |
TRIVY_SKIP_DIRS | スキップするディレクトリ | "" |
TRIVY_EXTRA_ARGS | 追加引数 | "" |
TRIVY_REPORT_BASENAME | アーティファクトベース名 | "rootfs-scan" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:scan:repo" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_REPO_TARGET | ローカルパスまたはGit URL | "." |
TRIVY_REPO_BRANCH | リモートブランチ | "" |
TRIVY_REPO_COMMIT | コミットハッシュ | "" |
TRIVY_REPO_TAG | タグ名 | "" |
TRIVY_SCANNERS | スキャナー | "vuln,secret" |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 検出時にジョブを失敗 | true |
TRIVY_IGNORE_UNFIXED | 未修正を無視 | true |
TRIVY_TIMEOUT | タイムアウト | "10m" |
TRIVY_SKIP_FILES | スキップするファイル | "" |
TRIVY_SKIP_DIRS | スキップするディレクトリ | "" |
TRIVY_EXTRA_ARGS | 追加引数 | "" |
TRIVY_REPORT_BASENAME | アーティファクトベース名 | "repo-scan" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:scan:vm" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_VM_TARGET | ローカルパスまたはami:/ebs:識別子 | "" |
TRIVY_AWS_REGION | AMI/EBSスキャン用のAWSリージョン | "" |
TRIVY_SCANNERS | スキャナー | "vuln" |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 検出時にジョブを失敗 | true |
TRIVY_IGNORE_UNFIXED | 未修正を無視 | true |
TRIVY_TIMEOUT | タイムアウト | "20m" |
TRIVY_EXTRA_ARGS | 追加引数 | "" |
TRIVY_REPORT_BASENAME | アーティファクトベース名 | "vm-scan" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:scan:k8s" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_K8S_OBJECT | スコープ(cluster、namespace/fooなど) | "" |
TRIVY_K8S_REPORT | レポート詳細(summary/all) | "summary" |
TRIVY_K8S_KUBECONFIG | カスタムkubeconfigパス | "" |
TRIVY_K8S_INCLUDE_NAMESPACES | 含めるネームスペース | "" |
TRIVY_K8S_EXCLUDE_NAMESPACES | 除外するネームスペース | "" |
TRIVY_K8S_INCLUDE_KINDS | 含めるリソース種別 | "" |
TRIVY_K8S_EXCLUDE_KINDS | 除外するリソース種別 | "" |
TRIVY_K8S_SKIP_IMAGES | ワークロードイメージスキャンをスキップ | false |
TRIVY_K8S_DISABLE_NODE_COLLECTOR | ノードコレクターを無効化 | false |
TRIVY_SCANNERS | スキャナー | "vuln,misconfig,secret" |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 検出時にジョブを失敗 | true |
TRIVY_IGNORE_UNFIXED | 未修正を無視 | true |
TRIVY_TIMEOUT | タイムアウト | "15m" |
TRIVY_K8S_EXTRA_ARGS | 追加引数 | "" |
TRIVY_REPORT_BASENAME | アーティファクトベース名 | "k8s-scan" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:scan:iac" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_CONFIG_PATH | IaCディレクトリ | "." |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 検出時に失敗 | true |
TRIVY_CONFIG_REPORT | レポート詳細 | "all" |
TRIVY_CONFIG_INCLUDE_NON_FAILURES | 合格も含める | false |
TRIVY_MISCONFIG_SCANNERS | 誤設定スキャナー一覧 | "azure-arm,cloudformation,dockerfile,helm,kubernetes,terraform" |
TRIVY_TIMEOUT | タイムアウト | "10m" |
TRIVY_SKIP_FILES | スキップするファイル | "" |
TRIVY_SKIP_DIRS | スキップするディレクトリ | "" |
TRIVY_CONFIG_EXTRA_ARGS | 追加引数 | "" |
TRIVY_REPORT_BASENAME | アーティファクトベース名 | "iac-scan" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:scan:license" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | リモートイメージ参照 | "" |
TRIVY_SCAN_LOCAL_IMAGES | ローカルtar/OCIまたはファイルシステムパス | "" |
TRIVY_SCANNERS | スキャナー一覧 | "license" |
severity | 重大度 | "CRITICAL" |
exit_on_vulnerability | 重大度一致で失敗 | true |
TRIVY_LICENSE_FULL | --license-full を有効化 | false |
TRIVY_LICENSE_CONFIDENCE | 信頼度しきい値 | "0.9" |
TRIVY_LICENSE_IGNORED | 無視するライセンス | "" |
TRIVY_PKG_TYPES | パッケージタイプ | "os,library" |
TRIVY_TIMEOUT | タイムアウト | "10m" |
TRIVY_EXTRA_ARGS | 追加引数 | "" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:sbom:image" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SBOM_IMAGE | リモートイメージ参照 | "" |
TRIVY_SBOM_INPUT | ローカルOCI/tar入力 | "" |
TRIVY_SBOM_FORMAT | SBOMフォーマット | "cyclonedx" |
TRIVY_SBOM_FILENAME | 出力ファイル名 | "image-sbom.cdx.json" |
TRIVY_SBOM_EXTRA_ARGS | 追加引数 | "" |
TRIVY_TIMEOUT | タイムアウト | "10m" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:sbom:repo" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_REPO_TARGET | パスまたはリモートGit URL | "." |
TRIVY_REPO_BRANCH | ブランチ | "" |
TRIVY_REPO_COMMIT | コミットハッシュ | "" |
TRIVY_REPO_TAG | タグ | "" |
TRIVY_SBOM_FORMAT | フォーマット | "cyclonedx" |
TRIVY_SBOM_FILENAME | 出力ファイル名 | "repo-sbom.cdx.json" |
TRIVY_REPO_SCANNERS | SBOM作成時のスキャナー | "vuln,secret" |
TRIVY_REPO_EXTRA_ARGS | 追加引数 | "" |
TRIVY_TIMEOUT | タイムアウト | "10m" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:sbom:kbom" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_K8S_TARGET | trivy k8s ターゲット(cluster、namespace/...) | "cluster" |
TRIVY_K8S_CONTEXT | Kubeconfigコンテキスト | "" |
TRIVY_K8S_EXTRA_ARGS | 追加引数 | "" |
TRIVY_SBOM_FILENAME | KBOMファイル名 | "kbom.cdx.json" |
TRIVY_TIMEOUT | タイムアウト | "15m" |
scan_kbom | 生成されたKBOMに対して脆弱性スキャンを実行 | true |
TRIVY_SBOM_SCANNERS | KBOMスキャンのスキャナー | "vuln" |
severity | KBOMスキャンの重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 検出時に失敗 | true |
TRIVY_SBOM_SCAN_EXTRA_ARGS | KBOMスキャンの追加引数 | "" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:scan:sbom" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SBOM_PATH | SBOMファイルへのパス | "artifacts/trivy/image-sbom.cdx.json" |
TRIVY_SBOM_REPORT_BASENAME | 出力ベース名 | "sbom-scan" |
TRIVY_SCANNERS | 実行するスキャナー | "vuln,license" |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 検出時に失敗 | true |
TRIVY_SBOM_SCAN_EXTRA_ARGS | 追加引数 | "" |
TRIVY_TIMEOUT | タイムアウト | "10m" |
allow_failure | 失敗を許可 | false |
| 入力 | 説明 | デフォルト |
|---|
job_name | ジョブ名 | "trivy:scan:rekor" |
stage | ステージ | "test" |
image | Trivyイメージ | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | アテストされたリモートイメージ | "" |
TRIVY_REKOR_URL | Rekor APIエンドポイント | "" |
TRIVY_SCANNERS | スキャナー | "vuln" |
severity | 重大度 | "CRITICAL,HIGH" |
exit_on_vulnerability | 検出時に失敗 | true |
TRIVY_IGNORE_UNFIXED | 未修正を無視 | true |
TRIVY_TIMEOUT | タイムアウト | "10m" |
TRIVY_EXTRA_ARGS | 追加引数 | "" |
allow_failure | 失敗を許可 | false |