Analizar imágenes a pedido

La API de análisis a pedido te permite analizar imágenes almacenadas de forma local en tu computadora, en Container Registry o en Artifact Registry. Esto te brinda un control detallado sobre los contenedores que deseas analizar en busca de vulnerabilidades. Puedes usar el análisis a pedido para analizar imágenes en tu canalización de IC/EC antes de decidir si almacenarlas en un registro.

Consulta la página Precios para obtener información sobre los precios.

En esta página, se describe cómo analizar manualmente las imágenes de contenedor con el análisis a pedido.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita la API de On-Demand Scanning.

    Habilita la API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita la API de On-Demand Scanning.

    Habilita la API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  12. Agrega el componente local-extract a tu instalación del SDK de Cloud

    Usa el Administrador de componentes del SDK de Cloud

    El administrador de componentes te pedirá que instales los componentes necesarios la primera vez que ejecutes el comando de análisis.

    Usa el administrador de paquetes del sistema

    • Para Debian/Ubuntu:
      sudo apt install google-cloud-sdk-local-extract
          
    • Para Red Hat/Fedora/CentOS:
      sudo dnf install google-cloud-sdk-local-extract
          

      Como alternativa, puedes reemplazar dnf por yum en el comando anterior.

  13. Otorga la función de IAM Administrador de análisis a pedido al usuario o cuenta de servicio que usarás con el análisis a pedido. Si usas la cuenta del propietario del proyecto para ejecutar los análisis, puedes omitir este paso.

Analiza una imagen de contenedor

Para analizar una imagen de contenedor, usa el siguiente comando:

gcloud artifacts docker images scan IMAGE_URI [--remote] [--location=(us,europe,asia)] [--async]

Aquí:

  • --remote es una marca opcional que debes usar si la imagen se aloja de forma remota, en Artifact Registry o Container Registry. En el caso de una imagen remota, usa uno de los siguientes formatos para el IMAGE_URI:

    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID@sha256:HASH
    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID:HASH
    • HOSTNAME/PROJECT_ID/REPOSITORY_ID/IMAGE_ID
    • HOSTNAME/PROJECT_ID/IMAGE_ID@sha256:HASH
    • HOSTNAME/PROJECT_ID/IMAGE_ID:HASH
    • HOSTNAME/PROJECT_ID/IMAGE_ID

    Para las imágenes en Artifact Registry, el IMAGE_URI debe incluir el REPOSTIORY_ID.

    En una imagen local, omite la marca --remote y usa uno de los siguientes formatos para IMAGE_URI:

    • IMAGE_ID:TAG
    • IMAGE_ID
  • --location es una marca opcional para seleccionar de forma manual la multirregión en la que se realiza el análisis. Elegir una multirregión más cercana a tu ubicación física minimiza la latencia. Las ubicaciones disponibles son: us, europe y asia. La ubicación predeterminada es us.

  • --async es una marca opcional para ejecutar el proceso de búsqueda de manera asíncrona. Si omites esta marca, tu terminal se bloqueará hasta que el proceso de búsqueda esté completo.

Análisis síncrono

En el siguiente ejemplo, se muestra el resultado de un análisis síncrono, sin la marca --async:

$ gcloud artifacts docker images scan ubuntu:latest

✓ Scanning container image
  ✓ Locally extracting packages and versions from local container image
  ✓ Remotely initiating analysis of packages and versions
  ✓ Waiting for analysis operation to complete [projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7]
Done.
done: true
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:03:04.185261Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/87d2e137-1d1c-4790-8e5e-daf6c96ae7d7
response:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
  scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

Usa el nombre del análisis para recuperar los resultados de vulnerabilidad. El nombre es el valor de scan en la última línea del mensaje de salida.

Análisis asíncrono

En el siguiente ejemplo, se muestra el resultado de cómo realizar un análisis asíncrono:

$ gcloud artifacts docker images scan ubuntu:latest --async

✓ Scanning container image
  ✓ Locally extracting packages and versions from local container image
  ✓ Remotely initiating analysis of packages and versions
Done.
Check operation [projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16] for status.
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:04:54.393510Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

Esto inicia una operación de larga duración y muestra su ID sin bloquear tu terminal. Usa el ID de operación, el valor de name en la última línea del mensaje de salida, para sondear la operación.

Cómo sondear la operación de larga duración

Usa el ID de operación, del resultado del comando de análisis asíncrono, para verificar el estado de la operación.

gcloud artifacts docker images get-operation LRO_ID

En el ejemplo anterior, LRO_ID es el ID de la operación de larga duración.

Continuando con el ejemplo de la sección de análisis asíncrono para verificar el estado de la operación:

$ gcloud artifacts docker images get-operation \
  projects/cloud-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesMetadata
  createTime: '2021-01-05T23:04:54.393510Z'
  resourceUri: ubuntu:latest
name: projects/my-project/locations/us/operations/2e1a6b1f-16e5-4427-ac86-72c998a3dd16
response:
  '@type': type.googleapis.com/google.cloud.ondemandscanning.v1.AnalyzePackagesResponse
  scan: projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

Si el resultado incluye la línea done: true, la operación de análisis se completa. Usa el nombre del análisis para recuperar los resultados de vulnerabilidad. El nombre es el valor de scan en la última línea del mensaje de salida.

Recupera los resultados del análisis

Para recuperar los resultados del análisis una vez completada la operación, usa el siguiente comando:

gcloud artifacts docker images list-vulnerabilities SCAN_NAME [--limit=X]

Aquí:

  • SCAN_NAME es el nombre del análisis. Puedes encontrarlo en la parte inferior del resultado cuando sondees la operación de larga duración, después de que finaliza el análisis.
  • --limit=X es una marca opcional que limita la cantidad de casos que se muestran en el resultado.

Por ejemplo:

gcloud artifacts docker images list-vulnerabilities \
projects/my-project/locations/us/scans/2fe2bfb8-f0c5-4dd6-a8c8-38961869767a

createTime: '2021-01-05T23:05:42.956227Z'
kind: VULNERABILITY
name: projects/my-project/locations/us/occurrences/f82a1efd-a261-4973-acbd-f9854d8b8135
noteName: projects/goog-vulnz/notes/CVE-2018-1000654
resourceUri: ubuntu:latest
updateTime: '2021-01-05T23:05:42.956227Z'
vulnerability:
  cvssScore: 7.1
  effectiveSeverity: LOW
  packageIssue:
  - affectedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    affectedPackage: libtasn1-6
    affectedVersion:
      kind: NORMAL
      name: 4.16.0
      revision: '2'
    fixedCpeUri: cpe:/o:canonical:ubuntu_linux:20.04
    fixedPackage: libtasn1-6
    fixedVersion:
      kind: MAXIMUM
  severity: HIGH

El resultado de este comando es una lista de casos en el formato Grafeas. En este caso, se muestra una vulnerabilidad de alta gravedad en la imagen.

Los resultados del análisis estarán disponibles durante 48 horas una vez que se complete la operación de análisis.

¿Qué sigue?