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
- 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
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 informações sobre como usar o Cloud Build para criar e colocar em contêineres seus aplicativos Go, consulte Criar aplicativos Go.
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 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 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
- 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.
- TAG é a tag da imagem que tem as informações que você quer receber.
HASH é o resumo da imagem.
O Artifact Analysis retorna resultados, incluindo o
packageType
.- 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.
- FILTER_EXPRESSION é uma expressão de filtro de amostra no formato explicado em Filtrar ocorrências de vulnerabilidades.
DEPLOYMENT
é o tipo de ocorrência.- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu console Google Cloud .
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
- IMAGE_ID é o nome da imagem no repositório.
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
. - RESOURCE_URL_PREFIX especifica uma substring de um URL de recurso.
- Para filtrar todas as versões de uma imagem, omita o resumo dela. 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 dela. Use o formato:
VULNERABILITY
é o tipo de ocorrência.- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu console Google Cloud .
- REPOSITORY é o nome do repositório em que a imagem está armazenada.
- IMAGE_ID é o nome da imagem no repositório.
- ENCODED_RESOURCE_URL é o caminho codificado para a imagem. Para saber mais sobre codificação, consulte Codificação de URL.
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
,RUBYGEMS
eRUST
. - 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.
goog-vulnz
é oPROVIDER_PROJECT_ID
para 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.- LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu console Google Cloud .
- 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
. goog-vulnz
é oPROVIDER_PROJECT_ID
para 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 a imagem. Para saber 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
. - LOCATION é o local regional ou multirregional do repositório.
- PROJECT_ID é o ID do projeto do seu console 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.
- 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 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.- NOTE_ID é o código da nota. As notas relacionadas à segurança costumam ter o formato
CVE-2019-12345
. 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 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. 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 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:
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:
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:
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 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
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 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.
Como visualizar 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 ocorrências de implantação para 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:
API
Na consulta da API, use a seguinte expressão de filtro:
kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"
Em que:
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 imagens:
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
Em que:
Ver ocorrências de vulnerabilidade
Para recuperar uma lista de ocorrências de vulnerabilidade de uma imagem, filtre 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:
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:
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:
Ver 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:
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:
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
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: