Desplegar una aplicación en GKE y consultar estadísticas de seguridad

Consulta cómo desplegar un contenedor vulnerable en un clúster de GKE y obtener información valiosa sobre la vulnerabilidad en el panel de control de la postura de seguridad. El panel de control de postura de seguridad de GKE muestra información sobre vulnerabilidades conocidas del sistema operativo. Si también quieres analizar las vulnerabilidades de los paquetes de Go o Java, consulta el artículo Crear una aplicación y ver información valiosa sobre la seguridad.

Objetivos

  • Crea y envía una aplicación en contenedores a Artifact Registry con Cloud Build.
  • Crea un flujo de procesamiento de entrega en Cloud Deploy.
  • Despliega la aplicación en un clúster de GKE de staging y promuévela a un clúster de producción.
  • Consulta estadísticas sobre las vulnerabilidades de la aplicación implementada en el panel de control de postura de seguridad de la consola de Google Cloud .

Antes de empezar

  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 utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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 utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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 termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

    Prepara tu entorno

    1. Define el ID de tu proyecto como variable de entorno:

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

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

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

      Clústeres que se deben usar:

      gcloud iam service-accounts create sds-runtime \
          --display-name="Security insights with GKE service account"
      
    5. Concede permisos a la cuenta de servicio de gestión de identidades y accesos:

      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. Concede acceso a los clústeres de GKE a la cuenta de servicio predeterminada de Compute Engine. Cloud Deploy usa este acceso para desplegar aplicaciones en los clústeres de tu canal de distribución.

      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"
      

      En el resultado se muestra el repositorio containers que has creado.

    Crear los clústeres de GKE

    Crea dos clústeres de GKE: un clúster de staging llamado dev-cluster y un clúster de producción llamado prod-cluster. En Autopilot, la función de análisis de vulnerabilidades de cargas de trabajo se habilita automáticamente en los clústeres nuevos que ejecutan la versión 1.27 o posterior. 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 cargas de trabajo actualizando los clústeres de GKE.

    Crear la imagen

    Crea y envía la imagen con Cloud Build:

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

    Cuando se complete la compilación, el resultado será 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
    

    Desplegar 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 flujo de procesamiento existe, ve a la página Flujos de procesamiento de entrega en la consola de Google Cloud :

      Ir a Flujos de procesamiento de entrega

      En la lista de flujos de procesamiento, se muestra el nuevo flujo, guestbook-app-delivery.

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

    5. Crea una versión 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 nueva versión aparece en la sección Versiones de la página Detalles de la pipeline de entrega.

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

    7. En la visualización dev-cluster, haz clic en Promocionar.

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

    9. Para verificar que el lanzamiento se ha realizado correctamente, consulta la sección Lanzamientos. En la columna Último estado de lanzamiento se muestra Successfully deployed to prod-cluster.

    Ver las vulnerabilidades

    En esta sección, puede consultar información valiosa sobre las vulnerabilidades del SO en el panel de control de postura de seguridad. El panel de control muestra información sobre las vulnerabilidades de las cargas de trabajo en ejecución después de desplegarlas en los clústeres.

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

      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, consulta la sección Vulnerabilidad del SO de la carga de trabajo. En esta sección se enumeran las CVEs principales que afectan a tu carga de trabajo desplegada.

    4. Para obtener más información, haga clic en Ver todos los problemas de vulnerabilidad. Se abre la pestaña Problemas y se aplica un filtro para el tipo de problema Vulnerabilidad. En la tabla se muestra una descripción general de cada vulnerabilidad y su impacto.

    5. Para obtener información 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 del CVE, incluidas las versiones y los paquetes afectados, así como la puntuación CVSS.
      • Consulta las acciones recomendadas para mitigar el problema, como la documentación y la información de la versión del parche.
      • Consulta las cargas de trabajo específicas afectadas por la vulnerabilidad en la pestaña Cargas de trabajo afectadas.

    Limpieza

    Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta página, elimina el Google Cloud proyecto con los recursos.

    Eliminar recursos concretos

    1. Elimina la canalización de Cloud Deploy:

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

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

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

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

    Eliminar el proyecto

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Siguientes pasos