Analise automaticamente pacotes Java

Este documento explica como ativar a API Container Scanning, enviar uma imagem para o Artifact Registry e ver a lista de vulnerabilidades encontradas na imagem.

A análise de artefactos armazena informações de vulnerabilidade como notas. É criada uma ocorrência para cada instância de uma nota associada a uma imagem. Consulte a vista geral e os documentos de preços para mais informações.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry and Container Scanning APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  14. Crie um repositório Docker no Artifact Registry e envie uma imagem de contentor com o seu código Java para o repositório. Se não tiver experiência com o Artifact Registry, consulte o início rápido do Docker.

    Para obter informações sobre como pode usar o Cloud Build para criar e colocar em contentores as suas aplicações Java, consulte o artigo Crie, teste e coloque em contentores aplicações Java.
  15. Veja as vulnerabilidades das imagens

    A análise de artefactos analisa novas imagens quando são carregadas para o Artifact Registry. Esta análise extrai informações sobre os pacotes no contentor.

    Pode ver ocorrências de vulnerabilidades para as suas imagens no Artifact Registry através da Google Cloud consola, da CLI do Google Cloud ou da API Container Analysis. Se uma imagem tiver vulnerabilidades, pode obter os detalhes.

    A análise de artefactos só atualiza os metadados das imagens que foram enviadas por push ou extraídas nos últimos 30 dias. Após 30 dias, os metadados deixam de ser atualizados e os resultados ficam desatualizados. Além disso, a análise de artefactos arquiva metadados desatualizados há mais de 90 dias, e os metadados não ficam disponíveis na Google Cloud consola, no gcloud nem através da API. Para voltar a analisar uma imagem com metadados desatualizados ou arquivados, transfira essa imagem. A atualização dos metadados pode demorar até 24 horas.

    Veja ocorrências na Google Cloud consola

    Para ver as vulnerabilidades numa imagem:

    1. Obtenha a lista de repositórios.

      Abra a página Repositórios

    2. Na lista de repositórios, clique num repositório.

    3. Na lista de imagens, clique no nome de uma imagem.

      Os totais de vulnerabilidades para cada resumo de imagem são apresentados na coluna Vulnerabilidades.

      Captura de ecrã de uma imagem com vulnerabilidades

    4. Para ver a lista de vulnerabilidades de uma imagem, clique no link na coluna Vulnerabilidades.

      A secção Resultados da análise apresenta um resumo dos tipos de pacotes analisados, do total de vulnerabilidades, das vulnerabilidades com correções disponíveis, das vulnerabilidades sem correções e da gravidade efetiva.

      Captura de ecrã da secção Resultados da análise com vulnerabilidades, correções e gravidade efetiva

      A tabela de vulnerabilidades apresenta o nome de Vulnerabilidades e exposições comuns (CVE) de cada vulnerabilidade encontrada, a gravidade efetiva, a pontuação do Common Vulnerability Scoring System (CVSS), as correções (quando disponíveis), o nome do pacote que contém a vulnerabilidade e o tipo de pacote.

      Pode filtrar e ordenar estes ficheiros para verificar um ficheiro, um diretório ou um tipo de ficheiro específico por extensão do ficheiro.

      Google Cloud A consola apresenta até 1200 vulnerabilidades nesta tabela. Se a sua imagem tiver mais de 1200 vulnerabilidades, tem de usar o gcloud ou a API para ver a lista completa.

    5. Para ver detalhes sobre uma CVE específica, clique no nome da CVE.

    6. Para ver detalhes da ocorrência de vulnerabilidades, como o número da versão e a localização afetada, clique em Ver ou Ver corrigido na linha com o nome da vulnerabilidade. O texto do link é Ver para vulnerabilidades sem uma correção e Ver corrigido para vulnerabilidades às quais foi aplicada uma correção.

    Veja ocorrências através do gcloud

    Para ver ocorrências de uma imagem no Artifact Registry, execute o seguinte comando:

      gcloud artifacts docker images list --show-occurrences \
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Onde:

    • LOCATION é a localização regional ou multirregional do repositório.
    • PROJECT_ID é o Google Cloud ID do projeto da consola.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE_ID é o nome da imagem no repositório. Não pode especificar uma etiqueta de imagem com este comando.

      Por predefinição, o comando devolve as 10 imagens mais recentes. Para mostrar um número diferente de imagens, use a flag --show-occurrences-from. Por exemplo, o seguinte comando devolve as 25 imagens mais recentes.

      gcloud artifacts docker images list --show-occurrences-from=25 \
          us-central1-docker.pkg.dev/my-project/my-repo/my-image
      

    Para ver vulnerabilidades de uma etiqueta de imagem ou uma camada:

      gcloud artifacts docker images describe \
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID:TAG \
          --show-package-vulnerability
    

    ou

      gcloud artifacts docker images describe \
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH \
          --show-package-vulnerability
    

    Onde:

    • LOCATION é a localização regional ou multirregional do repositório.
    • PROJECT_ID é o Google Cloud ID do projeto da consola.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE_ID é o nome da imagem no repositório.
    • TAG é a etiqueta de imagem sobre a qual quer obter informações.
    • HASH é o resumo da imagem.

      A análise de artefactos devolve resultados que incluem o packageType.

    Para filtrar as ocorrências de vulnerabilidades:

      gcloud artifacts docker images list --show-occurrences \
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
          --occurrence-filter=FILTER_EXPRESSION
    

    Onde:

    Veja ocorrências através da API

    Para obter uma lista de ocorrências no seu projeto:

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences
    

    Para obter um resumo das vulnerabilidades no seu projeto:

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences:vulnerabilitySummary
    

    Para ver detalhes sobre uma ocorrência específica:

     curl -X GET -H "Content-Type: application/json" -H \
        "Authorization: Bearer $(gcloud auth print-access-token)" \
        https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences/OCCURRENCE_ID
    

    Veja vulnerabilidades no Cloud Build

    Se estiver a usar o Cloud Build, também pode ver as vulnerabilidades de imagens no painel lateral Estatísticas de segurança na Google Cloud consola.

    O painel lateral Estatísticas de segurança oferece uma vista geral de alto nível das informações de segurança de compilação para artefactos armazenados no Artifact Registry. Para saber mais sobre o painel lateral e como pode usar o Cloud Build para ajudar a proteger a sua cadeia de fornecimento de software, consulte o artigo Veja informações de segurança da compilação.

    Filtre ocorrências

    Pode usar strings de filtro nos comandos gcloud e na API Artifact Analysis para filtrar ocorrências antes de as ver. As secções seguintes descrevem os filtros de pesquisa suportados.

    Veja ocorrências de um tipo específico

    Pode usar o valor kind para filtrar por tipo de ocorrência. Veja os tipos disponíveis.

    Os exemplos seguintes demonstram como filtrar ocorrências de implementação de uma imagem:

    gcloud

    Na CLI gcloud, execute o seguinte:

    gcloud artifacts docker images list --show-occurrences \
        --occurrence-filter='kind="DEPLOYMENT"' --format=json \
        LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Onde:

    API

    Na sua consulta da API, use a seguinte expressão de filtro:

    kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"

    Onde:

    • DEPLOYMENT é o tipo de ocorrência.
    • RESOURCE_URL é o URL completo da imagem no formato https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.

    Pode usar a função hasPrefix para filtrar com um âmbito mais amplo.

    Por exemplo, os seguintes filtros para ocorrências de um tipo específico em várias imagens:

    kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")

    Onde:

    • RESOURCE_URL_PREFIX especifica uma substring de um URL de recurso.
      • Para filtrar todas as versões de uma imagem, omita o resumo da imagem. Use o formato: https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@
      • Para filtrar todas as imagens num projeto, especifique apenas a localização do recurso e o projeto. Use o formato: https://LOCATION-docker.pkg.dev/PROJECT_ID/

    Veja ocorrências de vulnerabilidades

    Para obter uma lista de ocorrências de vulnerabilidades para uma imagem, pode filtrar pelo tipo de ocorrência VULNERABILITY.

    gcloud

    Na CLI gcloud, execute o seguinte:

    gcloud artifacts docker images list \
        --show-occurrences \
        --occurrence-filter='kind="VULNERABILITY"' \
        --format=json \
        LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Onde:

    API

    Na sua consulta da API, use a seguinte expressão de filtro:

    GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22

    Onde:

    • ENCODED_RESOURCE_URL é o caminho codificado para a sua imagem. Para saber mais sobre a codificação, consulte o artigo Codificação URL.

    Para mais informações sobre a utilização da API, consulte projects.occurrences.get.

    Filtre por tipo de pacote

    Para limitar os resultados da análise de vulnerabilidades a um tipo de pacote, execute o seguinte comando da CLI gcloud:

      gcloud artifacts docker images list /
          --show-occurrences /
          --occurrence-filter='kind="VULNERABILITY" AND packageType="PACKAGE_TYPE"' /
          LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Onde:

    • VULNERABILITY é o tipo de ocorrência.
    • PACKAGE_TYPE é o tipo de pacote de idiomas da aplicação. Os tipos disponíveis são: COMPOSER, GO, MAVEN, NPM, NUGET, PYTHON, RUBYGEMS e RUST.
    • LOCATION é a localização regional ou multirregional do repositório.
    • PROJECT_ID é o Google Cloud ID do projeto da consola.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE_ID é o nome da imagem no repositório. Não pode especificar uma etiqueta de imagem com este comando.

    Veja imagens associadas a uma nota específica

    Pode obter uma lista de recursos associados a um ID de nota específico. Por exemplo, pode listar imagens com uma vulnerabilidade CVE específica.

    Para apresentar uma lista de todas as imagens num projeto que estão associadas a uma nota específica, use a seguinte expressão de filtro:

    gcloud

    gcloud artifacts docker images list /
        --show-occurrences /
        --occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
        LOCATION-docker.pkg.dev/PROJECT_ID
    

    Onde:

    • goog-vulnz é o PROVIDER_PROJECT_ID para a análise de vulnerabilidades da Artifact Analysis. Se estiver a usar a análise de artefactos num projeto personalizado, pode substituir este valor pelo ID do seu próprio projeto de fornecedor.
    • LOCATION é a localização regional ou multirregional do repositório.
    • PROJECT_ID é o Google Cloud ID do projeto da consola.
    • NOTE_ID é o ID da nota. Por exemplo, quando vê uma vulnerabilidade nos resultados da análise de artefactos, utiliza frequentemente a formatação do ID CVE semelhante a CVE-2019-12345.

    API

    GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=noteProjectId%3D%22goog-vulnz%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22%20AND%20noteId%3D%22NOTE_ID%22

    Onde:

    • goog-vulnz é o PROVIDER_PROJECT_ID para a análise de vulnerabilidades da Artifact Analysis. Se estiver a usar a análise de artefactos num projeto personalizado, pode substituir este valor pelo ID do seu próprio projeto de fornecedor.
    • ENCODED_RESOURCE_URL é o caminho codificado para a sua imagem. Para saber mais sobre a codificação, consulte o artigo Codificação URL.
    • NOTE_ID é o ID da nota. Por exemplo, quando vê uma vulnerabilidade nos resultados da análise de artefactos, utiliza frequentemente a formatação do ID CVE semelhante a CVE-2019-12345.

    Para verificar uma imagem específica para uma nota específica, use a seguinte expressão de filtro:

    gcloud

    gcloud artifacts docker images list /
        --show-occurrences /
        --occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
        LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
    

    Onde

    • LOCATION é a localização regional ou multirregional do repositório.
    • PROJECT_ID é o Google Cloud ID do projeto da consola.
    • REPOSITORY é o nome do repositório onde a imagem está armazenada.
    • IMAGE_ID é o nome da imagem no repositório. Não pode especificar uma etiqueta de imagem com este comando.

    API

    Na sua consulta da API, adicione a seguinte expressão de filtro:

    resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \
    AND noteId="NOTE_ID"

    Onde:

    • RESOURCE_URL é o URL completo da imagem no formato https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH.
    • goog-vulnz é o PROVIDER_PROJECT_ID para a análise de vulnerabilidades da Artifact Analysis. Se estiver a usar a análise de artefactos num projeto personalizado, pode substituir este valor pelo ID do seu próprio projeto de fornecedor.
    • NOTE_ID é o ID da nota. As notas relacionadas com a segurança são frequentemente formatadas como CVE-2019-12345.

    O que se segue?

    • Use as notificações do Pub/Sub para receber notificações sobre vulnerabilidades e outros metadados.

    • Crie atestações integrando a análise de artefactos com a autorização binária para impedir a execução de imagens de contentores com problemas de segurança conhecidos no seu ambiente de implementação.