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 proporciona información sobre las vulnerabilidades de las imágenes de contenedor de Artifact Registry. Los metadatos se almacenan como notas. Se crea una ocurrencia por cada instancia de una nota asociada a una imagen. Consulta los documentos de descripción general y precios para obtener más información.
Si habilitas esta API, también se habilitará el análisis de paquetes de idiomas en Artifact Registry. Consulta los tipos de paquetes admitidos.
Antes de empezar
- 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry and Container Scanning APIs.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Crea un repositorio de Docker en Artifact Registry y envía una imagen de contenedor al repositorio. Si no estás familiarizado con Artifact Registry, consulta la guía de inicio rápido de Docker.
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.
Puedes filtrar y ordenar estos archivos para consultar un archivo, un directorio o un tipo de archivo específico por extensión.
Google Cloud La consola muestra hasta 1200 vulnerabilidades en esta tabla. Si tu imagen tiene más de 1200 vulnerabilidades, debes usar gcloud o la API para ver la lista completa.
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, haga clic en Ver o Ver corregido en la fila con el nombre de la vulnerabilidad. 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.
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto 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 devuelve las 10 imágenes más recientes. Para mostrar un número diferente de imágenes, usa la marca
--show-occurrences-from
. Por ejemplo, el siguiente comando devuelve 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
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto 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 quieres obtener información.
- HASH es el digest de la imagen.
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID de tu proyecto 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 ejemplo con el formato que se explica en Filtrar incidencias de vulnerabilidades.
- PROJECT_ID es el ID de tu proyecto Google Cloud .
- OCCURRENCE_ID es el nombre de la ocurrencia de la que quiere ver los detalles.
- LOCATION es la ubicación regional o multirregional del repositorio.
- REPOSITORY es el nombre de tu repositorio.
- PROJECT_ID es el ID de tu proyecto Google Cloud .
- IMAGE_ID es el ID de la imagen que contiene las apariciones que quieres ver.
- LOCATION es la ubicación regional o multirregional del repositorio.
- REPOSITORY es el nombre de tu repositorio.
- PROJECT_ID es el ID de tu proyecto Google Cloud .
- IMAGE_ID es el ID de la imagen que contiene las apariciones que quieres ver.
- NOTE_KIND es el tipo de nota.
- Por ejemplo, usa el tipo
DISCOVERY
para enumerar las detecciones. Artifact Analysis crea estos archivos para las imágenes cuando se envían inicialmente a Artifact Registry. - Para enumerar las incidencias de vulnerabilidades, usa el tipo
VULNERABILITY
.
- Por ejemplo, usa el tipo
-
RESOURCE_URL es la URL completa de la imagen.
https://HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
- RESOURCE_URL_PREFIX es el prefijo de URL de algunas imágenes.
- Para ver todas las versiones de una imagen, sigue estos pasos:
https://HOSTNAME/PROJECT_ID/IMAGE_ID@
- Para obtener una lista de todas las imágenes de un proyecto, haz lo siguiente:
https://HOSTNAME/PROJECT_ID/
- Para ver todas las versiones de una imagen, sigue estos pasos:
- PROVIDER_PROJECT_ID es el ID del proyecto del proveedor. Por ejemplo,
goog-vulnz
proporciona el análisis de vulnerabilidades predeterminado. - NOTE_ID es el ID de la nota. Las notas relacionadas con la seguridad suelen tener el formato
CVE-2019-12345
. -
RESOURCE_URL es la URL completa de la imagen.
https://HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
Usa las notificaciones de Pub/Sub para recibir notificaciones sobre vulnerabilidades y otros metadatos.
Crea atestaciones integrando Artifact Analysis con autorización binaria para evitar que se ejecuten en tu entorno de despliegue imágenes de contenedor con problemas de seguridad conocidos.
Ver las vulnerabilidades de las imágenes
Artifact Analysis analiza las imágenes nuevas cuando se suben a Artifact Registry. Este análisis extrae información sobre los paquetes del sistema del contenedor.
Puedes ver las vulnerabilidades de tus imágenes en el registro mediante la Google Cloud consola, la CLI de Google Cloud o la API Container Analysis. Si una imagen tiene vulnerabilidades, puedes obtener los detalles.
Análisis de artefactos solo actualiza los metadatos de las imágenes que se han insertado o extraído en los últimos 30 días. Transcurridos 30 días, los metadatos dejarán de actualizarse y los resultados estarán obsoletos. Además, Análisis de artefactos archiva los metadatos que no se han actualizado en más de 90 días, y estos no estarán disponibles en la consola de Google Cloud , gcloud ni mediante la API. Para volver a analizar una imagen con metadatos obsoletos o archivados, extrae esa imagen. La actualización de los metadatos puede tardar hasta 24 horas.
Ver las incidencias en la Google Cloud consola
Para ver las vulnerabilidades de una imagen, sigue estos pasos:
Ver las incidencias con gcloud
Para ver las apariciones de una imagen, sigue estos pasos:
En la CLI de gcloud, introduce lo siguiente:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Donde:
Para ver las vulnerabilidades de una etiqueta de imagen o una capa, sigue estos pasos:
En la CLI de gcloud, introduce lo siguiente:
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
Donde:
Para filtrar las incidencias de vulnerabilidades, haz lo siguiente:
En la CLI de gcloud, introduce lo siguiente:
gcloud artifacts docker images list --show-occurrences \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID --occurrence-filter=FILTER_EXPRESSION
Donde:
Ver las incidencias con la API o el código
Para ver las apariciones de una imagen, usa el código de muestra adecuado.
API
Usar cURL
Para obtener una lista de las ocurrencias 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
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 información sobre una incidencia concreta, haz lo siguiente:
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
Donde:
Java
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Go
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Node.js
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Ruby
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Python
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Ver las incidencias en Cloud Build
Si usas Cloud Build, también puedes ver las vulnerabilidades de las imágenes en el panel lateral Información de seguridad de la Google Cloud consola.
El panel lateral Estadísticas de seguridad ofrece una vista general de la información de seguridad de las compilaciones de 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 Ver información valiosa sobre la seguridad de las compilaciones.
Filtrar ocurrencias
Puede usar cadenas de filtro en los comandos gcloud
y en la API Artifact Analysis para filtrar las ocurrencias antes de verlas. En las siguientes secciones se describen los filtros de búsqueda admitidos.
Ver las ocurrencias de descubrimiento
Cuando se envía una imagen a Artifact Registry por primera vez, Artifact Analysis crea un elemento de descubrimiento, que contiene información sobre el análisis inicial de la imagen de contenedor.
Para obtener la ocurrencia de descubrimiento de una imagen, usa la siguiente expresión de filtro:
kind="DISCOVERY" AND resourceUrl="RESOURCE_URL"
gcloud
Para ver las detecciones de una imagen, sigue estos pasos:
En este caso, la expresión no se usa directamente en el comando, pero se transmite la misma información como argumentos:
gcloud artifacts docker images list --show-occurrences \
--occurrence-filter='kind="DISCOVERY"' --format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Donde:
API
Para recuperar la ocurrencia de descubrimiento, la expresión de filtro debe codificarse como URL e insertarse en una solicitud GET
de la siguiente manera:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22DISCOVERY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
Consulta más información sobre el punto final de la API projects.occurrences.get
.
Java
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Go
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Node.js
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Ruby
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Python
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Ver las ocurrencias de vulnerabilidades
Para ver las vulnerabilidades de una imagen específica, crea una consulta con una expresión de filtro:
kind="VULNERABILITY" AND resourceUrl="RESOURCE_URL"
gcloud
Para ver las incidencias de vulnerabilidades de una imagen, haz lo siguiente:
En este caso, la expresión no se usa directamente en el comando, pero se transmite la misma información como argumentos:
gcloud artifacts docker images list --show-occurrences \
--occurrence-filter='kind="VULNERABILITY"' --format=json \
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
Donde:
API
La URL del recurso debe estar codificada como URL e insertada en una solicitud GET de la siguiente manera:
GET https://containeranalysis.googleapis.com/v1/projects/PROJECT_ID/occurrences?filter=kind%3D%22VULNERABILITY%22%20AND%20resourceUrl%3D%22ENCODED_RESOURCE_URL%22
Consulta más información sobre el punto final de la API projects.occurrences.get
.
Java
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Go
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Node.js
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Ruby
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Python
Para saber cómo instalar y usar la biblioteca de cliente de Artifact Analysis, consulta Bibliotecas de cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API Artifact Analysis Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Ver las incidencias de un tipo específico
En los dos ejemplos anteriores, la única diferencia entre las expresiones de filtro es el valor de kind
, que identifica el tipo de ocurrencia. Usa este campo para limitar la lista de incidencias a un tipo concreto, como una vulnerabilidad o una implementación.
Para obtener las ocurrencias de una imagen específica, usa esta expresión de filtro:
kind="NOTE_KIND" AND resourceUrl="RESOURCE_URL"
Donde:
La siguiente expresión de filtro obtiene las apariciones de un tipo específico en muchas imágenes:
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
Donde:
Ver las imágenes asociadas a una nota específica
Puedes obtener una lista de recursos asociados a un ID de nota específico. Por ejemplo, puede enumerar imágenes con una vulnerabilidad CVE específica.
Para enumerar todas las imágenes de un proyecto que estén asociadas a una nota concreta, usa la siguiente expresión de filtro:
noteProjectId="PROVIDER_PROJECT_ID" AND noteId="NOTE_ID"
Para comprobar si una imagen concreta tiene una nota específica, usa la siguiente expresión de filtro:
resourceUrl="RESOURCE_URL" AND noteProjectId="PROVIDER_PROJECT_ID" \ AND noteId="NOTE_ID"
Donde:
Por ejemplo, para buscar todas las imágenes que tengan una instancia de CVE-2017-16231 analizada por Google, usa la siguiente expresión de filtro:
noteProjectId="goog-vulnz" AND noteId="CVE-2017-16231"