Compartilhar via


Guia de início rápido: atualize e proteja dependências de imagem de contêiner com Dependabot e Copacetic

Neste guia de início rápido, você será apresentado às etapas necessárias para configurar o Dependabot e o Copacetic, que o ajudarão a automatizar as atualizações de dependência de software e reforçar a segurança das imagens de contêiner em um ambiente seguro da cadeia de suprimentos. Usando essas ferramentas, você pode garantir que suas imagens de contêiner estejam sempre atualizadas e seguras.

Neste guia de início rápido, você aprende a:

  • Atualize as dependências e a segurança da imagem de contêiner usando o Dependabot.
    • O Dependabot automatiza o processo de manter as dependências das imagens do contêiner atualizadas, reduzindo o risco de vulnerabilidades.
  • Monitore, digitalize e corrija continuamente imagens de contêiner usando o Copacetic.
    • A Copacetic fornece monitoramento e varredura contínuos de suas imagens de contêiner, garantindo que elas estejam seguras e corrigidas contra vulnerabilidades conhecidas.

Pré-requisitos

Atualizar dependências e segurança de imagem de contêiner usando Dependabot

O Dependabot é uma ferramenta que automatiza o processo de manter as dependências de software atualizadas. Ele funciona verificando seu repositório em busca de dependências desatualizadas e criando solicitações pull para atualizá-las para a versão mais recente. Ele verifica se há atualizações para suas dependências diariamente e cria solicitações pull para atualizá-las. Você pode configurar o Dependabot para criar solicitações pull para todos os tipos de dependências, incluindo imagens do Docker. Recomendamos o uso do dependabot para aumentar automaticamente as dependências em seus arquivos Dockerfiles, arquivos yaml do Kubernetes e arquivos yaml de valores do gráfico Helm para obter os patches de segurança mais recentes e reduzir os riscos de segurança.

Usar o Dependabot com o GitHub

Siga as orientações e recomendações para gerenciar com eficiência as solicitações pull geradas pelo Dependabot, usar as Ações do GitHub para melhorar o desempenho do Dependabot e solucionar erros comuns do Dependabot.

  • Configure o Dependabot com o GitHub aqui.

Usar o Dependabot com o Azure DevOps

Siga as instruções para configurar o Dependabot com o Azure DevOps, garantindo que suas dependências de imagem de contêiner permaneçam atualizadas com as versões mais recentes e os aprimoramentos de segurança.

  1. Conceder Permissões: Crie uma conta de serviço com o nome YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME) e conceda-lhe as seguintes permissões:
  • Forçar Push
  • Colaborar para solicitações de pull
  • Criar branch

* Localize as permissões do serviço Build.*

Certifique-se de substituir YOUR-PROJECT-NAME e YOUR-ORGANIZATION-NAME com os nomes reais do seu projeto e organização.

  1. Configurar o Dependabot: Para configurar o Dependabot, adicione um dependabot.yml arquivo de configuração ao seu repositório. Aqui está um exemplo de como seu arquivo de configuração pode parecer:

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

Essa configuração configura o Dependabot para um projeto que usa o Docker, especificando que o diretório raiz ("/") é onde os arquivos do Docker estão localizados e atribuindo o Dependabot para manipular as atualizações. Você pode personalizar a configuração para atender às necessidades do seu projeto.

  1. Criar um Pipeline de DevOps do Azure: para criar um Pipeline de DevOps do Azure, adicione um azure-pipeline.yml arquivo ao seu repositório com o seguinte conteúdo:

     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. Executar o pipeline: crie e verifique o novo pipeline ADO a partir do arquivo acima azure-pipelines.yaml .

O Dependabot pode atualizar dependências de imagem de contêiner em vários cenários, como:

  • Dockerfile
  • Kubernetes YAML
  • Valores de leme.yaml

Observação

A sintaxe permite que o Dependabot identifique e atualize as dependências de imagem de contêiner dentro de seus arquivos de configuração, garantindo que você permaneça atualizado com as versões mais recentes e os patches de segurança.

Ao especificar imagens em seus arquivos de configuração, use a seguinte sintaxe:


# 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

Como alternativa, para Helm values.yaml, você pode usar o version campo para especificar a versão da imagem:

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

Monitore, digitalize e corrija continuamente imagens de contêiner usando o Copacetic

Copacetic (copa) é um projeto de código aberto CNCF apoiado pela Microsoft que corrige diretamente vulnerabilidades do pacote do sistema operacional Linux em imagens de contêiner, dados os resultados da varredura de vulnerabilidades de ferramentas de scanner populares. O Copacetic permite corrigir contêineres rapidamente sem ir a montante para uma reconstrução completa. Isso ajudará as imagens do contêiner a serem reimplantadas rapidamente na produção. Copacetic é apenas para vulnerabilidades do sistema operacional Linux. Para vulnerabilidades no nível do aplicativo, os patches devem ser feitos antes que a imagem seja criada.

Use Copacetic

  1. Siga o guia de início rápido para Copacetic fornece instruções para corrigir imagens de contêiner utilizando resultados de verificação de vulnerabilidade.

  2. Analise o Pipeline ADO de Exemplo para obter um arquivo de configuração de pipeline do Azure DevOps de exemplo para usar o Copacetic. O pipeline foi projetado para integrar o Copacetic ao seu fluxo de trabalho de CI/CD, permitindo o monitoramento contínuo, a varredura e a aplicação de patches de imagens de contêiner em busca de vulnerabilidades.

  3. O Copacetic também pode ser integrado aos fluxos de trabalho do Github Actions para corrigir vulnerabilidades de imagem usando o Copacetic Action. Essa ação corrige um conjunto de imagens designadas para um repositório usando seus relatórios de vulnerabilidade associados.

Próximas etapas