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 Visão geral e Preços para mais informações.
Antes de começar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Crie um repositório do Docker no Artifact Registry e envie uma imagem de contêiner
com seu código Java para o repositório. Se você não conhece o
Artifact Registry, consulte o
Guia de início rápido do Docker.
Para saber como usar o Cloud Build para criar e conteinerizar seus aplicativos Java, consulte Criar, testar e conteinerizar aplicativos Java.
O Artifact Analysis não verifica automaticamente as imagens existentes. Para verificar uma imagem existente, é necessário enviá-la novamente.
Conferir as vulnerabilidades da imagem
O Artifact Analysis verifica as novas imagens quando elas são enviadas para o Artifact Registry. Essa verificação extrai informações sobre os pacotes no contêiner.
É possível conferir as ocorrências de vulnerabilidade das suas imagens no Artifact Registry usando o console do Google Cloud, a Google Cloud CLI ou a API Container Analysis. Se uma imagem tiver vulnerabilidades, você poderá conferir os detalhes.
O Artifact Analysis só atualiza os metadados de imagens enviadas ou extraídas nos últimos 30 dias. O Artifact Analysis arquiva metadados com mais de 30 dias.Para verificar novamente uma imagem com metadados arquivados, extraia essa imagem. A atualização de metadados pode levar até 24 horas.
Conferir ocorrências no console do Google Cloud
Para conferir as vulnerabilidades de uma imagem:
Confira a lista de repositórios.
Na lista de repositórios, clique em um repositório.
Na lista de imagens, clique no nome de uma imagem.
Os totais de vulnerabilidades de cada resumo de imagem são exibidos na coluna Vulnerabilidades.
Para ver a lista de vulnerabilidades de uma imagem, clique no link na coluna Vulnerabilidades.
A seção Resultados da verificação mostra um resumo dos tipos de pacote verificados, o total de vulnerabilidades, as vulnerabilidades com correções disponíveis, as vulnerabilidades sem correções e a gravidade efetiva.
A tabela de vulnerabilidades lista o nome das 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 do pacote.
É possível filtrar e classificar esses arquivos para verificar um arquivo, diretório ou tipo de arquivo específico por extensão.
O console do Google Cloud mostra até 1.200 vulnerabilidades nesta tabela. Se a imagem tiver mais de 1.200 vulnerabilidades, use a gcloud ou a API para conferir a lista completa.
Para detalhes sobre uma CVE específica, clique no nome dela.
Para conferir detalhes da ocorrência da vulnerabilidade, como o número da versão e o local afetado, clique em Visualizar ou Visualizar correção na linha com o nome da vulnerabilidade. O texto do link é View para vulnerabilidades sem correção e View Fixed para vulnerabilidades em que uma correção foi aplicada.
Conferir ocorrências usando o gcloud
Para conferir as 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
Em que:
- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu console do Google Cloud.
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
IMAGE_ID é o nome da imagem no repositório. Não é possível especificar uma tag de imagem com esse comando.
Por padrão, o comando retorna as 10 imagens mais recentes. Para mostrar um número diferente de imagens, use a flag
--show-occurrences-from
. Por exemplo, o comando a seguir retorna 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 tag de imagem ou 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
Em que:
- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu console do Google Cloud.
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
- IMAGE_ID é o nome da imagem no repositório.
- TAG é a tag da imagem que tem as informações que você quer receber.
HASH é o resumo da imagem.
Artifact Analysis retorna 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
Em que:
- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu console do Google Cloud.
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
- IMAGE_ID é o nome da imagem no repositório.
- FILTER_EXPRESSION é uma expressão de filtro de amostra no formato explicado em Como filtrar ocorrências de vulnerabilidades.
Conferir 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 conferir 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
Conferir vulnerabilidades no Cloud Build
Se você estiver usando o Cloud Build, também poderá conferir as vulnerabilidades da imagem no painel lateral Insights de segurança no console do Google Cloud.
O painel lateral Insights de segurança fornece uma visão geral de alto nível das informações de segurança do build para artefatos armazenados no Artifact Registry. Para saber mais sobre o painel lateral e como usar o Cloud Build para ajudar a proteger sua cadeia de suprimentos de software, consulte Acessar insights de segurança do build.
Filtrar ocorrências
É possível usar 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.
Conferir 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 demonstram como filtrar as ocorrências de implantaçã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
Em que:
DEPLOYMENT
é o tipo de ocorrência.- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do console do Google Cloud.
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
- IMAGE_ID é o nome da imagem no repositório.
API
Na consulta da API, use a seguinte expressão de filtro:
kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"
Em que:
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
.
Você pode usar a função hasPrefix
para filtrar com um escopo mais amplo.
Por exemplo, os filtros a seguir são para ocorrências de um tipo específico em várias imagens:
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 uma imagem, omita o resumo de imagem. Use o formato:
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@
- Para filtrar todas as imagens em um projeto, especifique apenas o local do recurso e o projeto. Use o formato:
https://LOCATION-docker.pkg.dev/PROJECT_ID/
- Para filtrar todas as versões de uma imagem, omita o resumo de imagem. Use o formato:
Conferir ocorrências de vulnerabilidade
Para recuperar uma lista de ocorrências de vulnerabilidade de uma imagem, você 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
Em que:
VULNERABILITY
é o tipo de ocorrência.- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do console do Google Cloud.
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
- IMAGE_ID é o nome da imagem no repositório.
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
.
Filtrar por tipo de pacote
Para limitar os resultados da verificação 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
Em que:
VULNERABILITY
é o tipo de ocorrência.- PACKAGE_TYPE é o tipo de pacote de linguagem do aplicativo.
Os tipos disponíveis são:
COMPOSER
,GO
,MAVEN
,NPM
,NUGET
,PYTHON
,RUBYGEMS
eRUST
. - LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu console do Google Cloud.
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
- IMAGE_ID é o nome da imagem no repositório. Não é possível especificar uma tag de imagem com esse comando.
Conferir 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
gcloud artifacts docker images list /
--show-occurrences /
--occurrence-filter='noteProjectId="goog-vulnz" AND noteId="NOTE_ID"' /
LOCATION-docker.pkg.dev/PROJECT_ID
Em que:
goog-vulnz
é oPROVIDER_PROJECT_ID
para a análise de vulnerabilidade do Artifact Analysis. Se você estiver usando Artifact Analysis em um projeto personalizado, substitua esse valor pelo ID do projeto do seu provedor.- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do console do Google Cloud.
- NOTE_ID é o código da nota. Por exemplo, quando você encontra uma
vulnerabilidade nos resultados da verificação do Artifact Analysis, ela geralmente
usa a
formatação de ID de 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
Em que:
goog-vulnz
é oPROVIDER_PROJECT_ID
para a análise de vulnerabilidade do Artifact Analysis. Se você estiver usando 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ê encontra uma
vulnerabilidade nos resultados da verificação do Artifact Analysis, ela geralmente
usa a
formatação de ID de CVE semelhante a
CVE-2019-12345
.
Para verificar uma imagem específica de uma determinada nota, 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 é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do console do Google Cloud.
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
- IMAGE_ID é o nome da imagem no repositório. Não é possível especificar uma tag de imagem com esse comando.
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 da imagem no formato
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH
. goog-vulnz
é oPROVIDER_PROJECT_ID
para a análise de vulnerabilidade do Artifact Analysis. Se você estiver usando Artifact Analysis em um projeto personalizado, substitua esse valor pelo ID do projeto do seu provedor.- NOTE_ID é o código da nota. As notas relacionadas à segurança costumam
ter o formato
CVE-2019-12345
.
A seguir
Use as notificações do Pub/Sub para receber notificações sobre vulnerabilidades e outros metadados.
O Kritis Signer e o Voucher permitem criar atestados de autorização binária como parte do pipeline de build. Essas ferramentas podem criar atestados de autorização binária com base nos resultados da verificação de vulnerabilidades. Para mais informações, consulte Como criar atestados com o Kritis Signer ou Como criar atestados com o Voucher.