公開:2026年3月5日
18分で読めます
GitLab のさまざまなコンテナスキャン方法を詳しく解説し、コンテナライフサイクルの各段階でセキュリティを確保する方法をご紹介します。

コンテナの脆弱性は、次のデプロイメントを待ってくれるわけではありません。イメージのビルド時や、コンテナが本番環境で稼働している間など、あらゆるタイミングで発生する可能性があります。 GitLab はこうした現実に対応するため、コンテナライフサイクルのさまざまな段階に対応した複数のコンテナスキャンアプローチを提供しています。
本ガイドでは、GitLab が提供するコンテナスキャンの種類、各機能の有効化方法、および初期設定に役立つ一般的な構成についてご説明します。
コンテナイメージのセキュリティ脆弱性は、アプリケーションライフサイクル全体にわたってリスクをもたらします。ベースイメージ、OSパッケージ、アプリケーションの依存関係はいずれも、攻撃者が積極的に悪用する脆弱性を含んでいる可能性があります。コンテナスキャンはこれらのリスクを早期に、本番環境に到達する前に検出し、利用可能な場合は修正方法を提供します。
コンテナスキャンはソフトウェアコンポジション分析(SCA)の重要なコンポーネントであり、コンテナ化されたアプリケーションが依存する外部依存関係を把握し、保護するために役立ちます。
GitLab は5つの異なるコンテナスキャンアプローチを提供しており、それぞれがセキュリティ戦略において固有の目的を果たします。
GitLab は Trivy セキュリティスキャナーを使用してコンテナイメージの既知の脆弱性を分析します。パイプラインの実行時にスキャナーがイメージを検査し、詳細なレポートを生成します。
オプション A:事前設定済みのマージリクエスト
オプション B:手動設定
.gitlab-ci.yml に以下を追加します。 include:
- template: Jobs/Container-Scanning.gitlab-ci.yml
特定のイメージをスキャンする:
特定のイメージをスキャンするには、container_scanning ジョブの CS_IMAGE 変数を上書きします。
include:
- template: Jobs/Container-Scanning.gitlab-ci.yml
container_scanning:
variables:
CS_IMAGE: myregistry.com/myapp:latest
重大度のしきい値でフィルタリングする:
特定の重大度基準を持つ脆弱性のみを検出するには、container_scanning ジョブの CS_SEVERITY_THRESHOLD 変数を上書きします。以下の例では、重大度が High 以上の脆弱性のみが表示されます。
include:
- template: Jobs/Container-Scanning.gitlab-ci.yml
container_scanning:
variables:
CS_SEVERITY_THRESHOLD: "HIGH"
マージリクエスト内でコンテナスキャンの脆弱性を直接確認することで、セキュリティレビューをシームレスかつ効率的に実施できます。CI/CDパイプラインにコンテナスキャンを設定すると、GitLab はマージリクエストのセキュリティウィジェットに検出された脆弱性を自動的に表示します。
マージリクエストに表示されたコンテナスキャンの脆弱性

MRでのコンテナスキャン脆弱性の詳細
この可視性により、開発者とセキュリティチームはコンテナの脆弱性が本番環境に到達する前に発見・対処できるようになり、セキュリティがコードレビュープロセスに統合されます。
マージリクエストのレビューに加え、GitLab はプロジェクト内のすべてのコンテナスキャン結果を一元的に確認できる脆弱性レポートを提供しており、セキュリティチームに包括的な可視性をもたらします。
コンテナスキャンでフィルタリングされた脆弱性レポート


コンテナスキャン脆弱性の詳細
脆弱性の詳細では、影響を受けるコンテナイメージとレイヤーが正確に示されるため、脆弱性の発生源を容易に追跡できます。脆弱性をチームメンバーに割り当て、ステータスを変更(検出済み、確認済み、解決済み、却下済み)し、コラボレーションのためのコメントを追加し、修正作業の追跡のために関連するイシューをリンクすることができます。
このワークフローにより、脆弱性管理がスプレッドシートによる管理から開発プロセスの一部へと変わり、コンテナセキュリティの検出結果が体系的に追跡・優先順位付け・解決されるようになります。
GitLab の依存関係リストは、コンテナイメージ内のすべてのコンポーネントをカタログ化した包括的なソフトウェア部品表(SBOM)を提供し、ソフトウェアサプライチェーンの完全な透明性をもたらします。
GitLab 依存関係リスト(SBOM)
パッケージマネージャー、ライセンスの種類、または脆弱性のステータスでリストをフィルタリングすることで、セキュリティリスクやコンプライアンス上の問題をもたらすコンポーネントを素早く特定できます。各依存関係エントリには関連する脆弱性が表示されるため、単独の検出結果としてではなく、実際のソフトウェアコンポーネントのコンテキストでセキュリティの問題を把握できます。
latest タグで GitLab コンテナレジストリにプッシュされたイメージを自動的にスキャンします。latest タグが付いたコンテナイメージをプッシュすると、GitLab のセキュリティポリシーボットがデフォルトブランチに対してスキャンを自動的にトリガーします。パイプラインベースのスキャンとは異なり、このアプローチは継続的脆弱性スキャンと連携して、新たに公開されたアドバイザリーを監視します。
レジストリ向けコンテナスキャンの切り替えスイッチ
脆弱性は脆弱性レポートの コンテナレジストリの脆弱性 タブに表示されます。
マルチコンテナスキャンは動的な子パイプラインを使用してスキャンを並行実行するため、複数のイメージをスキャンする際のパイプライン全体の実行時間を大幅に短縮できます。
.gitlab-multi-image.yml ファイルを作成します。 scanTargets:
- name: alpine
tag: "3.19"
- name: python
tag: "3.9-slim"
- name: nginx
tag: "1.25"
.gitlab-ci.yml にテンプレートを追加します。 include:
- template: Jobs/Multi-Container-Scanning.latest.gitlab-ci.yml
プライベートレジストリからイメージをスキャンする:
auths:
registry.gitlab.com:
username: ${CI_REGISTRY_USER}
password: ${CI_REGISTRY_PASSWORD}
scanTargets:
- name: registry.gitlab.com/private/image
tag: latest
ライセンス情報を含める:
includeLicenses: true
scanTargets:
- name: postgres
tag: "15-alpine"
従来のスキャンは、スキャン実行時の脆弱性しか検出できません。しかし、昨日スキャンしたパッケージに対して、明日新しい CVE が公開された場合はどうなるでしょうか。継続的脆弱性スキャンは、GitLab アドバイザリーデータベースを監視し、新しいアドバイザリーがコンポーネントに影響を与える際に自動的に脆弱性レコードを作成することでこの課題を解決します。
運用コンテナスキャンは、ビルド時のセキュリティとランタイムセキュリティの間のギャップを埋めます。GitLab Agent for Kubernetes を使用して、クラスター内で実際に稼働しているコンテナをスキャンし、デプロイ後に発生する脆弱性を検出します。
GitLab Kubernetes Agent を使用している場合、エージェント設定ファイルに以下を追加できます。
container_scanning:
cadence: '0 0 * * *' # 毎日深夜0時
vulnerability_report:
namespaces:
include:
- production
- staging
また、GitLab Kubernetes Agent によるスケジュールスキャンを強制するスキャン実行ポリシーを作成することもできます。
運用コンテナスキャンのスキャン実行ポリシー条件
GitLab セキュリティポリシーを使用すると、自動化されたポリシー駆動型のコントロールを通じて、コンテナワークフロー全体で一貫したセキュリティ標準を適用できます。これらのポリシーは、要件を開発パイプラインに直接組み込むことでセキュリティをシフトレフトし、コードが本番環境に到達する前に脆弱性を検出・対処できるようにします。
スキャン実行ポリシーは、プロジェクト全体でコンテナスキャンがいつ・どのように実行されるかを自動化します。すべてのマージリクエストでコンテナスキャンをトリガーし、メインブランチの定期的なスキャンをスケジュールするポリシーなどを定義できます。これらのポリシーにより、各プロジェクトの CI/CD パイプラインで手動でスキャンを設定することなく、包括的なカバレッジが確保されます。
使用するスキャナーのバージョンを指定し、スキャンパラメーターを一元的に設定することで、新しいコンテナセキュリティの脅威に対応しながら組織全体の一貫性を維持できます。
スキャン実行ポリシーの設定
パイプライン実行ポリシーは、コンプライアンス要件に基づいてパイプラインにカスタムジョブを注入(または上書き)するための柔軟なコントロールを提供します。
これらのポリシーを使用して、コンテナスキャンジョブをパイプラインに自動的に注入したり、コンテナの脆弱性がリスク許容度を超えた場合にビルドを失敗させたり、特定のブランチやタグに対して追加のセキュリティチェックをトリガーしたり、本番環境向けコンテナイメージのコンプライアンス要件を適用したりすることができます。パイプライン実行ポリシーは自動化されたガードレールとして機能し、手動操作なしですべてのコンテナデプロイメントにセキュリティ標準が一貫して適用されるようにします。
パイプライン実行ポリシーのアクション
マージリクエスト承認ポリシーは、コンテナの脆弱性を含むマージリクエストを指定された承認者がレビューし、承認することを要求することでセキュリティゲートを適用します。
重大度の高い脆弱性が検出された場合にマージをブロックするポリシーや、新しいコンテナの検出結果を導入するマージリクエストにセキュリティチームの承認を要求するポリシーを設定できます。これらのポリシーにより、低リスクな変更の開発速度を維持しながら、脆弱性のあるコンテナイメージがパイプラインを通じて進むことを防ぎます。
MRでブロックを実行するマージリクエスト承認ポリシー
| スキャンの種類 | 使用するタイミング | 主なメリット |
|---|---|---|
| パイプラインベース | すべてのビルド時 | シフトレフトセキュリティ、脆弱なビルドをブロック |
| レジストリスキャン | 継続的なモニタリング | 保存されたイメージの新しい CVE を検出 |
| マルチコンテナ | マイクロサービス | 並行スキャン、パイプラインの高速化 |
| 継続的脆弱性 | デプロイ間 | プロアクティブなアドバイザリーモニタリング |
| 運用 | 本番環境のモニタリング | ランタイム脆弱性の検出 |
包括的なセキュリティのためには、複数のアプローチを組み合わせることをお勧めします。開発中の問題を検出するためのパイプラインベースのスキャン、継続的なモニタリングのためのレジストリ向けコンテナスキャン、そして本番環境の可視性のための運用スキャンを組み合わせてご活用ください。
コンテナセキュリティへの最短ルートは、パイプラインベースのスキャンを有効にすることです。
その後、セキュリティ要件と GitLab のプランに応じて、追加のスキャンの種類を段階的に導入してください。
コンテナセキュリティは一度実施すれば完了するものではなく、継続的なプロセスです。 GitLab の包括的なコンテナスキャン機能を活用することで、ビルドからランタイムまでコンテナライフサイクルのあらゆる段階で脆弱性を検出できます。
GitLab がセキュリティ態勢の強化にどのように役立つかについての詳細は、GitLab セキュリティ & ガバナンス ソリューションページをご覧ください。
このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成してあなたの声を届けましょう。
フィードバックを共有する