En este documento se explica cómo habilitar la API Container Scanning, enviar una imagen a Artifact Registry y ver la lista de vulnerabilidades encontradas en la imagen.
Artifact Analysis almacena información sobre vulnerabilidades como notas. Se crea una ocurrencia por cada instancia de una nota asociada a una imagen. Consulta los documentos de información general y precios para obtener más información.
Antes de empezar
- Crea un repositorio de Docker en Artifact Registry y envía una imagen de contenedor con tu código npm al repositorio. Si no estás familiarizado con Artifact Registry, consulta la guía de inicio rápido de Docker.
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 las vulnerabilidades de tus imágenes en Artifact Registry mediante la Google Cloud consola, la CLI de Google Cloud o la API Container Analysis. Si una imagen tiene vulnerabilidades, puedes obtener los detalles.
El análisis de artefactos sigue analizando imágenes y paquetes siempre que se hayan extraído en los últimos 30 días. Transcurridos 30 días, los metadatos de las imágenes y los paquetes analizados dejarán de actualizarse y los resultados estarán obsoletos.
Análisis de artefactos archiva los metadatos que no se han actualizado en más de 90 días. Estos metadatos archivados solo se pueden evaluar mediante la API. Puedes volver a escanear una imagen con metadatos obsoletos o archivados extrayendo esa imagen. La actualización de los metadatos puede tardar hasta 24 horas. Los paquetes con metadatos obsoletos o archivados no se pueden volver a analizar.
Ver las incidencias en la consola 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 digest de imagen se muestran en la columna Vulnerabilidades.
Para ver la lista de vulnerabilidades de una imagen, haga clic en el enlace de la columna Vulnerabilidades.
En la sección Resultados del análisis se muestra un resumen de los tipos de paquetes analizados, el número total de vulnerabilidades, las vulnerabilidades con correcciones disponibles, las vulnerabilidades sin correcciones y la gravedad efectiva.
En la tabla de vulnerabilidades se indica el nombre de la lista Common Vulnerabilities and Exposures (CVE) de cada vulnerabilidad detectada, la gravedad efectiva, la puntuación del sistema de puntuación Common Vulnerability Scoring System (CVSS), las correcciones (si están disponibles), el nombre del paquete que contiene la vulnerabilidad y el tipo de paquete.
La consolaGoogle Cloud muestra hasta 1200 vulnerabilidades por página en esta tabla. Puedes filtrar y ordenar estos archivos para consultar un archivo, un directorio, una capa o un tipo de archivo específico por extensión de archivo.
Para obtener información sobre una CVE específica, haz clic en su nombre.
Para ver los detalles de la vulnerabilidad, como el número de versión y la ubicación afectada, en la fila con el nombre de la vulnerabilidad, haz clic en Ver o en Ver corregido. El texto del enlace es Ver para las vulnerabilidades sin corrección y Ver corregidas para las vulnerabilidades en las que se ha aplicado una corrección.
Ver las vulnerabilidades de una capa específica
Artifact Analysis proporciona metadatos específicos de las capas para ayudarte a identificar qué paquete contiene vulnerabilidades y qué comando de compilación de Docker introdujo esa capa.
Para ver los metadatos de vulnerabilidades basados en capas en la consola, sigue estos pasos: Google Cloud
En Artifact Registry, abre la lista de repositorios.
En la página Repositorios, haz clic en un repositorio.
En la página Repository Details (Detalles del repositorio), haz clic en una imagen.
En la lista de versiones de la imagen, haz clic en un resumen de la imagen.
En la página de detalles del resumen de la imagen, haga clic en la pestaña Vulnerabilidades.
Cuando hay metadatos basados en capas disponibles, Análisis de artefactos muestra una lista de capas seleccionables en la barra Capa:
Para ver la lista de capas, haz clic en el menú desplegable de capas.
Se abrirá una lista desplegable con una lista numerada de capas. La capa 0 representa la capa inferior, y cada capa siguiente se basa en la capa anterior. Solo se muestran las capas en las que se han encontrado vulnerabilidades.
En cada capa, Análisis de artefactos muestra el comando de Docker que se ha usado para crearla y el número de vulnerabilidades encontradas en ella.
Para obtener más información sobre las vulnerabilidades de una capa específica, selecciona una capa de la lista de capas.
La tabla de vulnerabilidades se actualiza para mostrar solo las vulnerabilidades encontradas en la capa seleccionada. Puedes aplicar más filtros o investigar vulnerabilidades específicas.
Haga clic en VER o VER CORRECCIÓN junto a una vulnerabilidad para ver información más detallada sobre ella.
En el panel lateral Detalles de la vulnerabilidad se muestran las ubicaciones de los archivos en los que los paquetes tienen vulnerabilidades.
En la tabla Ubicación de los archivos, coloque el cursor sobre el signo de interrogación para abrir los metadatos de la capa adicional.
En un cuadro de diálogo se muestra el índice de la capa, el comando de compilación de la capa, el digest de la capa y la imagen base en la que puedes corregir la vulnerabilidad.
Ver las incidencias con gcloud
Para ver las ocurrencias de las imágenes en Artifact Registry, ejecuta el comando
gcloud artifacts docker images list:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Donde:
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el Google Cloud ID del proyecto de la consola.
- 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 puede especificar una etiqueta de imagen con este comando.
De forma predeterminada, el comando devuelve los 10 resultados más recientes. Para mostrar un número diferente de resultados, usa la marca --show-occurrences-from.
Por ejemplo, el siguiente comando devuelve los 25 resultados más recientes:
gcloud artifacts docker images list --show-occurrences-from=25 \
us-central1-docker.pkg.dev/my-project/my-repo/my-image
La salida tiene un aspecto similar al siguiente:
Ejemplo de salida de imagen
{
"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 ocurrencias de vulnerabilidades
Para filtrar las incidencias de vulnerabilidades, usa el parámetro --occurrence-filter:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID \
--occurrence-filter=FILTER_EXPRESSION
Donde:
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el Google Cloud ID del proyecto de la consola.
- 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 ejemplo con el formato que se explica en Filtrar incidencias de vulnerabilidades.
Ver las vulnerabilidades de una capa específica
Puedes usar el campo layerDetails para determinar qué capa específica ha introducido un paquete vulnerable y para ver información adicional sobre esa capa. Por ejemplo, echa un vistazo a la siguiente salida de layerDetails para una imagen:
"layerDetails": {
"index": 0,
"diffID": "sha256:123",
"buildCommand": "FROM golang:example_sha256",
"BaseImages": [
{
"name": "library/golang",