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
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloudagora, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
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, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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 contêiner
com seu código Go 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 contêinerizar seus aplicativos Go, consulte Criar aplicativos Go.
Funções exigidas
Para receber as permissões necessárias para ver os resultados da verificação de pacotes, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
- Agente de serviço do Container Scanner (
roles/containerscanning.ServiceAgent) - Leitor de ocorrências do Container Analysis (
roles/containeranalysis.occurrences.viewer) - Leitor de notas do Container Analysis (
roles/containeranalysis.notes.viewer) - Leitor do Artifact Registry (
roles/artifactregistry.reader)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Ver as vulnerabilidades da imagem
O Artifact Analysis verifica 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 Google Cloud , a Google Cloud CLI ou a API Container Analysis. Se uma imagem tiver vulnerabilidades, você poderá acessar os detalhes.
O Artifact Analysis continua verificando imagens e pacotes desde que eles tenham sido extraídos nos últimos 30 dias. Após 30 dias, os metadados de 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 verificar novamente pacotes com metadados desatualizados ou arquivados.
Ver ocorrências no console do Google Cloud
Para ver as vulnerabilidades em uma imagem:
Confira a lista de repositórios.
Na lista de repositórios, clique em um deles.
Na lista de imagens, clique no nome de uma imagem.
Os totais de vulnerabilidades para cada resumo de imagem são mostrados 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 pacotes 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 de Vulnerabilidades e Exposições Comuns (CVE) de cada vulnerabilidade encontrada, a gravidade efetiva, a pontuação do Sistema de Pontuação de Vulnerabilidade Comum (CVSS), as correções (quando disponíveis), o nome do pacote que contém a vulnerabilidade e o tipo de pacote.
O console doGoogle Cloud mostra até 1.200 vulnerabilidades por página nessa tabela. É possível filtrar e classificar esses arquivos para verificar um arquivo, diretório, camada ou tipo específico por extensão de arquivo.
Para detalhes sobre uma CVE específica, clique no nome dela.
Para conferir detalhes da ocorrência de vulnerabilidade, como número da versão e local afetado, na linha com o nome da vulnerabilidade, clique em Ver ou Ver corrigido. O texto do link é Ver para vulnerabilidades sem correção e Ver corrigidas para vulnerabilidades em que uma correção foi aplicada.
Ver vulnerabilidades em uma camada específica
O Artifact Analysis fornece metadados específicos da camada para ajudar a identificar qual pacote contém vulnerabilidades e qual comando de build do Docker introduziu essa camada.Para conferir os metadados de vulnerabilidade com base em camadas no Google Cloud console:
No Artifact Registry, abra sua lista de repositórios.
Na página Repositórios, clique em um repositório.
Na página Detalhes do repositório, clique em uma imagem.
Na lista de versões de imagem, clique em um resumo de imagem.
Na página de detalhes do resumo da imagem, clique na guia Vulnerabilidades.
Quando os metadados baseados em camadas estão disponíveis, o Artifact Analysis mostra uma lista selecionável de camadas na barra Camada:
Para ver a lista de camadas, clique no menu suspenso de camadas.
Uma lista suspensa é aberta, mostrando uma lista numerada de camadas. A camada 0 representa a camada inferior, e cada camada seguinte é criada com base na anterior. Somente as camadas em que vulnerabilidades foram encontradas são mostradas.
Para cada camada, o Artifact Analysis mostra o comando do Docker usado para criar a camada e o número de vulnerabilidades encontradas nela.
Para saber mais sobre as vulnerabilidades em uma camada específica, selecione uma camada na lista.
A tabela de vulnerabilidades é atualizada para mostrar apenas as vulnerabilidades encontradas na camada selecionada. É possível aplicar mais filtros ou investigar vulnerabilidades específicas.
Clique em VER ou VER CORREÇÃO ao lado de uma vulnerabilidade para conferir informações mais detalhadas sobre ela.
O painel lateral Detalhes da vulnerabilidade mostra os locais dos arquivos em que os pacotes têm vulnerabilidades.
Na tabela Locais dos arquivos, passe o cursor sobre o ponto de interrogação para abrir metadados adicionais da camada.
Uma caixa de diálogo mostra o índice da camada, o comando de build da camada, o resumo da camada e a imagem de base em que você pode corrigir a vulnerabilidade.
Ver ocorrências usando a gcloud
Para ver as 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
Em que:
- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu Google Cloud console.
- 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 os 10 resultados mais recentes. Para mostrar um
número diferente de resultados, use a flag --show-occurrences-from.
Por exemplo, o comando a seguir retorna 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
A saída é semelhante a:
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"
}
}
}
Filtrar ocorrências de vulnerabilidade
Para filtrar ocorrências de vulnerabilidade, 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
Em que:
- 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.
- FILTER_EXPRESSION é um exemplo de expressão de filtro no formato explicado em Como filtrar ocorrências de vulnerabilidade.
Ver vulnerabilidades de uma camada específica
Use o campolayerDetails para determinar qual camada específica
introduziu um pacote vulnerável e para ver mais informações
sobre essa camada. Por exemplo, considere a seguinte saída de 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,
com um hash de camada de sha256:123.
O comando de build do Docker usado para criar essa camada é
FROM golang:example_sha256, e a camada também é encontrada na
imagem de base library/golang.
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 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
Ver vulnerabilidades no Cloud Build
Se você estiver usando o Cloud Build, também poderá conferir as vulnerabilidades de imagem no painel lateral Insights de segurança no console do Google Cloud .
O painel lateral Insights de segurança oferece uma visão geral de alto nível das informações de segurança de build para artefatos armazenados no Artifact Registry. Para saber mais sobre o painel lateral e como usar o Cloud Build para proteger sua cadeia de suprimentos de software, consulte Ver insights de segurança de 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.
Ver ocorrências de um tipo específico
É possível usar o valor kind para filtrar por tipo de ocorrência. Confira os tipos disponíveis.
Os exemplos a seguir demonstram como filtrar ocorrências de vulnerabilidade 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
Em que:
PACKAGE_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:
kind="PACKAGE_VULNERABILITY" 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_ID/IMAGE@sha256:HASH:- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu Google Cloud console.
- 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.
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 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 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 da imagem. Use o formato:
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 uma imagem, filtre pelo tipo de ocorrência VULNERABILITY:
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 sua imagem. Para Aprenda 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 idioma do aplicativo.
Os tipos disponíveis são:
COMPOSER,GO,MAVEN,NPM,NUGET,PYTHON,RUBYGEMSeRUST. - LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu Google Cloud console.
- 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.
Ver imagens associadas a uma nota específica
É possível recuperar uma lista de recursos associados a um ID de observação específico. Por exemplo, é possível listar imagens com uma vulnerabilidade de 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_IDpara a análise de vulnerabilidades 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 seu Google Cloud console.
- 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.
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_IDpara 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 sua imagem. Para Aprenda 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 em uma observação 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 é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu Google Cloud console.
- 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
http://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_ID/IMAGE@sha256:HASH. goog-vulnzé oPROVIDER_PROJECT_IDpara a análise de vulnerabilidades do Artifact Analysis.- NOTE_ID é o código da nota. As notas relacionadas à segurança geralmente são
formatadas como
CVE-2019-12345.
A seguir
Use as notificações do Pub/Sub para receber notificações sobre vulnerabilidades e outros metadados.
O Kritis Signer permite criar atestados de autorização binária como parte do seu pipeline de build. Essa ferramenta pode 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.