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

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

Objetivos

  • Compila y envía una aplicación alojada en contenedores a Artifact Registry con 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 promueve su implementación en un clúster de producción.
  • Consulta las estadísticas sobre las vulnerabilidades en la aplicación implementada con el panel de seguridad en la consola de Google Cloud .

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com  containeranalysis.googleapis.com
  8. Install the Google Cloud CLI.

  9. Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  10. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Artifact Registry, Cloud Build, Cloud Deploy, Google Kubernetes Engine, Container Security, and Container Analysis APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com clouddeploy.googleapis.com container.googleapis.com containersecurity.googleapis.com  containeranalysis.googleapis.com
  14. Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.

    Prepara el entorno

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

      export PROJECT_ID=$(gcloud config get project)
      
    2. Establece la Google Cloud región predeterminada 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 tu clúster de GKE

      Clústeres para usar:

      gcloud iam service-accounts create sds-runtime \
          --display-name="Security insights 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 acceso a la cuenta de servicio predeterminada de Compute Engine 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="Security insights 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 otro 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 actualizando 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
    

    Implementa la imagen en GKE con Cloud Deploy

    1. Actualiza el archivo de configuración de Cloud Deploy con el ID de tu 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 tu canalización existe, ve a la página Canalizaciones de entrega en la consola de Google Cloud :

      Ir a las canalizaciones de entrega

      En la lista de canalizaciones, se muestra tu nueva canalización, 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 se muestre el botón Promocionar para dev-cluster. Es posible que debas actualizar la página.

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

    8. En el panel Promote release, haz clic en Promote para confirmar la promoción en tu clúster de producción.

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

    Ver vulnerabilidades

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

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

      Ir a la 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 los CVE principales que afectan tu carga de trabajo implementada.

    4. Para obtener más detalles, haz clic en Ver todas las vulnerabilidades. Se abrirá la pestaña Problemas y se aplicará un filtro para el tipo de problema Vulnerabilidad. La tabla 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:

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

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

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    ¿Qué sigue?