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
- 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.
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - 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.
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 continua a analisar imagens e pacotes desde que tenham sido extraídos nos últimos 30 dias. Após 30 dias, os metadados das imagens e dos pacotes digitalizados deixam de ser atualizados, e os resultados ficam desatualizados.
A análise de artefactos arquiva metadados desatualizados há mais de 90 dias. Estes metadados arquivados só podem ser avaliados através da API. Pode voltar a analisar uma imagem com metadados desatualizados ou arquivados ao extrair essa imagem. A atualização dos metadados pode demorar até 24 horas. Não é possível voltar a analisar pacotes com metadados desatualizados ou arquivados.
Veja ocorrências na Google Cloud consola
Para ver as vulnerabilidades numa imagem:
Obtenha a lista de repositórios.
Na lista de repositórios, clique num repositório.
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.
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.
A tabela de vulnerabilidades apresenta o nome das vulnerabilidades e exposições comuns (CVE) para cada vulnerabilidade encontrada, a gravidade efetiva, a pontuação do sistema de pontuação de vulnerabilidades comuns (CVSS), as correções (quando disponíveis), o nome do pacote que contém a vulnerabilidade e o tipo de pacote.
AGoogle Cloud consola apresenta até 1200 vulnerabilidades por página nesta tabela. Pode filtrar e ordenar estes ficheiros para verificar um ficheiro específico, diretório, camada ou tipo de ficheiro por extensão do ficheiro.
Para ver detalhes sobre uma CVE específica, clique no nome da CVE.
Para ver detalhes da ocorrência de vulnerabilidades, como o número da versão e a localização afetada, na linha com o nome da vulnerabilidade, clique em Ver ou Ver corrigido. O texto do link é Ver para vulnerabilidades sem uma correção e Ver corrigido para vulnerabilidades às quais foi aplicada uma correção.
Veja vulnerabilidades numa camada específica
A análise de artefactos fornece metadados específicos da camada para ajudar a identificar que pacote contém vulnerabilidades e que comando de compilação do Docker introduziu essa camada.
Para ver os metadados de vulnerabilidade baseados em camadas na Google Cloud consola:
No Artifact Registry, abra a lista de repositórios.
Na página Repositórios, clique num repositório.
Na página Detalhes do repositório, clique numa imagem.
Na lista de versões de imagens, clique num resumo de imagens.
Na página de detalhes do resumo da imagem, clique no separador Vulnerabilidades.
Quando os metadados baseados em camadas estão disponíveis, a análise de artefactos mostra uma lista selecionável de camadas na barra Camada:
Para ver a lista de camadas, clique no menu pendente de camadas.
É apresentada uma lista pendente com uma lista numerada de camadas. A camada 0 representa a camada inferior, com cada camada seguinte a basear-se na camada anterior. Só são apresentadas as camadas onde foram encontradas vulnerabilidades.
Para cada camada, a análise de artefactos mostra o comando Docker usado para criar a camada e o número de vulnerabilidades encontradas nessa camada.
Para saber mais sobre as vulnerabilidades numa camada específica, selecione uma camada na lista de camadas.
A tabela de vulnerabilidades é atualizada para mostrar apenas as vulnerabilidades encontradas na camada selecionada. Pode aplicar mais filtros ou investigar vulnerabilidades específicas.
Clique em VER ou VER CORREÇÃO junto a uma vulnerabilidade para ver informações mais detalhadas sobre a mesma.
O painel lateral Detalhes da vulnerabilidade mostra as localizações dos ficheiros onde os pacotes têm vulnerabilidades.
Na tabela Localizações dos ficheiros, passe o cursor do rato sobre o ponto de interrogação para abrir metadados de camadas adicionais.
Uma caixa de diálogo apresenta o índice da camada, o comando de compilação da camada, o resumo da camada e a imagem base onde pode corrigir a vulnerabilidade.
Veja ocorrências através do gcloud
Para ver ocorrências de imagens no Artifact Registry, execute o comando
gcloud artifacts docker images list:
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 os 10 resultados mais recentes. Para mostrar um número diferente de resultados, use a flag --show-occurrences-from.
Por exemplo, o seguinte comando devolve os 25 resultados mais recentes:
gcloud artifacts docker images list --show-occurrences-from=25 \
us-central1-docker.pkg.dev/my-project/my-repo/my-image
O resultado tem um aspeto semelhante ao seguinte:
Exemplo de saída de imagem
{
"name": "projects/my-project/locations/us-central1/occurrences/22d3edfb-34f2-4d3f-be08-fd90c549f010",
"resource": {
"uri": "https://us-central1-docker.pkg.dev/my-project/my-repo/golang-nginx@sha256:5b54ef20748417ccdb0b87afedf98c44e699e2f59bd6cv48cbdc1ca2e72c80e3"
},
"noteName": "projects/my-project/locations/us-central1/notes/CVE-2005-2541",
"kind": "VULNERABILITY",
"createTime": "2025-01-21T15:57:01.238832Z",
"updateTime": "2025-01-21T15:57:01.238832Z",
"vulnerability": {
"severity": "CRITICAL",
"cvssScore": 10,
"packageIssue": [
{
"affectedLocation": {
"cpeUri": "cpe:/o:debian:debian_linux:12",
"package": "tar",
"version": {
"name": "1.34+dfsg",
"revision": "1.2+deb12u1",
"kind": "NORMAL"
}
},
"fixedLocation": {
"cpeUri": "cpe:/o:debian:debian_linux:12",
"package": "tar",
"version": {
"kind": "MAXIMUM"
}
},
"packageType": "OS",
"effectiveSeverity": "LOW",
"file_location": [
{
"file_path": "/var/lib/dpkg/status",
"layerDetails": {
"index": 0,
"diffID": "sha256:123",
"buildCommand": "FROM golang:example_sha256",
"BaseImages": [
{
"name": "library/golang",
},
],
},
},
],
}
],
"shortDescription": "CVE-2005-2541",
"longDescription": "NIST vectors: AV:N/AC:L/Au:N/C:C/I:C/A:C",
"relatedUrls": [
{
"url": "https://security-tracker.debian.org/tracker/CVE-2005-2541",
"label": "More Info"
}
],
"effectiveSeverity": "LOW",
"cvssVersion": "CVSS_VERSION_2",
"cvssV2": {
"baseScore": 10,
"attackVector": "ATTACK_VECTOR_NETWORK",
"attackComplexity": "ATTACK_COMPLEXITY_LOW",
"authentication": "AUTHENTICATION_NONE",
"confidentialityImpact": "IMPACT_COMPLETE",
"integrityImpact": "IMPACT_COMPLETE",
"availabilityImpact": "IMPACT_COMPLETE"
}
}
}
Filtre ocorrências de vulnerabilidades
Para filtrar ocorrências de vulnerabilidades, use o parâmetro --occurrence-filter:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
--occurrence-filter=FILTER_EXPRESSION
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.
- FILTER_EXPRESSION é uma expressão de filtro de exemplo no formato explicado em Filtrar ocorrências de vulnerabilidades.
Veja vulnerabilidades de uma camada específica
Pode usar o campo layerDetails para determinar que camada específica introduziu um pacote vulnerável e para ver informações adicionais sobre essa camada. Por exemplo, considere a seguinte saída layerDetails para uma imagem:
"layerDetails": {
"index": 0,
"diffID": "sha256:123",
"buildCommand": "FROM golang:example_sha256",
"BaseImages": [
{
"name": "library/golang",
},
],
}
O resultado mostra que o índice da camada é 0 na imagem,
com um hash da camada de sha256:123.
O comando de compilação do Docker usado para compilar esta camada é
FROM golang:example_sha256, e a camada também se encontra na imagem de base
library/golang.
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 receber 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 das informações de segurança de compilação para artefactos armazenados no Artifact Registry. Para saber mais acerca do painel lateral e como pode usar o Cloud Build para ajudar a proteger a sua cadeia de fornecimento de software, consulte Ver 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 vulnerabilidades de pacotes:
gcloud
Na CLI gcloud, execute o seguinte:
gcloud artifacts docker images list --show-occurrences \
--occurrence-filter='kind="PACKAGE_VULNERABILITY"' --format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Onde:
PACKAGE_VULNERABILITYé o tipo de ocorrência.- 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.
API
Na consulta da API, use a seguinte expressão de filtro:
kind="PACKAGE_VULNERABILITY" 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_ID/IMAGE@sha256:HASH:- 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.
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 versões do mesmo pacote:
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/
- Para filtrar todas as versões de uma imagem, omita o resumo da imagem. Use o formato:
Veja ocorrências de vulnerabilidades
Pode ver listas de ocorrências de vulnerabilidades através da CLI gcloud ou da API Artifact Analysis.
gcloud
Para obter uma lista de ocorrências de vulnerabilidades para uma imagem, pode filtrar
pelo VULNERABILITY tipo de ocorrência:
gcloud artifacts docker images list \
--show-occurrences \
--occurrence-filter='kind="VULNERABILITY"' \
--format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Onde:
VULNERABILITYé o tipo de ocorrência.- 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.
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
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,RUBYGEMSeRUST. - 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 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é oPROVIDER_PROJECT_IDpara 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é oPROVIDER_PROJECT_IDpara 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
http://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/IMAGE@sha256:HASH. goog-vulnzé oPROVIDER_PROJECT_IDpara a análise de vulnerabilidades da Artifact Analysis.- NOTE_ID é o ID da nota. As notas relacionadas com a segurança são, muitas vezes, 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.
O Kritis Signer e o Voucher permitem-lhe criar atestações de autorização binária como parte do seu pipeline de compilação. Estas ferramentas podem criar atestações de autorização binária com base nos resultados da análise de vulnerabilidades. Para mais informações, consulte os artigos Criar atestações com o Kritis Signer ou Criar atestações com o Voucher.