1. Introducción
En este lab, implementarás una aplicación en un clúster de Cloud Run y GKE, y verás las estadísticas de seguridad de la implementación en la sección Seguridad de Software Delivery Shield.
Qué aprenderás
- Recomendaciones de seguridad de Artifact Registry
- Estadísticas de seguridad de Cloud Run
- Postura de seguridad de GKE
2. Configuración y requisitos
Configuración del proyecto de Cloud
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.



- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla en cualquier momento.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (suele identificarse como
PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usará el mismo durante todo el proyecto. - Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar todo el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.
Configuración del entorno
Para activar Cloud Shell, haz clic en el ícono que se encuentra a la derecha de la barra de búsqueda.

En Cloud Shell, habilita las APIs requeridas para este lab:
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
container.googleapis.com \
containersecurity.googleapis.com
Si se te solicita autorización, haz clic en "Autorizar" para continuar.

Si se realizó correctamente, se mostrará un mensaje similar a este:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
Ejecuta el comando para crear el clúster de GKE de forma asíncrona. Se usará más adelante en el lab:
gcloud beta container clusters create gke-cluster \
--zone us-central1-a \
--async
3. Prepara la aplicación
Primero, prepararás una aplicación sencilla de Node.js basada en Express que responda a las solicitudes HTTP.
En Cloud Shell, crea un directorio nuevo llamado starter-nodejs y, luego, cambia a ese directorio:
mkdir starter-nodejs
cd starter-nodejs
Crea un archivo package.json ejecutando los siguientes comandos:
cat > ./package.json << EOF
{
"name": "cloudrun-starter-app",
"version": "1.0.0",
"description": "Node.js Starter Application",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.18.2"
}
}
EOF
El archivo anterior contiene un comando de secuencia de comandos de inicio y una dependencia del framework de aplicaciones web Express.
A continuación, en el mismo directorio, crea un archivo index.js ejecutando los siguientes comandos:
cat > ./index.js << EOF
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Received a request.');
res.send("Hello Cloud Run!");
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Listening on port', port);
});
EOF
Con este código, se crea un servidor web básico que escucha en el puerto definido por la variable de entorno PORT. Ahora, la app está terminada y lista para alojarla en contenedores y, luego, implementarla.
4. Implementa la aplicación de Cloud Run
Ejecuta el siguiente comando para implementar tu aplicación:
gcloud run deploy starter-app \
--source . \
--region us-central1 \
--allow-unauthenticated \
--max-instances=3
Confirma la creación del repositorio de Artifact Registry:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created. Do you want to continue (Y/n)? y
5. Estadísticas de seguridad de Artifact Registry y Cloud Build
La compilación tardará unos minutos en completarse.
Abre Cloud Build y revisa los artefactos de compilación de la compilación más reciente.
La IU de Cloud Build en la consola de Google Cloud contiene el panel de estadísticas de seguridad de Software Delivery Shield, que muestra información de seguridad relacionada con la compilación, como el nivel de SLSA, las vulnerabilidades en las dependencias y la procedencia de la compilación.

Revisa la información de Security Insights sobre la imagen de contenedor creada. Sigue el vínculo de los artefactos analizados para ver los detalles de las vulnerabilidades de esta imagen en Artifact Registry.
Vuelve a la consola de Cloud Shell y verifica que se haya completado la implementación de la aplicación de Cloud Run.
Done. Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic. Service URL: https://starter-app-nin5jpgefq-uc.a.run.app
6. Estadísticas de seguridad de Cloud Run
Cloud Run contiene un panel de seguridad (versión preliminar) que muestra estadísticas de seguridad de la cadena de suministro de software, como la información de cumplimiento del nivel de compilación del SLSA, la procedencia de la compilación y las vulnerabilidades que se encuentran en los servicios en ejecución.
Abre Cloud Run y revisa las estadísticas de seguridad en la pestaña REVISIONES / SEGURIDAD.

En este panel, se muestra la siguiente información:
- Identidad y encriptación: La dirección de correo electrónico de la cuenta de servicio predeterminada de Compute Engine y la clave de encriptación que se usa para la implementación.
- Nivel de SLSA: Esta compilación se encuentra en el nivel 3 de SLSA, que identifica el nivel de madurez del proceso de compilación de software de acuerdo con la especificación de SLSA.
- Vulnerabilidades: Cualquier vulnerabilidad que se encuentre en las dependencias de la aplicación
- Detalles de la compilación: Detalles de la compilación, como el compilador y el vínculo para ver los registros.
- Procedencia de la compilación: Es la procedencia de la compilación, que es una colección de metadatos verificables sobre una compilación. Incluye detalles como los resúmenes de las imágenes compiladas, las ubicaciones de la fuente de entrada, la cadena de herramientas de compilación, los pasos de compilación y la duración de la compilación.
7. Postura de seguridad de GKE
GKE puede evaluar la postura de seguridad de tus contenedores y ofrecer orientación activa sobre la configuración de clústeres, la configuración de cargas de trabajo y las vulnerabilidades. Incluye el panel de postura de seguridad (versión preliminar), que analiza tus clústeres y cargas de trabajo de GKE para brindarte recomendaciones prácticas y bien definidas para mejorar tu postura de seguridad.
En los próximos pasos, implementarás la aplicación en el clúster de GKE y revisarás las estadísticas de seguridad en el panel de postura de seguridad de GKE.
Ejecuta el siguiente comando para verificar que el clúster esté listo:
gcloud beta container clusters list
Resultado de muestra:
NAME: gke-cluster LOCATION: us-central1-a MASTER_VERSION: 1.24.9-gke.3200 MASTER_IP: 34.29.226.228 MACHINE_TYPE: e2-medium NODE_VERSION: 1.24.9-gke.3200 NUM_NODES: 3 STATUS: RUNNING
Obtén las credenciales y la configuración del clúster de GKE:
gcloud container clusters get-credentials gke-cluster \
--region=us-central1-a
Ejecuta el comando para implementar la aplicación con la imagen que se compiló en el paso anterior:
export PROJECT_ID=$(gcloud config get-value project)
kubectl run starter-app \
--image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
--port 8080
Lo ideal es que las cargas de trabajo de GKE tengan una configuración endurecida que limite su superficie de ataque. Puede ser difícil verificar manualmente a gran escala las cargas de trabajo en los clústeres para detectar problemas de configuración. Puedes usar el panel de postura de seguridad para analizar de forma automática la configuración de todas las cargas de trabajo en ejecución en varios clústeres y mostrar resultados prácticos y puntuados y recomendaciones bien definidas a fin de mejorar tu postura de seguridad.
Habilita el análisis de configuración de las cargas de trabajo:
gcloud beta container clusters update gke-cluster \
--region=us-central1-a \
--enable-workload-config-audit
Además de analizar la configuración de las cargas de trabajo, también puedes habilitar el análisis de vulnerabilidades de las cargas de trabajo y revisar los resultados en el panel de postura de seguridad, que es un conjunto de funciones que proporcionan información y recomendaciones para mejorar la seguridad de tus cargas de trabajo y clústeres de GKE.
GKE analiza automáticamente las imágenes de contenedor de cada Pod apto que se ejecuta en tu clúster de GKE en busca de vulnerabilidades conocidas, con datos de vulnerabilidades de bases de datos públicas de CVE, como NIST.
Si se encuentra una vulnerabilidad en tus imágenes de contenedor, GKE asigna una clasificación de gravedad y muestra los resultados en el panel de postura de seguridad en la consola de Google Cloud. GKE también agrega entradas a Cloud Logging para auditorías y trazabilidad.
Habilita el análisis de vulnerabilidades de las cargas de trabajo:
gcloud beta container clusters update gke-cluster \
--region=us-central1-a \
--enable-workload-vulnerability-scanning \
--async
Abre la página Postura de seguridad de GKE.
Espera unos minutos a que se complete la auditoría de la carga de trabajo y, luego, revisa los resultados.

Revisa los problemas de configuración y las cargas de trabajo afectadas.

Por qué usar el panel de postura de seguridad
El panel de postura de seguridad es una medida de seguridad básica que puedes habilitar para cualquier clúster de GKE apto. Google Cloud recomienda usar el panel de postura de seguridad en todos tus clústeres por los siguientes motivos:
- Interrupciones mínimas: Las funciones no interfieren ni interrumpen las cargas de trabajo en ejecución.
- Recomendaciones prácticas: Cuando está disponible, el panel de postura de seguridad proporciona elementos de acción para corregir problemas detectados. Estas acciones incluyen comandos que puedes ejecutar, ejemplos de cambios de configuración que se deben realizar y consejos sobre qué hacer para mitigar las vulnerabilidades.
- Visualización: El panel de postura de seguridad proporciona una visualización de alto nivel de los problemas que afectan a los clústeres en todo tu proyecto y, además, incluye gráficos que muestran el progreso que realizaste y el posible impacto de cada problema.
- Resultados bien definidos: GKE asigna una calificación de gravedad a los problemas detectados según la experiencia de los equipos de seguridad y los estándares de la industria de Google.
- Registros de eventos auditables: GKE agrega todos los problemas detectados a Logging para mejorar la generación de informes y observabilidad.
8. ¡Felicitaciones!
¡Felicitaciones! Completaste el codelab.
Temas abordados:
- Información de Security Insights para artefactos de compilación y aplicaciones que se ejecutan en Cloud Run y GKE
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
—
Última actualización: 21/3/23