En este documento, se explica cómo habilitar la API de Container Scanning, enviar una imagen a Artifact Registry y ver la lista de vulnerabilidades que se encuentran en la imagen.
Artifact Analysis almacena la información de vulnerabilidades como notas. Se crea un caso para cada instancia de una nota asociada con una imagen. Consulta los documentos de descripción general y precios para obtener más información.
Antes de comenzar
- 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.
-
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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Crea un repositorio de Docker en Artifact Registry y envía una imagen de contenedor con tu código de npm al repositorio. Si no estás familiarizado con Artifact Registry, consulta la guía de inicio rápido de Docker.
Artifact Analysis no analiza las imágenes existentes de forma automática. Para que lo haga, debes volver a enviarlas.
Cómo ver las vulnerabilidades de la imagen
Artifact Analysis analiza las imágenes nuevas cuando se suben a Artifact Registry. Este análisis extrae información sobre los paquetes del contenedor.
Puedes ver los casos de vulnerabilidad de tus imágenes en Artifact Registry mediante la consola de Google Cloud, Google Cloud CLI o la API de Container Analysis. Si una imagen tiene vulnerabilidades, puedes obtener los detalles.
Artifact Analysis solo actualiza los metadatos de las imágenes que se enviaron o extrajeron en los últimos 30 días. Artifact Analysis archiva los metadatos que tienen más de 30 días.Para volver a analizar una imagen con metadatos archivados, extrae esa imagen. La actualización de los metadatos puede tardar hasta 24 horas.
Cómo ver los incidentes en la consola de Google Cloud
Para ver las vulnerabilidades de una imagen, sigue estos pasos:
Obtén la lista de repositorios.
En la lista de repositorios, haz clic en uno.
En la lista de imágenes, haz clic en el nombre de una imagen.
Los totales de vulnerabilidades de cada resumen de imagen se muestran en la columna Vulnerabilidades.
Para ver la lista de vulnerabilidades de una imagen, haz clic en el vínculo de la columna Vulnerabilidades.
En la sección Resultados del análisis, se muestra un resumen de los tipos de paquetes analizados, el total de vulnerabilidades, las vulnerabilidades con correcciones disponibles, las vulnerabilidades sin correcciones y la gravedad efectiva.
En la tabla de vulnerabilidades, se enumera el nombre de las vulnerabilidades y exposiciones comunes (CVE) para cada vulnerabilidad encontrada, la gravedad efectiva, la puntuación del Sistema Común de Puntuación de Vulnerabilidades (CVSS), las correcciones (si están disponibles), el nombre del paquete que contiene la vulnerabilidad y el tipo de paquete.
Puedes filtrar y ordenar estos archivos para verificar un archivo, directorio o tipo de archivo específico por extensión.
La consola de Google Cloud muestra hasta 1,200 vulnerabilidades en esta tabla. Si tu imagen tiene más de 1,200 vulnerabilidades, debes usar gcloud o la API para ver la lista completa.
Para obtener detalles sobre un CVE específico, haz clic en su nombre.
Para ver los detalles de la ocurrencia de vulnerabilidades, como el número de versión y la ubicación afectada, haz clic en Ver o Ver corregido en la fila con el nombre de la vulnerabilidad. El texto del vínculo es Ver para las vulnerabilidades sin corregir y Ver corregida para las vulnerabilidades en las que se aplicó una corrección.
Cómo ver ocurrencias con gcloud
Para ver las ocurrencias de una imagen en Artifact Registry, ejecuta el siguiente comando:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Aquí:
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto de la consola de Google Cloud.
- REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
IMAGE_ID es el nombre de la imagen en el repositorio. No puedes especificar una etiqueta de imagen con este comando.
De forma predeterminada, el comando muestra las 10 imágenes más recientes. Para mostrar una cantidad diferente de imágenes, usa la marca
--show-occurrences-from
. Por ejemplo, el siguiente comando muestra las 25 imágenes más recientes.gcloud artifacts docker images list --show-occurrences-from=25 \ us-central1-docker.pkg.dev/my-project/my-repo/my-image
Para ver las vulnerabilidades de una etiqueta de imagen o una capa, sigue estos pasos:
gcloud artifacts docker images describe \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID:TAG \
--show-package-vulnerability
o
gcloud artifacts docker images describe \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH \
--show-package-vulnerability
Aquí:
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto de la consola de Google Cloud.
- REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
- IMAGE_ID es el nombre de la imagen en el repositorio.
- TAG es la etiqueta de imagen sobre la que deseas obtener información.
HASH es el resumen de la imagen.
Artifact Analysis muestra resultados que incluyen
packageType
.
Para filtrar los casos de vulnerabilidades, sigue estos pasos:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
--occurrence-filter=FILTER_EXPRESSION
Aquí:
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto de la consola de Google Cloud.
- REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
- IMAGE_ID es el nombre de la imagen en el repositorio.
- FILTER_EXPRESSION es una expresión de filtro de muestra con el formato que se explica en Filtrar casos de vulnerabilidades.
Cómo ver ocurrencias con la API
Para obtener una lista de los casos en tu proyecto, sigue estos pasos:
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 obtener un resumen de las vulnerabilidades de tu proyecto, sigue estos pasos:
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 obtener detalles sobre un evento específico, sigue estos pasos:
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
Cómo ver vulnerabilidades en Cloud Build
Si usas Cloud Build, también puedes ver las vulnerabilidades de las imágenes en el panel lateral Estadísticas de seguridad de la consola de Google Cloud.
El panel lateral Estadísticas de seguridad proporciona una descripción general de alto nivel de la información de seguridad de la compilación para los artefactos almacenados en Artifact Registry. Para obtener más información sobre el panel lateral y cómo puedes usar Cloud Build para proteger tu cadena de suministro de software, consulta Cómo ver estadísticas de seguridad de la compilación.
Cómo filtrar los casos
Puedes usar cadenas de filtro en los comandos de gcloud
y en la API de Artifact Analysis para filtrar los casos antes de verlos. En las siguientes secciones, se describen los filtros de búsqueda admitidos.
Cómo ver los casos de un tipo específico
Puedes usar el valor kind
para filtrar por tipo de ocurrencia. Consulta los tipos disponibles.
En los siguientes ejemplos, se muestra cómo filtrar las ocurrencias de implementación de una imagen:
gcloud
En gcloud CLI, ejecuta lo siguiente:
gcloud artifacts docker images list --show-occurrences \
--occurrence-filter='kind="DEPLOYMENT"' --format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Aquí:
DEPLOYMENT
es el tipo de ocurrencia.- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto de la consola de Google Cloud.
- REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
- IMAGE_ID es el nombre de la imagen en el repositorio.
API
En tu consulta a la API, usa la siguiente expresión de filtro:
kind="DEPLOYMENT" AND resourceUrl="RESOURCE_URL"
Aquí:
DEPLOYMENT
es el tipo de ocurrencia.- RESOURCE_URL es la URL completa de la imagen en el formato
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH
.
Puedes usar la función hasPrefix
para filtrar con un alcance más amplio.
Por ejemplo, los siguientes filtros se aplican a casos de un tipo específico en muchas imágenes:
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
Aquí:
- RESOURCE_URL_PREFIX especifica una subcadena de una URL de recurso.
- Para filtrar todas las versiones de una imagen, omite el resumen de la imagen. Usa el formato:
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@
- Para filtrar todas las imágenes de un proyecto, especifica solo la ubicación del recurso y el proyecto. Usa el formato:
https://LOCATION-docker.pkg.dev/PROJECT_ID/
- Para filtrar todas las versiones de una imagen, omite el resumen de la imagen. Usa el formato:
Visualiza los casos de vulnerabilidades
Para recuperar una lista de casos de vulnerabilidades de una imagen, puedes filtrar por el tipo de ocurrencia VULNERABILITY
.
gcloud
En gcloud CLI, ejecuta lo siguiente:
gcloud artifacts docker images list \
--show-occurrences \
--occurrence-filter='kind="VULNERABILITY"' \
--format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Aquí:
VULNERABILITY
es el tipo de ocurrencia.- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto de la consola de Google Cloud.
- REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
- IMAGE_ID es el nombre de la imagen en el repositorio.
API
En tu consulta a la API, usa la siguiente expresión de filtro:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
Aquí:
- ENCODED_RESOURCE_URL es la ruta codificada a tu imagen. Para obtener más información sobre la codificación, consulta Codificación de URLs.
Para obtener más información sobre el uso de la API, consulta
projects.occurrences.get
.
Filtrar por tipo de paquete
Para limitar los resultados del análisis de vulnerabilidades a un tipo de paquete, ejecuta el siguiente comando de gcloud CLI:
gcloud artifacts docker images list /
--show-occurrences /
--occurrence-filter='kind="VULNERABILITY" AND packageType="PACKAGE_TYPE"' /
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Aquí:
VULNERABILITY
es el tipo de ocurrencia.- PACKAGE_TYPE es el tipo de paquete de idioma de la aplicación.
Los tipos disponibles son
COMPOSER
,GO
,MAVEN
,NPM
,NUGET
,PYTHON
,RUBYGEMS
yRUST
. - LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto de la consola de Google Cloud.
- REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
- IMAGE_ID es el nombre de la imagen en el repositorio. No puedes especificar una etiqueta de imagen con este comando.
Cómo ver imágenes asociadas con una nota específica
Puedes recuperar una lista de recursos asociados con un ID de nota específico. Por ejemplo, puedes enumerar imágenes con una vulnerabilidad CVE específica.
Para enumerar todas las imágenes de un proyecto que están asociadas con una nota en particular, usa la siguiente expresión 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
Aquí:
goog-vulnz
es elPROVIDER_PROJECT_ID
para el análisis de vulnerabilidades de Artifact Analysis. Si usas Artifact Analysis en un proyecto personalizado, puedes reemplazar este valor por el ID de tu propio proyecto de proveedor.- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto de la consola de Google Cloud.
- NOTE_ID es el ID de la nota. Por ejemplo, cuando veas una vulnerabilidad en los resultados del análisis de Artifact Analysis, a menudo se usará un formato de ID de CVE similar 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
Aquí:
goog-vulnz
es elPROVIDER_PROJECT_ID
para el análisis de vulnerabilidades de Artifact Analysis. Si usas Artifact Analysis en un proyecto personalizado, puedes reemplazar este valor por el ID de tu propio proyecto de proveedor.- ENCODED_RESOURCE_URL es la ruta codificada a tu imagen. Para obtener más información sobre la codificación, consulta Codificación de URLs.
- NOTE_ID es el ID de la nota. Por ejemplo, cuando veas una vulnerabilidad en los resultados del análisis de Artifact Analysis, a menudo se usará un formato de ID de CVE similar a
CVE-2019-12345
.
Para verificar una imagen específica de una nota en particular, usa la siguiente expresión 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
Dónde
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto de la consola de Google Cloud.
- REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
- IMAGE_ID es el nombre de la imagen en el repositorio. No puedes especificar una etiqueta de imagen con este comando.
API
En tu consulta a la API, agrega la siguiente expresión de filtro:
resourceUrl="RESOURCE_URL" AND noteProjectId="goog-vulnz" \ AND noteId="NOTE_ID"
Aquí:
- RESOURCE_URL es la URL completa de la imagen en el formato
https://LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID@sha256:HASH
. goog-vulnz
es elPROVIDER_PROJECT_ID
para el análisis de vulnerabilidades de Artifact Analysis. Si usas Artifact Analysis en un proyecto personalizado, puedes reemplazar este valor por el ID de tu propio proyecto de proveedor.- NOTE_ID es el ID de la nota. Las notas relacionadas con la seguridad suelen tener el formato
CVE-2019-12345
.
¿Qué sigue?
Usa notificaciones de Pub/Sub para recibir notificaciones sobre vulnerabilidades y otros metadatos.
Kritis Signer y Voucher te permiten crear certificaciones de autorización binaria como parte de tu canalización de compilación. Estas herramientas pueden crear certificaciones de autorización binaria en función de los resultados del análisis de vulnerabilidades. Para obtener más información, consulta Crea certificaciones con Kritis Signer o Crea certificaciones con Voucher.