GSP521

Descripción general
En un lab de desafío, se le proporcionarán una situación y un conjunto de tareas. En lugar de seguir instrucciones paso a paso, deberás utilizar las habilidades aprendidas en los labs del curso para decidir cómo completar las tareas por tu cuenta. Un sistema automatizado de puntuación (en esta página) mostrará comentarios y determinará si completaste tus tareas correctamente.
En un lab de desafío, no se explican conceptos nuevos de Google Cloud, sino que se espera que amplíes las habilidades que adquiriste, como cambiar los valores predeterminados y leer o investigar los mensajes de error para corregir sus propios errores.
Debe completar correctamente todas las tareas dentro del período establecido para obtener una puntuación del 100%.
Se recomienda este lab a los estudiantes inscritos en el curso Garantiza una entrega segura de software. ¿Aceptas el desafío?
Situación del desafío
Eres ingeniero de software en Cymbal Bank y tienes la tarea de implementar de forma segura una nueva aplicación web en la nube. La aplicación maneja datos sensibles de los clientes, por lo que la seguridad es primordial. Tu objetivo es implementar una canalización sólida y automatizada que compile, analice, firme e implemente la aplicación alojada en contenedores, a la vez que se adhiere a estrictos estándares de seguridad. Para este desafío, usarás servicios de Google Cloud como Artifact Registry, Autorización Binaria y Cloud Build para lograr este objetivo en una aplicación de ejemplo.
Temas evaluados
-
Crear repositorios de Artifact Registry: Configura repositorios de Artifact Registry para almacenar imágenes de Docker para el análisis y la producción.
-
Enviar imágenes de Docker: Compila y envía imágenes de Docker a Artifact Registry a través de Cloud Build para el análisis de vulnerabilidades.
-
Configurar la Autorización Binaria: Configura la Autorización Binaria con certificadores y claves para aplicar políticas de firma de imágenes.
-
Ver análisis de vulnerabilidades: Examina los resultados del análisis de vulnerabilidades en Artifact Registry para identificar y comprender los riesgos de seguridad potenciales.
-
Crear una canalización de CI/CD segura: Crea una canalización de Cloud Build que automatice la creación de imágenes, el análisis de vulnerabilidades y la firma de imágenes.
-
Revisar y corregir: Analiza una compilación con errores debido a vulnerabilidades críticas y rectifica los problemas en el código de la aplicación.
-
Volver a compilar e implementar: Vuelve a ejecutar la canalización de CI/CD con el código corregido y asegúrate de que la implementación en Cloud Run sea exitosa.
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, 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.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
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 del navegador privada o de incógnito (opción recomendada) para ejecutar el lab. Así evitarás conflictos 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: Usa solo la cuenta de estudiante para este lab. Si usas otra cuenta de Google Cloud, es posible que se apliquen cargos a esa cuenta.
Tarea 1: Habilita las APIs y configura el entorno
Antes de comenzar a crear tu canalización de CI/CD segura, debes habilitar las APIs de Google Cloud necesarias y configurar tu entorno de desarrollo. Esto garantizará que tengas acceso a todos los servicios y herramientas necesarios.
- Habilita las APIs necesarias para este lab:
gcloud services enable \
cloudkms.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
artifactregistry.googleapis.com \
containerscanning.googleapis.com \
ondemandscanning.googleapis.com \
binaryauthorization.googleapis.com
- En Cloud Shell, ejecuta el siguiente comando para descargar los archivos de muestra de Python, Docker y Cloud Build:
mkdir sample-app && cd sample-app
gcloud storage cp gs://spls/gsp521/* .
- Crea dos repositorios de Artifact Registry: uno para el análisis y otro para la producción. Asigna los nombres
artifact-scanning-repo y artifact-prod-repo a los repositorios, respectivamente.
El repositorio de análisis se usará para almacenar la imagen de Docker antes de que se analicen sus vulnerabilidades, mientras que el repositorio de producción almacenará la imagen después de que se firme y esté lista para la implementación.
Para verificar este objetivo, haz clic en Revisar mi progreso.
Habilitar APIs y configurar repositorios de Artifact Registry.
Tarea 2: Crea la canalización de Cloud Build
En esta tarea, sentarás las bases de tu canalización de CI/CD creando una configuración básica de Cloud Build para compilar y enviar tu imagen de Docker a Artifact Registry. Este paso inicial te permitirá analizar la imagen en busca de vulnerabilidades más adelante en el lab.
-
Comienza por agregar los siguientes roles a la cuenta de servicio de Cloud Build:
roles/iam.serviceAccountUser
roles/ondemandscanning.admin
-
En el Editor de Cloud Shell, abre el archivo sample-app/cloudbuild.yaml.
-
Completa las tareas pendientes: Completa los marcadores de posición de los nombres de las imágenes (<image-name>). Para ello, deberás hacer referencia al repositorio artifact-scanning-repo y el nombre de la imagen debe ser sample-image. Asegúrate de usar la región .
-
Envía la compilación.
-
Consulta la imagen que enviaste al repositorio artifact-scanning-repo y verifica que puedas ver varias vulnerabilidades críticas en los resultados del análisis.
Para verificar este objetivo, haz clic en Revisar mi progreso.
Crear una canalización de Cloud Build.
Tarea 3: Configura la Autorización Binaria
Para aplicar políticas de seguridad estrictas en las implementaciones de contenedores, aprovecharás la Autorización Binaria. Este servicio te permite definir quién puede implementar qué imágenes y en qué condiciones. En esta tarea, crearás y configurarás los componentes necesarios de la Autorización Binaria, incluidos los certificadores, las notas y las claves de KMS. Esto te preparará para integrar la Autorización Binaria en tu canalización de CI/CD.
Crea un certificador
-
En Cloud Shell, crea un archivo JSON. Este archivo definirá una nota de certificador que contiene el indicador de certificación. El valor human_readable_name del indicador de certificación debe establecerse en "Container Vulnerabilities attestation authority".
-
Usa la API de Container Analysis para crear una nota nueva con el ID vulnerability_note. Los detalles de la nota deben definirse en el archivo de notas que creaste en el paso anterior. Asegúrate de incluir la autenticación adecuada y establecer el encabezado Content-Type apropiado en tu solicitud a la API.
-
Usa la API de Container Analysis para recuperar los detalles de la nota de certificador que acabas de crear. Asegúrate de incluir la autenticación adecuada en tu solicitud a la API.
-
Usa la herramienta de línea de comandos de gcloud para crear un nuevo certificador de Autorización Binaria. El ID del certificador debe ser vulnerability-attestor y debe estar asociado con la nota de certificador que creaste anteriormente.
-
Usa la herramienta de línea de comandos de gcloud para enumerar todos los certificadores de Autorización Binaria existentes. Verifica que el certificador que acabas de crear esté incluido en la lista.
-
Crea una política de IAM que otorgue a la cuenta de servicio de Autorización Binaria el rol roles/containeranalysis.notes.occurrences.viewer en la nota de certificador que creaste. Luego, usa la API de Container Analysis para establecer esta política de IAM en la nota.
Genera un par de KMS
En esta sección, generarás un par de claves de KMS para firmar certificaciones.
-
Configura la administración de claves:
- Crea un llavero de claves de KMS llamado
binauthz-keys en la ubicación global para almacenar las claves.
- Dentro de este llavero, genera un nuevo par de claves de firma asimétricas. Asigna el nombre
lab-key a esta clave y asegúrate de que sea la versión 1.
-
Vincula la clave al certificador:
- Usa la herramienta de línea de comandos de
gcloud para asociar la lab-key (versión 1) con tu certificador de Autorización Binaria. Asegúrate de especificar la ubicación global y el llavero de claves binauthz-keys cuando hagas referencia a la clave.
Actualiza la política de Autorización Binaria
-
Modifica la política: Ajusta la política de Autorización Binaria para aplicar el requisito de certificaciones para la regla predeterminada.
-
Incorpora tu certificador: Incluye el vulnerability-attestor que creaste anteriormente como parte de la configuración de la política.
Para verificar este objetivo, haz clic en Revisar mi progreso.
Crear un certificador, un par de KMS y actualizar la política.
Tarea 4: Crea una canalización de CI/CD de Cloud Build con análisis de vulnerabilidades
A partir de la canalización básica de la tarea 2, ahora la mejorarás con funciones de seguridad cruciales. Esto incluye el análisis de vulnerabilidades para identificar posibles debilidades en tus imágenes de contenedor y la firma de imágenes para garantizar su integridad. En esta tarea, integrarás el análisis de vulnerabilidades y la firma de imágenes en tu canalización de CI/CD, lo que la hará más sólida y segura.
Agrega los roles necesarios a la cuenta de servicio de Cloud Build
-
Otorga a la cuenta de servicio de Cloud Build los siguientes roles de IAM en tu proyecto:
roles/binaryauthorization.attestorsViewer
roles/cloudkms.signerVerifier
roles/containeranalysis.notes.attacher
roles/iam.serviceAccountUser
roles/ondemandscanning.admin
-
Además, asegúrate de que la cuenta de servicio predeterminada de Compute Engine también tenga el rol cloudkms.signerVerifier.
Instala el paso de compilación personalizado
- Vas a usar un paso de compilación personalizado en Cloud Build para simplificar el proceso de certificación. Google proporciona este paso de compilación personalizado que contiene funciones auxiliares para optimizar el proceso. Antes de usarlo, el código para el paso de compilación personalizado se debe compilar en un contenedor y enviar a Cloud Build. Para hacer esto, ejecuta el siguiente comando:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
cd cloud-builders-community/binauthz-attestation
gcloud builds submit . --config cloudbuild.yaml
cd ../..
rm -rf cloud-builders-community
Actualiza la canalización de Cloud Build
En esta sección, completarás la canalización de Cloud Build para incluir el análisis de vulnerabilidades, las verificaciones de gravedad, la firma de imágenes y la implementación en Cloud Run. El código que se proporciona a continuación es una implementación parcial de la canalización. Deberás completar las partes faltantes para completar la canalización.
-
Completa las tareas pendientes: Completa las partes faltantes de la canalización, incluidas las siguientes:
- Especifica la ubicación de la imagen en Artifact Registry para el análisis de vulnerabilidades. Ten en cuenta que quieres analizar la imagen en el repositorio
artifact-scanning-repo.
- Establece el nivel de gravedad adecuado para las verificaciones de vulnerabilidad. La canalización debería fallar si se encuentran vulnerabilidades
CRÍTICAS.
- Configura el paso de firma de imágenes con la información correcta del certificador y la clave de KMS. El nombre del certificador es
vulnerability-attestor, y la versión de la clave es la ruta completa a la versión 1 de lab-key.
- Vuelve a etiquetar la imagen para producción y envíala al repositorio de producción. Deberías usar el repositorio
artifact-prod-repo para este propósito.
- Implementa la imagen en Cloud Run. Usarás la imagen de producción del repositorio
artifact-prod-repo para este paso.
Nota: Ya completaste las primeras tareas pendientes en el archivo cloudbuild.yaml en la segunda tarea de este lab. Asegúrate de reemplazar el resto de los marcadores de posición por los valores correctos para las tareas pendientes restantes.
cloudbuild.yaml
steps:
# TODO: #1. Build Step. Replace the <image-name> placeholder with the correct value.
- id: "build"
name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '<image-name>', '.']
waitFor: ['-']
# TODO: #2. Push to Artifact Registry. Replace the <image-name> placeholder with the correct value.
- id: "push"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '<image-name>']
# TODO: #3. Run a vulnerability scan. Replace the <image-name> placeholder with the correct value.
- id: scan
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
(gcloud artifacts docker images scan \
<image-name> \
--location us \
--format="value(response.scan)") > /workspace/scan_id.txt
# TODO: #4. Analyze the result of the scan. IF CRITICAL vulnerabilities are found, fail the build.
# Replace the <correct vulnerability> placeholders with the correct values. Case sensitive!
- 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 <correct vulnerability>; \
then echo "Failed vulnerability check for <correct vulnerability> level" && exit 1; else echo \
"No <correct vulnerability> vulnerability found, congrats !" && exit 0; fi
# TODO: #5. Sign the image only if the previous severity check passes.
# Replace the placeholders with the correct values: <image-name>, <attestor-name>, and <key-version>.
# Note the <key-version> should be the **full** path to the key version.
- id: 'create-attestation'
name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
args:
- '--artifact-url'
- '<image-name>'
- '--attestor'
- '<attestor-name>'
- '--keyversion'
- '<key-version>'
# TODO: #6. Re-tag the image for production and push it to the production repository using the latest tag.
# Replace the <image-name> and <production-image-name> placeholders with the correct values.
- id: "push-to-prod"
name: 'gcr.io/cloud-builders/docker'
args:
- 'tag'
- '<image-name>'
- '<production-image-name>'
- id: "push-to-prod-final"
name: 'gcr.io/cloud-builders/docker'
args: ['push', '<production-image-name>']
# TODO: #7. Deploy to Cloud Run. Replace the <image-name> and <your-region> placeholders with the correct values.
- id: 'deploy-to-cloud-run'
name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args:
- '-c'
- |
gcloud run deploy auth-service --image=<image-name> \
--binary-authorization=default --region=<your-region> --allow-unauthenticated
# TODO: #8. Replace <image-name> placeholder with the value from the build step.
images:
- <image-name>
-
Activa la compilación:
- Envía la configuración de Cloud Build que creaste para iniciar el proceso de compilación.
- Presta atención a la región en la que trabajas cuando envías la compilación.
-
Observa el error de compilación:
- Navega a la página Historial de Cloud Build en la consola de Google Cloud.
- Busca la compilación que acabas de activar y examina su estado.
- Confirma que la compilación falla debido a la presencia de una vulnerabilidad de gravedad
CRÍTICA.
Nota: Se supone que tu compilación fallará debido a una vulnerabilidad de gravedad CRÍTICA. Abordarás este problema en la siguiente tarea.
Para verificar este objetivo, haz clic en Revisar mi progreso.
Integrar el análisis de vulnerabilidades en tu canalización de CI/CD.
Tarea 5: Corrige la vulnerabilidad y vuelve a implementar la canalización de CI/CD
En una situación real, los análisis de vulnerabilidades suelen revelar problemas que deben abordarse. Esta tarea simula una situación en la que tu compilación falla debido a una vulnerabilidad crítica. En esta tarea, analizarás la falla de compilación, identificarás la vulnerabilidad y la corregirás actualizando las dependencias de tu aplicación. Luego, volverás a activar la canalización de Cloud Build para asegurarte de que la compilación se complete correctamente sin vulnerabilidades críticas.
-
Actualiza el Dockerfile: Modifica tu Dockerfile para usar la imagen base python:3.8-alpine. Actualiza las dependencias Flask, Gunicorn y Werkzeug a las siguientes versiones:
- Flask:
3.0.3
- Gunicorn:
23.0.0
- Werkzeug:
3.0.4
-
Vuelve a activar la compilación: Envía tu configuración actualizada de Cloud Build para iniciar una nueva compilación.
-
Verifica que la compilación se realizó correctamente: Consulta la página Historial de Cloud Build para confirmar que la compilación se completó correctamente sin problemas de vulnerabilidad CRÍTICOS.
-
Para realizar pruebas, ejecuta el siguiente comando para permitir el acceso no autenticado al servicio de Cloud Run y, así, validar la implementación. Reemplaza <your-region> por la región en la que implementaste el servicio.
gcloud beta run services add-iam-policy-binding --region=<your-region> --member=allUsers --role=roles/run.invoker auth-service
Nota: Este comando es solo para fines de prueba y no debe usarse en un entorno de producción.
-
Valida la implementación: Accede a la URL del servicio de Cloud Run para asegurarte de que tu aplicación se implementó y funciona correctamente.
Para verificar este objetivo, haz clic en Revisar mi progreso.
Corregir la vulnerabilidad y volver a implementar la canalización de CI/CD.
¡Felicitaciones!
¡Felicitaciones! En este lab, implementaste correctamente una canalización de CI/CD segura que compila, analiza, firma e implementa una aplicación web en la nube. Esta experiencia práctica te proporcionó habilidades esenciales para compilar e implementar aplicaciones seguras en la nube, incorporar prácticas recomendadas de seguridad en tus flujos de trabajo de desarrollo y garantizar la integridad de tu proceso de entrega de software.

Próximos pasos/Más información
Consulta los siguientes recursos para obtener más información sobre los temas abordados en este lab:
Capacitación y certificación 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: 10 de diciembre de 2025
Prueba más reciente del lab: 4 de septiembre de 2024
Copyright 2026 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.