Implementa una app en GKE y consulta las estadísticas de seguridad

Aprende a implementar un contenedor vulnerable intencionalmente en un clúster de GKE y obtén estadísticas de seguridad sobre la vulnerabilidad en el panel de postura de seguridad. El panel de postura de seguridad de GKE muestra información sobre las vulnerabilidades conocidas del sistema operativo. Si también quieres analizar el lenguaje en busca de vulnerabilidades en los paquetes de Go o Java, consulta Compila una aplicación y visualiza las estadísticas de seguridad.

Objetivos

  • Compilar y enviar una aplicación alojada en contenedores a Artifact Registry mediante Cloud Build
  • Crea una canalización de entrega en Cloud Deploy.
  • Implementa la aplicación en un clúster de GKE de etapa de pruebas y promociónala a un clúster de producción.
  • Obtén estadísticas sobre las vulnerabilidades en la aplicación implementada con el panel de postura de seguridad en la consola de Google Cloud.

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. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

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

  6. Habilita las APIs de Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com  containeranalysis.googleapis.com
  7. Instala Google Cloud CLI.
  8. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  9. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

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

  11. Habilita las APIs de Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com  containeranalysis.googleapis.com

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Prepara el entorno

  1. Configura el ID del proyecto como una variable de entorno:

    export PROJECT_ID=$(gcloud config get project)
    
  2. Configura la región predeterminada de Google Cloud para Cloud Deploy:

    gcloud config set deploy/region us-central1
    
  3. Clona el repositorio de GitHub que contiene el código de muestra para esta tarea:

    git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
    cd ~/software-delivery-shield-demo-java/backend
    
  4. Crea una cuenta de servicio de IAM para tus GKE

    clústeres para usar:

    gcloud iam service-accounts create sds-runtime \
        --display-name="SDS with GKE service account"
    
  5. Otorga permisos a la cuenta de servicio de IAM:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
        --role="roles/container.nodeServiceAccount"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
        --role="roles/clouddeploy.jobRunner"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
        --role="roles/container.developer"
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com \
        --role="roles/artifactregistry.reader"
    
  6. Otorga a la cuenta de servicio predeterminada de Compute Engine acceso a los clústeres de GKE. Cloud Deploy usa este acceso para implementar apps en los clústeres de tu canalización de entrega.

    PROJECT_NUMBER="$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')"
    gcloud projects add-iam-policy-binding ${PROJECT_NUMBER} \
        --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \
        --role=roles/container.developer
    

Crea el repositorio de Artifact Registry para tu imagen

  1. Crea el repositorio:

    gcloud artifacts repositories create containers \
        --repository-format=docker \
        --location=us-central1 \
        --description="SDS with GKE repository"
    
  2. Verifica que el repositorio exista:

    gcloud artifacts repositories list \
        --location=us-central1 \
        --filter="REPOSITORY:containers"
    

    El resultado muestra el repositorio containers que creaste.

Crea los clústeres de GKE

Crea dos clústeres de GKE, uno de etapa de pruebas llamado dev-cluster y uno de producción llamado prod-cluster. En Autopilot, el análisis de vulnerabilidades de las cargas de trabajo se habilita automáticamente para los clústeres nuevos que ejecutan la versión 1.27 y posteriores. Si usas un clúster estándar, especifica la marca --workload-vulnerability-scanning=standard.

gcloud container clusters create-auto dev-cluster \
    --region=us-central1 \
    --release-channel=rapid \
    --service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
gcloud container clusters create-auto prod-cluster \
    --region=us-central1 \
    --release-channel=rapid \
    --service-account=sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com

La creación del clúster puede tardar hasta cinco minutos en completarse. También puedes habilitar el análisis de vulnerabilidades de las cargas de trabajo si actualizas los clústeres de GKE existentes.

Compila la imagen

Compila y envía la imagen con Cloud Build:

gcloud builds submit --region us-central1 --config cloudbuild.yaml

Cuando se completa la compilación, el resultado es similar al siguiente:

DONE
-----------------------------------------------------------------------------
ID: 3e23094f-7f57-4449-bc68-51c37hn34d03
CREATE_TIME: 2022-09-19T15:41:07+00:00
DURATION: 54S
SOURCE: gs://my-project_cloudbuild/source/1663602066.777581-6ebe4b2d6fd741ffa18936d7f.tgz
IMAGES: us-central1-docker.pkg.dev/PROJECT_ID/containers/java-guestbook-backend:quickstart
STATUS: SUCCESS

Implementar la imagen en GKE con Cloud Deploy

  1. Actualiza el archivo de configuración de Cloud Deploy con el ID del proyecto:

    sed -i "s/PROJECT_ID/${PROJECT_ID}/g" clouddeploy.yaml
    
  2. Registra la canalización y los destinos:

    gcloud deploy apply --file=clouddeploy.yaml
    
  3. Para verificar que la canalización exista, ve a la página Canalizaciones de entrega en la consola de Google Cloud:

    Ir a Canalizaciones de entrega

    La lista de canalizaciones muestra tu canalización nueva, guestbook-app-delivery.

  4. Haz clic en el nombre de la canalización para supervisar el progreso. Se abrirá la página Detalles de la canalización de entrega.

  5. Crea una versión nueva en Cloud Deploy:

    gcloud deploy releases create guestbook-release-001 \
        --delivery-pipeline=guestbook-app-delivery \
        --images=java-guestbook-backend=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
    

    La versión nueva aparecerá en la sección Versiones de la página Detalles de la canalización de entrega.

  6. En la página Detalles de la canalización de entrega, supervisa la vista Visualización de la canalización hasta que aparezca el botón Promover para dev-cluster. Es posible que debas actualizar la página.

  7. Haz clic en Promocionar en la visualización de dev-cluster.

  8. En el panel Promover versión, haz clic en Promover para confirmar la promoción al clúster de producción.

  9. Para verificar que tu versión se haya realizado correctamente, consulta la sección Versiones. La columna Estado del último lanzamiento muestra Successfully deployed to prod-cluster.

Ver vulnerabilidades

En esta sección, consulta las estadísticas de vulnerabilidades del SO mediante el panel de postura de seguridad. En el panel, se muestra información sobre las vulnerabilidades en las cargas de trabajo en ejecución después de implementarlas en los clústeres.

  1. Ve a la página Postura de seguridad de GKE en la consola de Google Cloud.

    Ir a Postura de seguridad de GKE

  2. Para ver los resultados del análisis, actualiza la página. El análisis inicial puede tardar hasta 15 minutos en completarse.

  3. En la página Postura de seguridad de GKE, revisa la sección Vulnerabilidad del SO de la carga de trabajo. En esta sección, se enumeran las principales CVE que afectan la carga de trabajo implementada.

  4. Para obtener más detalles, haz clic en Ver todos los problemas de vulnerabilidad. Se abrirá la pestaña Concerns y se aplicará un filtro para el tipo de problema Vulnerability. En la tabla, se muestra una descripción general de cada vulnerabilidad y su impacto.

  5. Para obtener detalles sobre una vulnerabilidad específica, haz clic en el nombre del problema en la tabla. Se abrirá el panel Vulnerabilidad. En este panel, puedes hacer lo siguiente:

    • Lee una descripción detallada de la CVE, incluidas las versiones, los paquetes afectados y la puntuación del CVSS.
    • Consulta las acciones recomendadas para mitigar el problema, como la documentación y la información sobre la versión de parches.
    • Consulta las cargas de trabajo específicas que se ven afectadas por la vulnerabilidad en la pestaña Cargas de trabajo afectadas.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página, borra el proyecto de Cloud que tiene los recursos.

Borra los recursos individuales

  1. Borra la canalización de Cloud Deploy:

    gcloud deploy delivery-pipelines delete guestbook-app-delivery --force
    
  2. Borra los clústeres de GKE:

    gcloud container clusters delete dev-cluster \
        --region=us-central1
    gcloud container clusters delete prod-cluster \
        --region=us-central1
    
  3. Borra el repositorio de Artifact Registry:

    gcloud artifacts repositories delete containers \
        --location=us-central1
    
  4. Borra la cuenta de servicio de IAM:

    gcloud iam service-accounts delete sds-runtime@${PROJECT_ID}.iam.gserviceaccount.com
    

Borra el proyecto

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?