Neste documento, vai aprender a 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 fornece informações sobre vulnerabilidades para as imagens de contentores no Artifact Registry. Os metadados são armazenados 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.enable
permission. 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. 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.enable
permission. 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 para o repositório. Se não conhece o Artifact Registry, consulte o início rápido do Docker.
A ativação desta API também ativa a análise de pacotes de idiomas no Artifact Registry. Consulte os tipos de pacotes suportados.
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 do sistema no contentor.
Pode ver as ocorrências de vulnerabilidades das suas imagens no registo através da consola Google Cloud , da Google Cloud CLI 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:
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 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 de ficheiro. Google Cloud A Play Console apresenta até 1200 vulnerabilidades por página nesta tabela.
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, 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 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 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
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" } } }
Veja vulnerabilidades de uma etiqueta de imagem
Para ver vulnerabilidades de uma etiqueta de imagem, introduza um dos seguintes comandos:
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
.
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",
},
],
}
A saída mostra que o índice da camada é 0
na imagem do contentor,
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 ou do código
Para ver ocorrências de uma imagem, especifique imagens com um URL no seguinte formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
API
Usar o cURL
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
Java
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API JavaArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API GoArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Node.jsArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Ruby
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API RubyArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API PythonArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Veja ocorrências 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 descoberta
Quando uma imagem é inicialmente enviada para o Artifact Registry, o Artifact Registry cria uma ocorrência de deteção, que contém informações sobre a análise inicial da imagem do contentor.
Para obter a ocorrência de descoberta de uma imagem, use a seguinte expressão de filtro:
kind="DISCOVERY" AND resourceUrl="RESOURCE_URL"
Onde RESOURCE_URL tem o seguinte formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
gcloud
Veja as ocorrências de descoberta de uma imagem:
Neste caso, a expressão não é usada diretamente no comando, mas as mesmas informações são transmitidas como argumentos:
Artifact Registry:
gcloud artifacts docker images list --show-occurrences \
--occurrence-filter='kind="DISCOVERY"' --format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
API
Para obter a ocorrência de descoberta, a expressão de filtro tem de ser codificada em URL e incorporada num pedido GET
da seguinte forma:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22DISCOVERY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
Consulte o
projects.occurrences.get
ponto final da API para ver mais detalhes.
Java
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API JavaArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API GoArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Node.jsArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Ruby
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API RubyArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API PythonArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Veja ocorrências de vulnerabilidades
Para ver as ocorrências de vulnerabilidades de uma imagem específica, crie uma consulta com uma expressão de filtro:
kind="VULNERABILITY" AND resourceUrl="RESOURCE_URL"
Onde RESOURCE_URL tem o seguinte formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
gcloud
Neste caso, a expressão não é usada diretamente no comando, mas as mesmas informações são transmitidas como argumentos:
Artifact Registry
gcloud artifacts docker images list --show-occurrences \
--occurrence-filter='kind="VULNERABILITY"' --format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
API
O URL do recurso tem de ter codificação URL e estar incorporado num pedido GET da seguinte forma:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
Consulte o
projects.occurrences.get
ponto final da API para ver mais detalhes.
Java
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API JavaArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API GoArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API Node.jsArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Ruby
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API RubyArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente para a análise de artefactos, consulte o artigo Bibliotecas de cliente da análise de artefactos. Para mais informações, consulte a documentação de referência da API PythonArtifact Analysis.
Para se autenticar na Análise de artefactos, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Veja ocorrências de um tipo específico
Nos dois exemplos anteriores, a única diferença entre as expressões de filtro é o valor de kind
, que identifica o tipo de ocorrência. Use este campo para limitar a lista de ocorrências a um tipo específico, como uma vulnerabilidade ou uma implementação.
Para obter ocorrências de uma imagem específica, use esta expressão de filtro:
kind="NOTE_KIND" AND resourceUrl="RESOURCE_URL"
Onde:
- NOTE_KIND é o
tipo de nota.
- Por exemplo, use o tipo
DISCOVERY
para listar ocorrências de descoberta. As ocorrências de descoberta são criadas para imagens quando são inicialmente enviadas para o Artifact Registry. - Para listar ocorrências de vulnerabilidades, use o tipo
VULNERABILITY
.
- Por exemplo, use o tipo
-
RESOURCE_URL é o URL completo da imagem
https://HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
A expressão de filtro para obter 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 é o prefixo de URL de algumas imagens
- Para listar todas as versões de uma imagem:
https://HOSTNAME/PROJECT_ID/IMAGE_ID@
- Para listar todas as imagens num projeto:
https://HOSTNAME/PROJECT_ID/
- Para listar todas as versões de uma imagem:
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:
noteProjectId="PROVIDER_PROJECT_ID" AND noteId="NOTE_ID"
Para verificar uma imagem específica para uma nota específica, use a seguinte expressão de filtro:
resourceUrl="RESOURCE_URL" AND noteProjectId="PROVIDER_PROJECT_ID" \ AND noteId="NOTE_ID"
Onde:
- PROVIDER_PROJECT_ID é o ID do projeto do fornecedor. Por exemplo, o
goog-vulnz
fornece a análise de vulnerabilidades predefinida. - NOTE_ID é o ID da nota. As notas relacionadas com a segurança são, muitas vezes, formatadas como
CVE-2019-12345
. -
RESOURCE_URL é o URL completo da imagem
https://HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
Por exemplo, para verificar todas as imagens que têm uma ocorrência de CVE-2017-16231, conforme analisado pela Google, use a seguinte expressão de filtro:
noteProjectId="goog-vulnz" AND noteId="CVE-2017-16231"
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.