チュートリアルDockerコンテナの脆弱性スキャン
コンテナスキャンを使用して、コンテナレジストリに保存されているコンテナイメージの脆弱性をチェックすることができます。
コンテナスキャン設定は、プロジェクトのパイプライン設定に追加します。このチュートリアルでは
- 新しいプロジェクトを作成します。
-
プロジェクトに
Dockerfile
ファイルを追加します。このDockerfile
、Dockerイメージの作成に必要な最小限の設定が含まれています。 -
Dockerfile
からDockerイメージを作成し、Dockerイメージをビルドしてコンテナレジストリにプッシュし、Dockerイメージの脆弱性をスキャンするために、新しいプロジェクトのパイプライン設定を作成します。 - レポーターから報告された脆弱性をチェックします。
- Dockerイメージを更新し、更新されたイメージをスキャンします。
新しいプロジェクトを作成します。
新規プロジェクトを作成するには
- 左サイドバーの上部にある「新規作成({plus})」と「新規プロジェクト/リポジトリ」を選択します。
- 空白プロジェクトの作成」を選択します。
-
プロジェクト名に
Tutorial container scanning project
と入力します。 - Project URL で、プロジェクトのネームスペースを選択します。
- Create projectを選択します。
新規プロジェクトにDockerfile
を追加します。
コンテナ・スキャンのための何かを提供するために、最小限の設定でDockerfile
:
-
Tutorial container scanning project
プロジェクトで、> New file を選択します。プロジェクトで、{プラス} >新規ファイルを選択します。 -
ファイル名
Dockerfile
を入力し、次の内容を入力します:FROM hello-world:latest
このDockerfile
から作成されたDockerイメージは、hello-world
Dockerイメージをベースにしています。
- 変更をコミット を選択します。
パイプライン設定の作成
これでパイプライン設定を作成する準備ができました。パイプライン設定です:
-
Dockerfile
ファイルからDockerイメージをビルドし、コンテナレジストリにDockerイメージをプッシュします。build-image
ジョブはCI/CDサービスとしてDocker-in-Dockerを使用してDockerイメージを構築します。kanikoを使ってパイプラインでDockerイメージをビルドすることもできます。 -
Container-Scanning.gitlab-ci.yml
、コンテナレジストリに保存されたDockerイメージをスキャンするテンプレートが含まれています。
パイプライン設定を作成します:
- プロジェクトのルートディレクトリで、> New file を選択します。> を選択します。
-
ファイル名
.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
- 変更をコミット を選択します。
ほぼ完了です。ファイルをコミットすると、この設定で新しいパイプラインが開始されます。完了すると、スキャン結果を確認できます。
レポーターされた脆弱性のチェック
スキャンの脆弱性は、スキャンを実行したパイプライン上にあります。レポーターされた脆弱性を確認するには、以下の手順に従います:
-
CI/CD>パイプラインを選択し、最新のパイプラインを選択してください。このパイプラインは
test
ステージのcontainer_scanning
というジョブで構成されているはずです。 -
container_scanning
のジョブが成功したら、セキュリティタブを選択してください。脆弱性が見つかった場合、そのページにリストされています。
Dockerイメージを更新します。
hello-world:latest
に基づいたDockerイメージは脆弱性を示す可能性は低いでしょう。脆弱性をレポーターするスキャンの例について:
- プロジェクトのルートディレクトリで、既存の
Dockerfile
ファイルを選択してください。 - 編集]を選択します。
-
FROM
の説明で、FROM hello-world:latest
を別の Docker イメージに置き換えてください。コンテナ・スキャンのデモに最適なDockerイメージは以下の通りです:- オペレーションシステムパッケージ。例えば、Debian、Ubuntu、Alpine、またはRed Hatのもの。
- プログラミング言語パッケージ。例えば、npm パッケージや Python パッケージなど。
- 変更をコミット を選択します。
ファイルへの変更をコミットすると、更新されたDockerfile
で新しいパイプラインが開始します。完了したら、新しいスキャンの結果を確認できます。