Neste documento, você vai aprender a ativar a API Container Scanning, enviar uma imagem para o Artifact Registry e conferir a lista de vulnerabilidades encontradas na imagem.
O Artifact Analysis fornece informações sobre vulnerabilidade das imagens de contêiner no Artifact Registry e no Container Registry (descontinuado). Os metadados são armazenados como [notas][notes]. Uma ocorrência é criada para cada instância de nota associada a uma imagem. Consulte os documentos de visão geral e preços para mais informações.
A ativação dessa API também ativa a verificação de pacotes de linguagem no Artifact Registry. Confira os tipos de pacotes compatíveis.
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.
-
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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
-
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 do Docker no Artifact Registry e envie uma imagem de contêiner para o repositório. Se você não estiver familiarizado com o Artifact Registry, consulte o Guia de início rápido do Docker.
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.
O total de vulnerabilidades de cada resumo de imagem é exibido 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, 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 consoleGoogle Cloud mostra até 1.200 vulnerabilidades nessa 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 ver 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.
- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o Google Cloud ID do projeto.
- 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.
- HOSTNAME é o nome do host multirregional:
gcr.io
asia.gcr.io
eu.gcr.io
us.gcr.io
- PROJECT_ID é o ID do projeto que contém as imagens.
- IMAGE_ID é o ID da imagem com as vulnerabilidades que você quer ver. Não é possível especificar uma tag de imagem com esse comando.
- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o Google Cloud ID do projeto.
- 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.
- HOSTNAME é o nome do host multirregional:
gcr.io
asia.gcr.io
eu.gcr.io
us.gcr.io
- PROJECT_ID é o ID do projeto que contém as imagens.
- IMAGE_ID é o ID da imagem com as vulnerabilidades que você quer ver.
- HASH é o resumo da imagem.
- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o Google Cloud ID do projeto.
- 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 Filtrar ocorrências de vulnerabilidades.
- HOSTNAME é o nome do host multirregional:
gcr.io
asia.gcr.io
eu.gcr.io
us.gcr.io
- PROJECT_ID é o ID do projeto que contém as imagens.
- IMAGE_ID é o ID da imagem com as ocorrências de vulnerabilidades que você quer ver.
- FILTER_EXPRESSION é uma expressão de filtro de amostra no formato explicado em Filtrar ocorrências de vulnerabilidades.
- NOTE_KIND é o tipo de nota.
- Por exemplo, use o tipo
DISCOVERY
para listar ocorrências de descoberta. Elas são criadas para imagens no momento em que são enviadas por push para o Container Registry. - Para listar as ocorrências de vulnerabilidade, use o tipo
VULNERABILITY
.
- Por exemplo, use o tipo
-
RESOURCE_URL é o URL completo da imagem
https://HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
- RESOURCE_URL_PREFIX é o prefixo de URL para algumas imagens
- Para listar todas as versões de uma imagem:
https://HOSTNAME/PROJECT_ID/IMAGE_ID@
- Para listar todas as imagens em um projeto:
https://HOSTNAME/PROJECT_ID/
- Para listar todas as versões de uma imagem:
- PROVIDER_PROJECT_ID é o código do projeto provedor. Por
exemplo,
goog-vulnz
fornece a análise de vulnerabilidade padrão. - NOTE_ID é o código da nota. As notas relacionadas à segurança costumam ter o formato
CVE-2019-12345
. -
RESOURCE_URL é o URL completo da imagem
https://HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
Use as notificações do Pub/Sub para receber informações sobre vulnerabilidades e outros metadados.
Crie atestados integrando o Artifact Analysis com a autorização binária para impedir que imagens de contêiner com problemas de segurança conhecidos sejam executadas no seu ambiente de implantação.
Ver 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 do sistema no contêiner.
É possível conferir as ocorrências de vulnerabilidade das suas imagens no registro 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.
O Artifact Analysis só atualiza os metadados de imagens enviadas ou extraídas nos últimos 30 dias. Após 30 dias, os metadados não serão mais atualizados, e os resultados vão ficar desatualizados. Além disso, o Artifact Analysis arquiva metadados que estão desatualizados há mais de 90 dias, e eles não ficam disponíveis no console Google Cloud , na gcloud ou usando a API. Para verificar novamente uma imagem com metadados desatualizados ou arquivados, extraia essa imagem. A atualização dos metadados pode levar até 24 horas.
Ver ocorrências no console do Google Cloud
Para ver as vulnerabilidades em uma imagem:
Conferir ocorrências usando o gcloud
Para ver ocorrências para uma imagem:
Artifact Registry
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Em que:
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
Container Registry
gcloud beta container images list-tags \
HOSTNAME/PROJECT_ID/IMAGE_ID
Em que:
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, este comando retorna as 25 imagens mais recentes.
gcloud beta container images list-tags --show-occurrences-from=25 \
gcr.io/my-project/my-image
Para ver vulnerabilidades de uma tag de imagem ou camada:
Artifact Registry
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:
Container Registry
gcloud beta container images describe HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH \
--show-package-vulnerability
Em que:
Para filtrar as ocorrências de vulnerabilidades:
Artifact Registry
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID --occurrence-filter=FILTER_EXPRESSION
Em que:
Container Registry
gcloud beta container images list-tags \
HOSTNAME/PROJECT_ID/IMAGE_ID --occurrence-filter=FILTER_EXPRESSION
Em que:
Ver ocorrências usando a API ou o código
Para ver as ocorrências de uma imagem, use o snippet adequado. Os snippets de código especificam URLs para imagens no Container Registry. Se você estiver usando o Artifact Registry, especifique imagens com um URL no formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
API
Como usar cURL
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 receber 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 do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Java.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Go.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Node.js.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ruby
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Ruby.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Python.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ver ocorrências 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 Google Cloud console.
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 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.
Ver ocorrências de descoberta
Quando uma imagem é inicialmente enviada para o Container Registry, ele cria uma ocorrência de descoberta que contém informações sobre a verificação inicial da imagem do contêiner.
Para recuperar a ocorrência de descoberta de uma imagem, use a seguinte expressão de filtro:
kind="DISCOVERY" AND resourceUrl="RESOURCE_URL"
O snippet a seguir mostra como usar uma expressão de filtro para ver ocorrências de descoberta para uma imagem. Os snippets de código especificam URLs para imagens no Container Registry. Se você estiver usando o Artifact Registry, especifique imagens com um URL no formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
gcloud
Para ver as ocorrências descobertas de uma imagem:
Nesse caso, a expressão não é usada diretamente no comando, mas as mesmas informações são passadas 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
Container Registry:
gcloud beta container images list-tags \
--occurrence-filter='kind="DISCOVERY"' --format=json HOSTNAME/PROJECT_ID/IMAGE_ID
API
Para recuperar a ocorrência da descoberta, a expressão de filtro precisa ser codificada por URL
e incorporada a uma solicitação GET
da seguinte maneira:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22DISCOVERY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
Consulte o endpoint da API
projects.occurrences.get
para mais detalhes.
Java
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Java.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Go.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Node.js.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ruby
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Ruby.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Python.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ver ocorrências de vulnerabilidade
Para visualizar todas as ocorrências de vulnerabilidade de uma imagem específica, crie uma consulta com uma expressão de filtro:
kind="VULNERABILITY" AND resourceUrl="RESOURCE_URL"
O snippet a seguir mostra como recuperar uma lista de ocorrências de vulnerabilidade de uma imagem. Os snippets de código especificam URLs para imagens no Container Registry. Se você estiver usando o Artifact Registry, especifique imagens com um URL no formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
gcloud
Para ver todas as ocorrências de vulnerabilidade de uma imagem:
Nesse caso, a expressão não é usada diretamente no comando, mas as mesmas informações são passadas 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
Container Registry
gcloud beta container images list-tags \
--occurrence-filter='kind="VULNERABILITY"' --format=json HOSTNAME/PROJECT_ID/IMAGE_ID
API
O URL do recurso precisa ser codificado por URL e incorporado em uma solicitação GET da seguinte maneira:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
Consulte o endpoint da API
projects.occurrences.get
para mais detalhes.
Java
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Java.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Go.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Node.js.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ruby
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Ruby.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente do Artifact Analysis, consulte Bibliotecas de cliente da Análise de artefatos. Para mais informações, consulte a documentação de referência da API Artifact Analysis Python.
Para autenticar no Artifact Analysis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Como visualizar 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
esse campo para limitar a lista de ocorrências a um tipo específico, como uma
vulnerabilidade ou implantação.
Para recuperar ocorrências de uma imagem específica, use esta expressão de filtro:
kind="NOTE_KIND" AND resourceUrl="RESOURCE_URL"
Em que:
A expressão de filtro usada para recuperar ocorrências de um tipo específico em várias imagens é:
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
Em que:
Ver imagens associadas a uma nota específica
É possível recuperar uma lista de recursos associados a um código 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:
noteProjectId="PROVIDER_PROJECT_ID" AND noteId="NOTE_ID"
Para verificar uma imagem específica de uma determinada nota, use a seguinte expressão de filtro:
resourceUrl="RESOURCE_URL" AND noteProjectId="PROVIDER_PROJECT_ID" \ AND noteId="NOTE_ID"
Em que:
Por exemplo, para verificar todas as imagens que têm uma ocorrência de CVE-2017-16231 conforme analisado pelo Google, use a seguinte expressão de filtro:
noteProjectId="goog-vulnz" AND noteId="CVE-2017-16231"