En este documento, aprenderás a habilitar la API de Container Scanning, enviar una imagen a Artifact Registry y ver la lista de vulnerabilidades que se encontraron en la imagen.
Artifact Analysis proporciona información sobre las vulnerabilidades de las imágenes de contenedor en Artifact Registry. Los metadatos se almacenan 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.
-
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
- Crea un repositorio de Docker en Artifact Registry y envía una imagen de contenedor al repositorio. Si no conoces Artifact Registry, consulta la guía de inicio rápido de Docker.
Habilitar esta API también habilita el análisis de paquetes de idiomas en Artifact Registry. Consulta los tipos de paquetes admitidos.
Consulta 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 sistema en el contenedor.
Puedes ver los casos de vulnerabilidades de tus imágenes en el registro con 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. Después de 30 días, los metadatos ya no se actualizarán y los resultados estarán inactivos. Además, Artifact Analysis archiva los metadatos que están inactivos durante más de 90 días, y estos no estarán disponibles en la consola de Google Cloud , gcloud ni a través de la API. Para volver a analizar una imagen con metadatos inactivos o archivados, extráela. La actualización de los metadatos puede tardar hasta 24 horas.
Visualiza las ocurrencias 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 para 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, la cantidad 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 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 (cuando 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, un directorio o un tipo de archivo específico por extensión.La consola de Google Cloud muestra hasta 1,200 vulnerabilidades por página en esta tabla.
Para obtener detalles sobre una CVE específica, haz clic en su nombre.
Para ver los detalles de la ocurrencia de la vulnerabilidad, como el número de versión y la ubicación afectada, haz clic en Ver o Ver corregida en la fila con el nombre de la vulnerabilidad. El texto del vínculo es Ver para las vulnerabilidades sin corrección y Ver corregidas para las vulnerabilidades en las que se aplicó una corrección.
Visualiza las ocurrencias con gcloud
Para ver las ocurrencias de una imagen 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
Aquí:
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID del proyecto de tu 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 devuelve 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 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
El resultado es similar al siguiente:
Imagen de salida de muestra
{ "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" } } }
Cómo ver las vulnerabilidades de una etiqueta de imagen
Para ver las vulnerabilidades de una etiqueta de imagen, ingresa uno de los siguientes comandos:
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 del proyecto de tu 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 devuelve resultados que incluyen el packageType
.
Cómo filtrar los casos de vulnerabilidades
Para filtrar los casos 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
Aquí:
- LOCATION es la ubicación regional o multirregional del repositorio.
- PROJECT_ID es el ID del proyecto de tu 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 las vulnerabilidades de una capa específica
Puedes usar el campo layerDetails
para determinar qué capa específica introdujo un paquete vulnerable y ver información adicional sobre esa capa. Por ejemplo, considera el siguiente resultado de layerDetails
para una imagen:
"layerDetails": {
"index": 0,
"diffID": "sha256:123",
"buildCommand": "FROM golang:example_sha256",
"BaseImages": [
{
"name": "library/golang",
},
],
}
El resultado muestra que el índice de la capa es 0
en la imagen del contenedor, con un hash de capa de sha256:123
.
El comando de compilación de Docker que se usó para compilar esta capa es FROM golang:example_sha256
, y la capa también se encuentra en la imagen base library/golang
.
Visualiza ocurrencias con la API o el código
Para ver los casos de una imagen, especifica imágenes con una URL en el siguiente formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
API
Usa cURL
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, 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
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ruby
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Visualiza las ocurrencias en Cloud Build
Si usas Cloud Build, también puedes ver las vulnerabilidades de imágenes en el panel lateral Estadísticas de seguridad dentro 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.
Filtra 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.
Visualiza los casos de descubrimiento
Cuando se envía una imagen inicialmente a Artifact Registry, este crea un caso de descubrimiento que contiene información sobre el análisis inicial de la imagen del contenedor.
Para recuperar un caso de descubrimiento de una imagen, usa la siguiente expresión de filtro:
kind="DISCOVERY" AND resourceUrl="RESOURCE_URL"
En el ejemplo anterior, RESOURCE_URL tiene el siguiente formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
gcloud
Para ver los casos de descubrimiento de una imagen, sigue estos pasos:
En este caso, la expresión no se usa directamente en el comando, pero se pasa la misma información 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
API
Para recuperar el caso de descubrimiento, tu expresión de filtro debe estar codificada como una URL y también incorporada 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 el extremo de la API de projects.occurrences.get
para obtener más detalles.
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ruby
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Visualiza los casos de vulnerabilidades
Para ver los casos de vulnerabilidades de una imagen específica, crea una consulta con una expresión de filtro:
kind="VULNERABILITY" AND resourceUrl="RESOURCE_URL"
En el ejemplo anterior, RESOURCE_URL tiene el siguiente formato:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_ID
gcloud
En este caso, la expresión no se usa directamente en el comando, pero se pasa la misma información 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
API
La URL del recurso debe estar codificada como URL y también incorporada 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 el extremo de la API de projects.occurrences.get
para obtener más detalles.
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Java.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Go.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Node.js.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Ruby
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Ruby.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Artifact Analysis, consulta las bibliotecas cliente de Artifact Analysis. Para obtener más información, consulta la documentación de referencia de la API de Artifact Analysis Python.
Para autenticarte en Artifact Analysis, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Cómo ver los casos 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 caso. Usa este campo para limitar la lista de casos a un tipo determinado, como una vulnerabilidad o una implementación.
Para recuperar los casos de una imagen específica, usa esta expresión de filtro:
kind="NOTE_KIND" AND resourceUrl="RESOURCE_URL"
Aquí:
- NOTE_KIND es el tipo de nota.
- Por ejemplo, usa el tipo
DISCOVERY
para enumerar los casos de descubrimiento. Se crean casos de descubrimiento para las imágenes cuando se envían inicialmente a Artifact Registry. - Para enumerar los casos 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
.
La expresión de filtro para recuperar casos de un tipo específico en muchas imágenes es la siguiente:
kind="NOTE_KIND" AND has_prefix(resourceUrl, "RESOURCE_URL_PREFIX")
Aquí:
- RESOURCE_URL_PREFIX es el prefijo de URL para algunas imágenes.
- Para visualizar una lista de todas las versiones de una imagen, utliza:
https://HOSTNAME/PROJECT_ID/IMAGE_ID@
- Para visualizar una lista de todas las imágenes de un proyecto, utiliza:
https://HOSTNAME/PROJECT_ID/
- Para visualizar una lista de todas las versiones de una imagen, utliza:
Visualiza 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:
noteProjectId="PROVIDER_PROJECT_ID" AND noteId="NOTE_ID"
Para verificar una imagen específica de una nota en particular, usa la siguiente expresión de filtro:
resourceUrl="RESOURCE_URL" AND noteProjectId="PROVIDER_PROJECT_ID" \ AND noteId="NOTE_ID"
Aquí:
- 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
.
Por ejemplo, para verificar todas las imágenes que tengan un caso de CVE-2017-16231 según el análisis de Google, usa la siguiente expresión de filtro:
noteProjectId="goog-vulnz" AND noteId="CVE-2017-16231"
¿Qué sigue?
Usa las 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 basadas en los resultados del análisis de vulnerabilidades. Para obtener más información, consulta Crea certificaciones con Kritis Signer o Crea certificaciones con Voucher.