Estadísticas de seguridad del entorno de ejecución

1. Introducción

En este lab, implementarás una aplicación en los clústeres de Cloud Run y GKE, y verás estadísticas de seguridad para la implementación en Software Delivery Security Shield

Qué aprenderás

  • Estadísticas 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

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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 te importa qué es. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (por lo general, se identifica como PROJECT_ID). Si no te gusta el ID generado, puedes generar otro aleatorio. También puedes probar el tuyo propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá mientras dure el proyecto.
  • Para tu información, 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.
  1. 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 te facture 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.

ecdc43ada29e91b.png

En Cloud Shell, habilita las APIs necesarias 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 que autorices, haz clic en “Autorizar”. para continuar.

6356559df3eccdda.png

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 manera asíncrona. Lo usaremos más adelante en el lab:

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

3. Preparar 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

Para crear un archivo package.json, ejecuta 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 una 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 implementarse en contenedores y poder implementarse.

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 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.

7d9fd2213f3704c4.png

Revisa las estadísticas de seguridad de la imagen de contenedor creada. Sigue el vínculo de artefactos analizados para ver los detalles de las vulnerabilidades de esta imagen en Artifact Registry.

Regresa 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 (vista previa) que muestra estadísticas de seguridad de la cadena de suministro de software, como la información de cumplimiento a nivel de compilación de 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 REVISIONS / SEGURIDAD.

62a9f5d26207e58e.png

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 SLSA: Esta compilación está 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 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 las fuentes 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 los contenedores y brindarte orientación activa sobre la configuración del clúster y de la carga de trabajo, y las vulnerabilidades. Incluye el panel de postura de seguridad (vista previa), 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.

Verifica que el clúster esté listo con la ejecución del siguiente comando:

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 credenciales y configuración para el 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 reforzada que limite su superficie de ataque. Verificar las cargas de trabajo en los clústeres para detectar problemas de configuración puede ser difícil de hacer de forma manual a gran escala. Puedes usar el panel de postura de seguridad para analizar automáticamente la configuración de todas tus cargas de trabajo en ejecución en varios clústeres y devolver resultados prácticos y puntuados, y recomendaciones bien definidas para mejorar tu postura de seguridad.

Habilita el análisis de la configuración de la carga 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 la carga 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 clústeres y cargas de trabajo de GKE.

GKE analiza automáticamente las imágenes de contenedor en 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 CVE públicas, como NIST.

Si se encuentra una vulnerabilidad en tus imágenes de contenedor, GKE asigna una calificació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 la auditoría y la 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 carga de trabajo y, luego, revisa los resultados.

5b1b8158bc55ce67.png

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

58e6f4b6d8eaa99a.png

Por qué usar el panel de postura de seguridad

El panel de postura de seguridad es una medida de seguridad fundamental 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 en las cargas de trabajo en ejecución ni las interrumpen.
  • Recomendaciones prácticas: Cuando está disponible, el panel de postura de seguridad proporciona elementos de acción para corregir los problemas descubiertos. Estas acciones incluyen comandos que puedes ejecutar, ejemplos de cambios de configuración que debes 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 de tu proyecto e incluye tablas y gráficos para mostrar el progreso que realizaste y el impacto potencial de cada inquietud.
  • Resultados bien definidos: GKE asigna una calificación de gravedad a los problemas descubiertos según la experiencia de los equipos de seguridad de Google y los estándares de la industria.
  • Registros de eventos auditables: GKE agrega todos los problemas descubiertos a Logging para mejorar la generación de informes y la observabilidad.

8. ¡Felicitaciones!

¡Felicitaciones! Terminaste el codelab.

Temas abordados:

  • Información de Security Insights para los artefactos de compilación y las 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 de marzo de 2023