チュートリアル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 で新しいパイプラインが開始します。完了したら、新しいスキャンの結果を確認できます。
