コンテナイメージのセキュリティスキャン
イメージスキャンツールをCI/CDパイプラインに統合し、Dockerイメージの脆弱性を特定します。
「コンテナイメージのセキュリティスキャン」はCoddyKit上の無料Docker & DevOps Fundamentalsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDocker & DevOps Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
コンテナイメージをスキャンする理由
コンテナイメージは、現代のアプリケーションの基盤です。ほかのソフトウェアと同様に、隠れたセキュリティ上の欠陥が含まれている可能性があります。イメージスキャンは、アプリケーションをデプロイする前にこうした欠陥を見つけるための重要なプラクティスです。
実行するソフトウェアが安全で、既知の脆弱性を含んでいないことの確認に役立ちます。

イメージに潜む危険
コンテナイメージには、どのような脆弱性が潜んでいる可能性があるでしょうか。
- 古いベースイメージ: 既知のセキュリティバグがある古いバージョンのOS(UbuntuやAlpineなど)を使用している。
- 脆弱なライブラリ: イメージにインストールする追加のソフトウェアパッケージや依存関係に、セキュリティ上の欠陥(CVE)が含まれている可能性がある。
- 設定ミス: スキャンは主に既知のCVEを対象としますが、不適切な設定によってリスクが生じることもある。
イメージスキャナーの仕組み
コンテナイメージスキャナーは、次のように動作します。
- レイヤーの分析: Dockerイメージの各レイヤーを調査します。
- コンポーネントの抽出: インストールされているすべてのパッケージ、ライブラリ、依存関係(OSパッケージ、Pythonライブラリ、Node.jsモジュールなど)を特定します。
- データベースとの比較: これらのコンポーネントを、定期的に更新される広範な脆弱性データベース(CVEデータベースなど)と照合します。
- レポートの生成: 特定された脆弱性、その重大度、推奨される修正方法などを詳しく一覧にします。
代表的なツール
コンテナイメージのスキャンには、オープンソースと商用の両方で、いくつかの強力なツールを利用できます。
- Trivy: 使いやすく、幅広い対象をカバーすることで知られる、人気のオープンソーススキャナーです。
- Clair: もう1つの堅牢なオープンソースの選択肢で、大規模なコンテナレジストリに統合されることが多いツールです。
- Docker Scout(
docker scan経由): Docker Desktopに組み込まれており、Snykの脆弱性データベースを利用して、ローカルで迅速にスキャンできます。
イメージをローカルでスキャンする
組み込みの docker scan コマンドを使って、一般的な Docker イメージをすばやくスキャンしてみましょう。このコマンドは Docker Scout(Snyk を基盤としています)を使用して、脆弱性をチェックします。
次の例を実行してみてください。
docker scan nginx:latest結果を理解する
スキャンを実行すると、レポートが表示されます。次の項目を確認してください。
- CVE ID: 脆弱性を一意に識別するIDです(例: CVE-2023-1234)。
- Severity: 脆弱性の深刻度です(例: Critical、High、Medium、Low)。
- Package: 脆弱性を含む特定のソフトウェアコンポーネントまたはライブラリです。
- Fixed Version: 多くの場合、問題を修正したパッケージまたはベースイメージのバージョンがレポートに提示されます。
ワークフローでスキャンする
イメージスキャンの真価は、開発ワークフローに統合したときに発揮されます。継続的インテグレーション(CI)パイプラインにスキャンを追加すると、次のことが可能になります。
- 問題を早期に発見する: 新しいコードがコミットされた時点、またはイメージがビルドされた時点ですぐに脆弱性を特定できます。
- セキュリティチェックを自動化する: セキュリティをビルドプロセスの標準的な自動処理として組み込めます。
- デプロイを防止する: 重大な脆弱性が検出された場合にCIパイプラインでビルドを失敗させ、安全でないイメージが本番環境に到達するのを防げます。
CIでスキャンを自動化する
ここでは、GitHub ActionsのワークフローにTrivyスキャンを統合する方法の概念的なスニペットを示します。これにより、ビルドされたすべてのイメージが自動的にスキャンされます。
# .github/workflows/scan.yml
name: Image Scan
on:
push:
branches: [ main ]
jobs:
build-and-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker Image
run: docker build -t my-app:latest .
- name: Run Trivy Scan
uses: aquasecurity/trivy-action@master
with:
image-ref: 'my-app:latest'
format: 'table'
exit-code: '1' # Fail build on critical issues見つかった問題を修正する
脆弱性を見つけることは対策の半分にすぎません。残りの半分は修正することです。一般的な修復方法を紹介します。
- ベースイメージを更新する: 選択したベースイメージは、常に最新のパッチ適用済みバージョンを使用してください。
- 依存関係を最小限にする: アプリケーションの実行に絶対に必要なパッケージだけをインストールしてください。
- マルチステージビルド: マルチステージDockerfileを使用して最終イメージのサイズを小さくし、実行時に不要なビルド用ツールを削除します。
- パッチを適用する: 脆弱なコンポーネント向けに利用可能な特定のセキュリティパッチがあれば適用します。
スキャンチェック
イメージスキャンは、安全なコンテナ開発に欠かせない要素です。理解度を確認してみましょう。
主なポイント
コンテナイメージのセキュリティスキャンが果たす重要な役割について学びました。
- ベースイメージと依存関係に含まれる既知の脆弱性(CVE)を特定します。
- Trivy、Clair、Docker Scoutなどのツールを使って、この処理を自動化できます。
- スキャンをCI/CDパイプラインに統合すると、脆弱性を早期に検出し、安全でないイメージのデプロイを防止できます。
- イメージを定期的に更新し、依存関係を最小限にすることで、攻撃対象領域を縮小できます。
強固なセキュリティ体制を維持するため、イメージのスキャンを続けてください。
よくある質問
「コンテナイメージのセキュリティスキャン」レッスンは無料ですか?
はい。「コンテナイメージのセキュリティスキャン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Docker & DevOps Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
「コンテナイメージのセキュリティスキャン」で何を学びますか?
イメージスキャンツールをCI/CDパイプラインに統合し、Dockerイメージの脆弱性を特定します。 ブラウザで直接実行するハンズオンコードでDocker & DevOps Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Docker & DevOps Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDocker & DevOps Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「コンテナイメージのセキュリティスキャン」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDocker & DevOps Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのDocker & DevOps Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- コンテナイメージのセキュリティスキャン
- コンテナのランタイムセキュリティ
- Secrets管理とRBAC
- ネットワークポリシーと最小権限ネットワーク