GSP1184

Descripción general
Las vulnerabilidades de software son debilidades que pueden provocar una falla accidental del sistema o proporcionar a los agentes maliciosos un medio para comprometer tu software. Artifact Analysis proporciona dos tipos de análisis de SO para encontrar vulnerabilidades en contenedores:
- La API de On-Demand Scanning te permite analizar manualmente imágenes de contenedor en busca de vulnerabilidades del SO, ya sea de forma local en tu computadora o de forma remota en Artifact Registry. Esto te brinda un control detallado sobre los contenedores que quieres analizar en busca de vulnerabilidades.
- La API de Container Scanning te permite automatizar la detección de vulnerabilidades del SO y analizar cada vez que envías una imagen a Artifact Registry. Puedes usar On-Demand Scanning para analizar imágenes en tu canalización de CI/CD antes de decidir si almacenarlas en un registro. Si habilitas esta API, también se habilitarán los análisis de paquetes de lenguaje para vulnerabilidades de Go y Java.
En este lab, aprenderás a compilar imágenes de contenedor almacenadas en Artifact Registry con Cloud Build y a analizarlas en busca de vulnerabilidades.
Qué aprenderás
En este lab, aprenderás a realizar las siguientes tareas:
- Compilar imágenes con Cloud Build
- Usar Artifact Registry para contenedores
- Utilizar el análisis automático de vulnerabilidades
- Configurar On-Demand Scanning
- Agregar análisis de imágenes en CI/CD en Cloud Build
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
En este lab práctico, se te proporcionarán credenciales temporales nuevas para acceder a Google Cloud y realizar las actividades en un entorno de nube real, no en uno de simulación o demostración.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
Nota: Usa una ventana de navegador privada o de incógnito para ejecutar el lab. Así evitarás cualquier conflicto entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Nota: Si ya tienes un proyecto o una cuenta personal de Google Cloud, no los uses en este lab para evitar cargos adicionales en tu cuenta.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá una ventana emergente para que selecciones tu forma de pago.
A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón Abrir la consola de Google Cloud
- El tiempo restante
- Las credenciales temporales que debes usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordena las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta.
-
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}}
También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}}
También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses tus credenciales de cuenta de Google Cloud.
Nota: Usar tu propia cuenta de Google Cloud para este lab podría generar cargos adicionales.
-
Haz clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Nota: Para ver un menú con una lista de productos y servicios de Google Cloud, haz clic en el menú de navegación que se encuentra en la parte superior izquierda.
Activa Cloud Shell
Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
- Haz clic en Activar Cloud Shell
en la parte superior de la consola de Google Cloud.
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu Project_ID, . El resultado contiene una línea que declara el Project_ID para esta sesión:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
- Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
gcloud auth list
- Haz clic en Autorizar.
Resultado:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Puedes solicitar el ID del proyecto con este comando (opcional):
gcloud config list project
Resultado:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Nota: Para obtener toda la documentación de gcloud, en Google Cloud, consulta la guía con la descripción general de gcloud CLI.
Configuración del entorno
- En Cloud Shell, establece el ID y el número del proyecto. Guárdalos como variables
PROJECT_ID y PROJECT_NUMBER:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
- Habilita todos los servicios necesarios con el siguiente comando:
gcloud services enable \
cloudkms.googleapis.com \
cloudbuild.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
artifactregistry.googleapis.com \
containerscanning.googleapis.com \
ondemandscanning.googleapis.com \
binaryauthorization.googleapis.com
Haz clic en Revisar mi progreso para verificar el objetivo.
Habilitar las APIs necesarias
Tarea 1: Compila imágenes con Cloud Build
En esta sección, crearás una canalización de compilación automatizada para compilar tu imagen de contenedor, analizarla y, luego, evaluar los resultados. Si no se encuentran vulnerabilidades CRÍTICAS, se enviará la imagen al repositorio. Si se encuentran vulnerabilidades CRÍTICAS, la compilación fallará y se cerrará.
- Proporciona el acceso a la cuenta de servicio de Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/ondemandscanning.admin"
Cloud Build necesitará derechos para acceder a la API de On-Demand Scanning. Proporciona acceso con los siguientes comandos.
- Crea un directorio de trabajo y cambia a él:
mkdir vuln-scan && cd vuln-scan
- Define una imagen de muestra:
Crea un archivo llamado Dockerfile con el siguiente contenido:
cat > ./Dockerfile << EOF
FROM gcr.io/google-appengine/debian11
# System
RUN apt update && apt install python3-pip -y
# App
WORKDIR /app
COPY . ./
RUN pip3 install Flask==1.1.4
RUN pip3 install gunicorn==20.1.0
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
EOF
- Crea un archivo llamado main.py con el siguiente contenido:
cat > ./main.py << EOF
import os
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
name = os.environ.get("NAME", "Worlds")
return "Hello {}!".format(name)
if __name__ == "__main__":
app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
EOF
Crea la canalización de Cloud Build
Crearás un archivo cloudbuild.yaml en tu directorio que se usará para el proceso automatizado. En este lab, los pasos se limitan al proceso de compilación de contenedores. Sin embargo, en la práctica, incluirías instrucciones y pruebas específicas de la aplicación, además de los pasos del contenedor.
- Crea el archivo con el siguiente comando:
cat > ./cloudbuild.yaml << EOF
steps:
# build
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
EOF
- Ejecuta la canalización de CI:
Envía la compilación para su procesamiento:
gcloud builds submit
- Una vez que se haya iniciado el proceso de compilación, en la consola de Cloud, abre el panel de Cloud Build para ver el contenido.
Haz clic en Revisar mi progreso para verificar el objetivo.
Compilar las imágenes con Cloud Build
Tarea 2: Usar Artifact Registry para contenedores
Crea un repositorio de Artifact Registry
Usarás Artifact Registry para almacenar y analizar tus imágenes.
- Crea el repositorio con el siguiente comando:
gcloud artifacts repositories create artifact-scanning-repo \
--repository-format=docker \
--location={{{ project_0.default_region | "REGION" }}} \
--description="Docker repository"
- Configura Docker para que utilice tus credenciales de gcloud cuando accedas a Artifact Registry:
gcloud auth configure-docker {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev
- Modifica la canalización de Cloud Build para enviar la imagen resultante a Artifact Registry:
cat > ./cloudbuild.yaml << EOF
steps:
# compilar
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
# enviar a Artifact Registry
- id: "push"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image']
images:
- {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image
EOF
- Ejecuta la canalización de CI:
gcloud builds submit
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear un repositorio de Artifact Registry
Tarea 3: Análisis automático de vulnerabilidades
El análisis se activa automáticamente cada vez que envías una nueva imagen a Artifact Registry. La información sobre vulnerabilidades se actualiza continuamente cuando se descubren nuevas vulnerabilidades.
En esta sección, revisarás la imagen que acabas de compilar y enviar a Artifact Registry, y explorarás los resultados de vulnerabilidad.
Revisa los detalles de la imagen
Una vez que se complete el proceso de compilación, revisa la imagen y los resultados de vulnerabilidad en el panel de Artifact Registry.
- En la consola de Cloud, abre Artifact Registry.
- Haz clic en artifact-scanning-repo para ver el contenido.
- Haz clic en los detalles de la imagen.
- Haz clic en el resumen más reciente de tu imagen.
- Una vez que finalice el análisis, haz clic en la pestaña Vulnerabilidades de la imagen.
En la pestaña de vulnerabilidades, verás los resultados del análisis automático de la imagen que acabas de crear.
El análisis automático está habilitado de forma predeterminada. Explora la configuración de Artifact Registry para ver cómo puedes activar o desactivar el análisis automático.
Tarea 4: On Demand Scanning
Hay varias situaciones en las que es posible que debas realizar un análisis antes de enviar la imagen a un repositorio. Por ejemplo, un desarrollador de contenedores puede analizar una imagen y corregir los problemas que encuentre antes de enviar el código al control de origen.
En el ejemplo que se muestra a continuación, compilarás y analizarás la imagen de forma local antes de tomar medidas en los resultados.
- Usa Docker local para compilar la imagen en tu caché local:
docker build -t {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image .
- Una vez que se compiló la imagen, solicita un análisis de la imagen:
gcloud artifacts docker images scan \
{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image \
--format="value(response.scan)" > scan_id.txt
Los resultados del análisis se almacenan en un servidor de metadatos. El trabajo se completa con una ubicación de los resultados en el servidor de metadatos.
- Revisa el resultado que se almacenó en el archivo
scan_id.txt:
cat scan_id.txt
Observa la ubicación del informe de los resultados del análisis en el servidor de metadatos.
- Para ver los resultados reales del análisis, usa el comando
list-vulnerabilities en la ubicación del informe que se indica en el archivo de salida:
gcloud artifacts docker images list-vulnerabilities $(cat scan_id.txt)
El resultado contiene una cantidad significativa de datos sobre todas las vulnerabilidades de la imagen. Los humanos rara vez usan los datos almacenados en el informe directamente. Por lo general, los resultados se usan en un proceso automatizado.
- Usa los siguientes comandos para leer los detalles del informe y registrar si se encontraron vulnerabilidades CRÍTICAS:
export SEVERITY=CRITICAL
gcloud artifacts docker images list-vulnerabilities $(cat scan_id.txt) --format="value(vulnerability.effectiveSeverity)" | if grep -Fxq ${SEVERITY}; then echo "Failed vulnerability check for ${SEVERITY} level"; else echo "No ${SEVERITY} Vulnerabilities found"; fi
El resultado de este comando será el siguiente:
Failed vulnerability check for CRITICAL level
Haz clic en Revisar mi progreso para verificar el objetivo.
Analizar las imágenes con On Demand Scanning
Tarea 5: Usa el análisis de artefactos en CI/CD en Cloud Build
Primero, le proporcionarás a Cloud Build los derechos para acceder a la API de On-Demand Scanning.
- Proporciona acceso con los siguientes comandos:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/ondemandscanning.admin"
- Actualiza la canalización de Cloud Build con el siguiente comando, que crea un archivo
cloudbuild.yaml que se usará para el proceso automatizado:
cat > ./cloudbuild.yaml << EOF
steps:
# compilar
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '.']
waitFor: ['-']
#Ejecutar un escáner de vulnerabilidades a nivel de _SECURITY
- id: scan
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
(gcloud artifacts docker images scan \
{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image \
--location us \
--format="value(response.scan)") > /workspace/scan_id.txt
#Analizar el resultado del análisis
- id: severity check
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
gcloud artifacts docker images list-vulnerabilities \$(cat /workspace/scan_id.txt) \
--format="value(vulnerability.effectiveSeverity)" | if grep -Fxq CRITICAL; \
then echo "Failed vulnerability check for CRITICAL level" && exit 1; else echo "No CRITICAL vulnerability found, congrats !" && exit 0; fi
#Volver a etiquetar
- id: "retag"
name: 'gcr.io/cloud-builders/docker'
args: ['tag', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good']
#enviar a Artifact Registry
- id: "push"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '{{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image:good']
images:
- {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/${PROJECT_ID}/artifact-scanning-repo/sample-image
EOF
En este ejemplo, los pasos se limitan al proceso de compilación del contenedor. En la práctica, incluirías instrucciones y pruebas específicas de la aplicación, además de los pasos del contenedor.
- Envía la compilación para su procesamiento y verifica que se interrumpa cuando se encuentre una vulnerabilidad de gravedad CRÍTICA.
gcloud builds submit
- Revisa el error de compilación en la página Historial de Cloud Build.
Haz clic en Revisar mi progreso para verificar el objetivo.
Verificar que la compilación se interrumpa cuando se encuentre una vulnerabilidad de gravedad CRÍTICA
Corrige la vulnerabilidad
Actualiza el Dockerfile para usar una imagen base que no contenga vulnerabilidades de gravedad CRÍTICA.
- Reemplaza el Dockerfile para usar la imagen de Debian 10 con el siguiente comando:
cat > ./Dockerfile << EOF
FROM python:3.8-alpine
# App
WORKDIR /app
COPY . ./
RUN pip3 install Flask==2.1.0
RUN pip3 install gunicorn==20.1.0
RUN pip3 install Werkzeug==2.2.2
CMD exec gunicorn --bind :\$PORT --workers 1 --threads 8 main:app
EOF
- Envía la compilación para su procesamiento y verifica que se realizará correctamente cuando no se encuentren vulnerabilidades de gravedad CRÍTICA:
gcloud builds submit
- En la consola de Cloud, navega a Cloud Build > Historial de Cloud Build para revisar si la compilación se procesó correctamente.
Haz clic en Revisar mi progreso para verificar el objetivo.
Corregir la vulnerabilidad
Revisa los resultados del análisis
Revisa la imagen correcta en Artifact Registry.
- Abre Artifact Registry en la consola de Cloud.
- Haz clic en artifact-scanning-repo para ver el contenido.
- Haz clic en los detalles de la imagen.
- Haz clic en el resumen más reciente de tu imagen.
- Haz clic en la pestaña Vulnerabilidades de la imagen.
¡Felicitaciones!
Aprendiste a crear una imagen con Cloud Build y a almacenarla en Artifact Registry, y viste cómo se activan automáticamente los análisis de artefactos. También sabes cómo analizar imágenes "según demanda" antes de enviarlas al control de origen.
Próximos pasos/Más información
Capacitaciones y certificaciones de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 23 de julio de 2025
Prueba más reciente del lab: 23 de julio de 2025
Copyright 2024 Google LLC. Todos los derechos reservados. Google y el logotipo de Google son marcas de Google LLC. El resto de los nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que están asociados.