Verificar pacotes automaticamente

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

O Artifact Analysis armazena informações de vulnerabilidade como notas. Uma ocorrência é criada para cada instância de uma nota associada a uma imagem. Consulte os documentos de visão geral e 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the Artifact Registry and Container Scanning APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  10. Enable the Artifact Registry and Container Scanning APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. Crie um repositório no Artifact Registry e envie um pacote com o código do aplicativo para ele. Se você não estiver familiarizado com o gerenciamento de pacotes no Artifact Registry, consulte os seguintes tópicos:
    1. Armazenar pacotes Java no Artifact Registry
    2. Armazenar pacotes Node.js no Artifact Registry
    3. Armazenar pacotes do Python no Artifact Registry

Ao ativar essa API, você também ativa a verificação de pacotes de linguagens no Artifact Registry. Confira os tipos de pacotes compatíveis.

Ver as vulnerabilidades do pacote

O Artifact Analysis verifica novos pacotes quando eles são enviados para o Artifact Registry. Essa verificação extrai informações sobre o pacote e as dependências dele.

É possível conferir as ocorrências de vulnerabilidade das suas imagens no Artifact Registry usando o console Google Cloud , a Google Cloud CLI ou a API Container Analysis. Os detalhes das vulnerabilidades das imagens também estarão disponíveis, caso haja alguma.

Artifact Analysis continua verificando imagens e pacotes desde que eles tenham sido extraídos nos últimos 30 dias. Após 30 dias, os metadados das imagens e pacotes verificados não serão mais atualizados, e os resultados ficarão desatualizados.

O Artifact Analysis arquiva metadados que estão desatualizados há mais de 90 dias. Esses metadados arquivados só podem ser avaliados usando a API. É possível verificar novamente uma imagem com metadados desatualizados ou arquivados extraindo essa imagem. A atualização dos metadados pode levar até 24 horas. Não é possível fazer uma nova verificação de pacotes com metadados desatualizados ou arquivados.

Ver ocorrências no console do Google Cloud

Para ver as vulnerabilidades em um pacote:

  1. Confira a lista de repositórios.

    Abrir a página Repositórios

  2. Na lista de repositórios, clique em um deles.

  3. Na lista de pacotes, clique em um nome de pacote.

    O total de vulnerabilidades de cada pacote é exibido na coluna Vulnerabilidades.

    Um pacote verificado com vulnerabilidades

  4. Para ver a lista de vulnerabilidades de um pacote, clique no link na coluna Vulnerabilidades.

    A seção Resultados da verificação mostra um resumo dos tipos de pacotes verificados, o total de vulnerabilidades, as vulnerabilidades com correções disponíveis, as vulnerabilidades sem correções e a gravidade efetiva.

    A página de resultados da verificação lista vulnerabilidades, correções e gravidade efetiva.

    A tabela de vulnerabilidades lista o nome de Vulnerabilidades e Exposições Comuns (CVE, na sigla em inglês) de cada vulnerabilidade encontrada, a gravidade efetiva, a pontuação do Sistema de Pontuação de Vulnerabilidade Comum (CVSS, na sigla em inglês), as correções (quando disponíveis), o nome do pacote que contém a vulnerabilidade e o tipo de pacote. É possível filtrar e classificar esses arquivos para verificar um arquivo, diretório ou tipo específico por extensão. O console do Google Cloud mostra até 1.200 vulnerabilidades por página nessa tabela.

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

  6. Para conferir detalhes da ocorrência de vulnerabilidade, como número da versão e local afetado, clique em Ver ou Ver corrigido na linha com o nome da vulnerabilidade. O texto do link é Ver para vulnerabilidades sem correção e Ver corrigidas para vulnerabilidades em que uma correção foi aplicada.

Conferir ocorrências usando o gcloud

Para ver as ocorrências de pacotes no Artifact Registry, execute o comando gcloud artifacts versions describe:

gcloud artifacts versions describe VERSION \
    --location=LOCATION --repository=REPOSITORY --package=PACKAGE --show-package-vulnerability

Em que:

  • VERSION é a versão do pacote para o qual você está visualizando ocorrências.
  • LOCATION é o local regional ou multirregional do repositório.
  • REPOSITORY é o nome do repositório em que o pacote está armazenado.
  • PACKAGE é o nome do pacote no repositório. Não é possível especificar uma tag de pacote com esse comando.

Ver ocorrências usando a API

Para ver uma lista de ocorrências no 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 ver um resumo das vulnerabilidades no 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 de 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

Filtrar ocorrências

É possível usar as strings de filtro nos comandos gcloud e na API Artifact Analysis para filtrar ocorrências antes de visualizá-las. Veja a descrição dos filtros de pesquisa compatíveis nas seções a seguir.

Como visualizar ocorrências de um tipo específico

Use o valor kind para filtrar por tipo de ocorrência. Consulte os tipos disponíveis.

Os exemplos a seguir mostram como filtrar ocorrências de vulnerabilidade de pacote:

gcloud

A filtragem de ocorrências não é compatível com a Google Cloud CLI para verificação baseada em pacotes.

API

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

kind="PACKAGE_VULNERABILITY" AND resourceUrl="RESOURCE_URL"

Em que:

  • PACKAGE_VULNERABILITY é o tipo de ocorrência.
  • RESOURCE_URL é o URL completo do pacote no formato projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID/packages/PACKAGE_ID/PACKAGE_TYPE/VERSION_ID:
    • PROJECT_ID é o ID do projeto do seu Google Cloud console.
    • LOCATION é o local regional ou multirregional do repositório.
    • REPOSITORY é o nome do repositório em que a imagem está armazenada.
    • PACKAGE_ID é o nome do pacote em que a imagem está armazenada.
    • PACKAGE_TYPE é o tipo de pacote de idioma do aplicativo. Os tipos disponíveis são: pythonPackages, mavenArtifacts e npmPackages.
    • VERSION é o número da versão do pacote.

Use a função hasPrefix para filtrar com um escopo mais amplo.

Por exemplo, os filtros a seguir para ocorrências de um tipo específico em várias versões do mesmo pacote:

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

Em que:

  • RESOURCE_URL_PREFIX especifica uma substring de um URL de recurso.
    • Para filtrar todas as versões de um pacote, omita a versão. Use o formato:projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID
    • Para filtrar todos os pacotes em um projeto, especifique apenas o local do recurso e o projeto. Use o formato: projects/PROJECT_ID/locations/LOCATION

Ver ocorrências de vulnerabilidade

É possível conferir listas de ocorrências de vulnerabilidade usando a CLI gcloud ou a API Artifact Analysis.

gcloud

Para recuperar uma lista de ocorrências de vulnerabilidade de um pacote, use a flag --show-package-vulnerability:

gcloud artifacts versions describe VERSION_ID --repository=REPOSITORY_ID
  --package=GROUP_ID:ARTIFACT_ID --show-package-vulnerability

Em que:

  • VERSION é o número da versão do pacote.
  • REPOSITORY é o nome do repositório em que o pacote está armazenado.
  • GROUP_ID é o identificador do grupo do seu pacote.
  • ARTIFACT_ID é o identificador do artefato do seu pacote.

API

Na 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

Em que:

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

Para mais informações sobre como usar a API, consulte projects.occurrences.get.

Ver imagens associadas a uma nota específica

É possível recuperar uma lista de recursos associados a um ID de nota específico. Por exemplo, é possível listar imagens com uma vulnerabilidade CVE específica.

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

gcloud

A filtragem de ocorrências não é compatível com a Google Cloud CLI para verificação baseada em pacotes.

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

Em que:

  • goog-vulnz é o PROVIDER_PROJECT_ID para a análise de vulnerabilidades do Artifact Analysis. Se você estiver usando o Artifact Analysis em um projeto personalizado, substitua esse valor pelo ID do projeto do seu provedor.
  • ENCODED_RESOURCE_URL é o caminho codificado para a imagem. Para saber mais sobre codificação, consulte Codificação de URL.
  • NOTE_ID é o código da nota. Por exemplo, quando você vê uma vulnerabilidade nos resultados da verificação do Artifact Analysis, ela geralmente usa a formatação de ID da CVE semelhante a CVE-2019-12345.

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

gcloud

A filtragem de ocorrências não é compatível com a Google Cloud CLI para verificação baseada em pacotes.

API

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

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

Em que:

  • RESOURCE_URL é o URL completo do pacote no formato projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY_ID/packages/PACKAGE_ID/PACKAGE_TYPE/VERSION_ID.
  • goog-vulnz é o PROVIDER_PROJECT_ID para a análise de vulnerabilidades do Artifact Analysis.
  • NOTE_ID é o código da nota. As notas relacionadas à segurança costumam ter o formato CVE-2019-12345.

A seguir