チュートリアルDockerコンテナの脆弱性スキャン

コンテナスキャンを使用して、コンテナレジストリに保存されているコンテナイメージの脆弱性をチェックすることができます。

コンテナスキャン設定は、プロジェクトのパイプライン設定に追加します。このチュートリアルでは

  1. 新しいプロジェクトを作成します。
  2. プロジェクトにDockerfile ファイルを追加します。このDockerfile 、Dockerイメージの作成に必要な最小限の設定が含まれています。
  3. Dockerfile からDockerイメージを作成し、Dockerイメージをビルドしてコンテナレジストリにプッシュし、Dockerイメージの脆弱性をスキャンするために、新しいプロジェクトのパイプライン設定を作成します。
  4. レポーターから報告された脆弱性をチェックします。
  5. Dockerイメージを更新し、更新されたイメージをスキャンします。

新しいプロジェクトを作成します。

新規プロジェクトを作成するには

  1. 左サイドバーの上部にある「新規作成({plus})」と「新規プロジェクト/リポジトリ」を選択します。
  2. 空白プロジェクトの作成」を選択します。
  3. プロジェクト名にTutorial container scanning project と入力します。
  4. Project URL で、プロジェクトのネームスペースを選択します。
  5. Create projectを選択します。

新規プロジェクトにDockerfile を追加します。

コンテナ・スキャンのための何かを提供するために、最小限の設定でDockerfile

  1. Tutorial container scanning project プロジェクトで、> New file を選択します。プロジェクトで、{プラス} >新規ファイルを選択します。
  2. ファイル名Dockerfile を入力し、次の内容を入力します:

    FROM hello-world:latest
    

このDockerfile から作成されたDockerイメージは、hello-world Dockerイメージをベースにしています。

  1. 変更をコミット を選択します。

パイプライン設定の作成

これでパイプライン設定を作成する準備ができました。パイプライン設定です:

  1. Dockerfile ファイルからDockerイメージをビルドし、コンテナレジストリにDockerイメージをプッシュします。build-image ジョブはCI/CDサービスとしてDocker-in-Dockerを使用してDockerイメージを構築します。kanikoを使ってパイプラインでDockerイメージをビルドすることもできます。
  2. Container-Scanning.gitlab-ci.yml 、コンテナレジストリに保存されたDockerイメージをスキャンするテンプレートが含まれています。

パイプライン設定を作成します:

  1. プロジェクトのルートディレクトリで、> New file を選択します。> を選択します。
  2. ファイル名.gitlab-ci.yml を入力し、次の内容を入力します:

    include:
      - template: Security/Container-Scanning.gitlab-ci.yml
       
    container_scanning:
      variables:
        CS_IMAGE: $CI_REGISTRY_IMAGE/tutorial-image
       
    build-image:
      image: docker:24.0.2
      stage: build
      services:
        - docker:24.0.2-dind
      script:
        - docker build --tag $CI_REGISTRY_IMAGE/tutorial-image --file Dockerfile .
        - docker login --username gitlab-ci-token --password $CI_JOB_TOKEN $CI_REGISTRY
        - docker push $CI_REGISTRY_IMAGE/tutorial-image
    
  3. 変更をコミット を選択します。

ほぼ完了です。ファイルをコミットすると、この設定で新しいパイプラインが開始されます。完了すると、スキャン結果を確認できます。

レポーターされた脆弱性のチェック

スキャンの脆弱性は、スキャンを実行したパイプライン上にあります。レポーターされた脆弱性を確認するには、以下の手順に従います:

  1. CI/CD>パイプラインを選択し、最新のパイプラインを選択してください。このパイプラインはtest ステージのcontainer_scanning というジョブで構成されているはずです。
  2. container_scanning のジョブが成功したら、セキュリティタブを選択してください。脆弱性が見つかった場合、そのページにリストされています。

Dockerイメージを更新します。

hello-world:latest に基づいたDockerイメージは脆弱性を示す可能性は低いでしょう。脆弱性をレポーターするスキャンの例について:

  1. プロジェクトのルートディレクトリで、既存のDockerfile ファイルを選択してください。
  2. 編集]を選択します。
  3. FROM の説明で、FROM hello-world:latest を別の Docker イメージに置き換えてください。コンテナ・スキャンのデモに最適なDockerイメージは以下の通りです:
    • オペレーションシステムパッケージ。例えば、Debian、Ubuntu、Alpine、またはRed Hatのもの。
    • プログラミング言語パッケージ。例えば、npm パッケージや Python パッケージなど。
  4. 変更をコミット を選択します。

ファイルへの変更をコミットすると、更新されたDockerfile で新しいパイプラインが開始します。完了したら、新しいスキャンの結果を確認できます。