次の方法で共有


クイック スタート: Dependabot とコパ酢酸を使用してコンテナー イメージの依存関係を更新してセキュリティで保護する

このクイック スタートでは、Dependabot とコパ酢酸を構成するために必要な手順について説明します。これは、ソフトウェア依存関係の更新を自動化し、セキュリティで保護されたサプライ チェーン環境でのコンテナー イメージのセキュリティを強化するのに役立ちます。 これらのツールを使用すると、コンテナー イメージが常に最新で安全であることを確認できます。

このクイックスタートでは、次の方法について説明します。

  • Dependabot を使用してコンテナー イメージの依存関係とセキュリティを更新します。
    • Dependabot は、コンテナー イメージの依存関係を最新の状態に保つプロセスを自動化し、脆弱性のリスクを軽減します。
  • コパ酢酸を使用して、コンテナー イメージを継続的に監視、スキャン、およびパッチ適用します。
    • コパ酢酸は、コンテナー イメージの継続的な監視とスキャンを提供し、既知の脆弱性に対してセキュリティで保護され、パッチが適用されていることを確認します。

前提条件

Dependabot を使用してコンテナー イメージの依存関係とセキュリティを更新する

Dependabot は、ソフトウェアの依存関係を最新の状態に保つプロセスを自動化するツールです。 これは、リポジトリで古い依存関係をスキャンし、最新バージョンに更新するためのプル要求を作成することによって機能します。 依存関係の更新が毎日チェックされ、更新するプル要求が作成されます。 Dependabot を構成して、Docker イメージを含むすべての種類の依存関係に対するプル要求を作成できます。 dependabot を使用して、最新のセキュリティ パッチを取得し、セキュリティ リスクを軽減するために、Dockerfiles、Kubernetes yaml ファイル、Helm チャート値 yaml ファイルの依存関係を自動的にバンプすることをお勧めします。

GitHub で Dependabot を使用する

Dependabot によって発生したプル要求を効果的に管理するためのガイダンスと推奨事項に従い、GitHub Actions を使用して Dependabot のパフォーマンスを向上させ、一般的な Dependabot エラーのトラブルシューティングを行います。

Azure DevOps で Dependabot を使用する

手順に従って、Azure DevOps で Dependabot を構成し、コンテナー イメージの依存関係を最新バージョンとセキュリティ強化メイン最新の状態に保ちます。

  1. アクセス許可の付与: 名前 YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME) を持つサービス アカウントを作成し、次のアクセス許可を付与します。
  • 強制プッシュ
  • pull request に貢献する
  • 分岐を作成する

* ビルド サービスのアクセス許可を見つけます。*

プロジェクトとYOUR-ORGANIZATION-NAME組織の実際の名前を必ず置き換えてくださいYOUR-PROJECT-NAME

  1. Dependabot の構成: Dependabot を構成するには、リポジトリに dependabot.yml 構成ファイルを追加します。 構成ファイルの例を次に示します。

      version: 2
      updates:
        - package-ecosystem: "docker"
          directory: "/"
          assignees:
            - "dependabot"
    

この構成では、Docker を使用するプロジェクトに Dependabot を設定し、ルート ディレクトリ ("/") が Docker ファイルの場所であることを指定し、更新プログラムを処理するために Dependabot を割り当てます。 プロジェクトのニーズに合わせて構成をカスタマイズできます。

  1. Azure DevOps パイプラインを作成する: Azure DevOps パイプラインを作成するには、次の内容のファイルをリポジトリに追加 azure-pipeline.yml します。

     schedules:
       - cron: '0 14 * * *'
         displayName: 'Every day at 7am PST'
         branches:
           include: [main]
         always: true
    
     trigger: none
    
     jobs:
       - job:
         steps:
         - script: |
             git clone https://github.com/dependabot/dependabot-core.git
             cd dependabot-core
    
             DOCKER_BUILDKIT=1 docker build \
               --build-arg "USER_UID=$(id -u)" \
               --build-arg "USER_GID=$(id -g)" \
               -t "dependabot/dependabot-core" .
             cd ..
           displayName: build dependabot-core Docker image
    
         - script: |
             git clone https://github.com/dependabot/dependabot-script.git
             cd dependabot-script
    
             docker run -v "$(pwd):/home/dependabot/dependabot-script" -w /home/dependabot/dependabot-script dependabot/dependabot-core bundle install -j 3 --path vendor
           displayName: install dependencies
    
         - script: |
             #!/bin/bash
             SYSTEM_COLLECTIONURI_TRIM=`echo "${SYSTEM_COLLECTIONURI:22}"`
             PROJECT_PATH="$SYSTEM_COLLECTIONURI_TRIM$SYSTEM_TEAMPROJECT/_git/$BUILD_REPOSITORY_NAME"
             echo "path: $PROJECT_PATH"
    
             docker run  -v "$(pwd)/dependabot-script:/home/dependabot/dependabot-script" \
                         -w '/home/dependabot/dependabot-script' \
                         -e AZURE_ACCESS_TOKEN=$(System.AccessToken) \
                         -e PACKAGE_MANAGER=docker \
                         -e PROJECT_PATH=$PROJECT_PATH \
                         -e DIRECTORY_PATH=/ \
                         -e OPTIONS="$OPTIONS" \
                         dependabot/dependabot-core bundle exec ruby ./generic-update-script.rb
           displayName: "run dependabot"
           env:
             OPTIONS: |
               { "kubernetes_updates": true }
    

  2. パイプラインを実行します。上記 azure-pipelines.yaml のファイルから新しい ADO パイプラインを作成して確認します。

Dependabot は、次のようなさまざまなシナリオでコンテナー イメージの依存関係を更新できます。

  • Dockerfile
  • Kubernetes YAML
  • Helm values.yaml

Note

この構文により、Dependabot は構成ファイル内のコンテナー イメージの依存関係を識別および更新し、最新バージョンとセキュリティ パッチを使用して最新の状態を維持できます。

構成ファイルでイメージを指定する場合は、次の構文を使用します。


# Dockerfile
foo:
  image:
    repository: sql/sql
    tag: 1.2.3
    registry: docker.io

# Helm values.yaml
foo:
  image:
    repository: sql/sql
    tag: 1.2.3
    registry: docker.io

または、 Helm values.yamlこのフィールドを version 使用してイメージのバージョンを指定することもできます。

foo:
  image:
    repository: sql/sql
    version: 1.2.3

コパ酢酸を使用してコンテナー イメージを継続的に監視、スキャン、およびパッチ適用する

コパ酢酸 (コパ) は、Microsoft が支援する CNCF オープンソース プロジェクトであり、一般的なスキャナー ツールの結果をスキャンする脆弱性を考えると、コンテナー イメージの Linux OS パッケージの脆弱性に直接パッチを適用します。 コパ酢酸を使用すると、完全な再構築のためにアップストリームに行かずに、コンテナーに迅速にパッチを適用できます。 これにより、コンテナー イメージを運用環境に迅速に再デプロイできます。 コパ酢酸は、Linux OS の脆弱性に対してのみ使用されます。 アプリ レベルの脆弱性の場合は、イメージをビルドする前に修正プログラムを実行する必要があります。

コパ酢酸を使用する

  1. コパ酢酸の クイック スタート ガイド に従って、脆弱性スキャンの結果を利用してコンテナー イメージにパッチを適用する手順を示します。

  2. コパ酢酸を 使用するためのサンプル Azure DevOps パイプライン構成ファイルのサンプル ADO パイプライン を確認します。 パイプラインは、コパ酢酸を CI/CD ワークフローに統合するように設計されており、コンテナー イメージの継続的な監視、スキャン、および脆弱性の修正プログラムの適用を可能にします。

  3. また、コパ酢酸を Github Actions ワークフローに統合して、コパ酢酸アクションを使用して画像の脆弱性にパッチを適用することもできます。 このアクションは、関連する脆弱性レポートを使用して、リポジトリの指定されたイメージのセットにパッチを適用します。

次のステップ