Desplegar en Cloud Run y consultar estadísticas de seguridad

En esta guía de inicio rápido se explica cómo desplegar una imagen de contenedor en Cloud Run y consultar estadísticas sobre la seguridad del despliegue en la pestaña Seguridad de laGoogle Cloud consola. Deberás hacer lo siguiente:

  • Despliega una imagen en Cloud Run con Cloud Deploy. Cloud Deploy es un Google Cloud servicio que automatiza el envío de tus aplicaciones a una serie de entornos de destino en una secuencia de promoción determinada.
  • Consulta las siguientes estadísticas de seguridad de la implementación:

    • Información sobre la identidad y el cifrado de la implementación.
    • Nivel de la cadena de suministro para artefactos de software (SLSA), que identifica el nivel de garantía de la implementación.
    • Vulnerabilidades en los artefactos de compilación.
    • Lista de materiales de software (SBOM) de los artefactos de compilación.
    • Procedencia de la compilación: es un conjunto de metadatos verificables sobre una compilación. Incluye detalles como los resúmenes de las imágenes compiladas, las ubicaciones de origen de entrada, la cadena de herramientas de compilación, los pasos de compilación y la duración de la compilación.

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 Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.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 Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning APIs:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.googleapis.com
  14. Definir ajustes predeterminados

    1. Define una variable de entorno para el ID de proyecto:

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

      gcloud config set deploy/region us-central1
      

    Conceder acceso

    Concede roles de gestión de identidades y accesos a la cuenta de servicio predeterminada de Compute Engine. Es necesario para que Cloud Deploy despliegue cargas de trabajo en Cloud Run.

     gcloud projects add-iam-policy-binding $PROJECT_ID \
         --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
         --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
         --role="roles/clouddeploy.jobRunner"
     gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe $PROJECT_ID \
         --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
         --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
         --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
         --role="roles/iam.serviceAccountUser" \
         --project=$PROJECT_ID
     gcloud projects add-iam-policy-binding $PROJECT_ID \
         --member=serviceAccount:$(gcloud projects describe $PROJECT_ID \
         --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
         --role="roles/run.developer"
    

    Si tienes problemas para añadir alguno de estos roles, ponte en contacto con el administrador del proyecto.

    Crear un repositorio de Docker en Artifact Registry

    1. Crea un repositorio de Docker llamado containers en la ubicación us-central1 con la descripción "Repositorio de Docker":

      gcloud artifacts repositories create containers --repository-format=docker \
          --location=us-central1 --description="Docker repository"
      
    2. Verifica que se ha creado el repositorio:

      gcloud artifacts repositories list
      

      Debería ver containers en la lista de repositorios mostrados.

    Preparar una aplicación de ejemplo

    Necesitarás un código fuente de ejemplo para compilarlo e implementarlo. En esta sección, clonarás un repositorio de origen que contenga un ejemplo de código Java.

    1. Clona el repositorio que contiene el código de ejemplo de Java:

      git clone https://github.com/googlecloudplatform/software-delivery-shield-demo-java.git
      cd software-delivery-shield-demo-java/backend
      
    2. Actualiza cloudrun.clouddeploy.yaml para sustituir PROJECT_ID por el ID de tu proyecto:

      sed -i "s/PROJECT_ID/${PROJECT_ID}/g" cloudrun.clouddeploy.yaml
      

    Compilar la aplicación

    1. Compila y contenedoriza la aplicación Java con Cloud Build. El siguiente comando compila y contenedoriza la aplicación Java, y almacena el contenedor compilado en el repositorio de Docker de Artifact Registry:

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

      Una vez que se haya completado la compilación, verás un mensaje de estado similar al siguiente:

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

    Generar una lista de materiales de software para la imagen compilada

    Una lista de materiales de software es un inventario completo de una aplicación que identifica los paquetes en los que se basa tu software. El contenido puede incluir software de terceros, artefactos internos y bibliotecas de código abierto.

    Genera la lista de materiales de la imagen que has creado en la sección anterior:

    gcloud artifacts sbom export \
        --uri=us-central1-docker.pkg.dev/${PROJECT_ID}/containers/java-guestbook-backend:quickstart
    

    Desplegar el contenedor en Cloud Run con Cloud Deploy

    1. Registra tu canal y tus destinos en el servicio Cloud Deploy:

      gcloud deploy apply --file cloudrun.clouddeploy.yaml
      

      Ahora tiene una canalización con objetivos, lista para implementar su aplicación en su primer objetivo.

    2. Para verificar que tu flujo de procesamiento existe, ve a la página Flujos de procesamiento de entrega en la consola de Google Cloud :

      Abre la página Pipelines de entrega.

      Se muestra el flujo de procesamiento de entrega que acabas de crear, cloudrun-guestbook-backend-delivery.

    3. Haz clic en cloudrun-guestbook-backend-delivery para monitorizar el progreso. Se abrirá la página Detalles de la canalización de entrega.

    4. En Cloud Shell, crea una versión en Cloud Deploy:

      gcloud deploy releases create test-release-007 \
          --delivery-pipeline=cloudrun-guestbook-backend-delivery \
          --skaffold-file=cloudrun.skaffold.yaml \
          --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 canalización de entrega.

    5. Monitoriza la vista Visualización del flujo de procesamiento de la página Detalles del flujo de procesamiento de entrega hasta que se muestre el botón Promover para dev-cluster. Es posible que tengas que actualizar la página.

    6. En el primer objetivo de la visualización del flujo de procesamiento de la entrega, cloudrun-dev, haga clic en Promocionar.

      Se muestra el cuadro de diálogo Promocionar lanzamiento. Muestra los detalles del público objetivo al que te diriges.

    7. Haz clic en Promocionar.

      La versión se ha puesto en cola para implementarse en cloudrun-prod. Cuando la implementación se haya completado, la visualización de la canalización de entrega mostrará que se ha implementado:

      Pipeline que muestra la promoción de cloudrun-dev a cloudrun-prod

    Ver estadísticas de seguridad en Cloud Deploy

    1. Abre la página Pipelines de entrega de Cloud Deploy en laGoogle Cloud consola.

      Abrir la página de Cloud Deploy

    2. En la tabla Canalizaciones de entrega, haga clic en cloudrun-guestbook-backend-delivery.

    3. En la página Delivery pipelines details (Detalles de las cadenas de lanzamiento), haga clic en test-release-008.

    4. En la página Detalles de la versión, haz clic en la pestaña Artefactos.

    5. En la tabla Compilar artefactos, busca la fila con el artefacto java-guestbook-backend. En la columna Información de seguridad correspondiente, haz clic en Ver.

    Verás la pestaña Seguridad para la implementación.

    Pestaña Seguridad

    En esta pestaña se muestra la siguiente información en la sección Estadísticas de seguridad:

    • Nivel de SLSA: esta compilación ha alcanzado el nivel 3 de SLSA. Haz clic en el enlace Más información para saber qué significa este nivel de seguridad.

    • Vulnerabilidades: cualquier vulnerabilidad detectada en tus artefactos. Haz clic en el nombre de la imagen (java-guestbook-backend) para ver los artefactos que se han analizado en busca de vulnerabilidades.

    • Dependencias de los artefactos de compilación.

    • Detalles de la compilación: detalles de la compilación, como el compilador y el enlace para ver los registros.

    Ver estadísticas de seguridad en Cloud Run

    1. Abre la página Servicios de Cloud Run.

      Abre la página Servicios de Cloud Run.

    2. En la tabla Servicios de Cloud Run, haz clic en guestbook-backend-prod.

    3. En la página Detalles del servicio, haz clic en Revisiones.

    4. En el panel Revisiones, haz clic en Seguridad.

    Verás la pestaña Seguridad para la implementación.

    Pestaña Seguridad

    En esta pestaña se muestra la siguiente información en la sección Estadísticas de seguridad:

    • Identidad y cifrado: la dirección de correo de la cuenta de servicio predeterminada de Compute Engine y la clave de cifrado utilizada en la implementación.

    • Nivel de SLSA: esta compilación ha alcanzado el nivel 3 de SLSA. Haz clic en el enlace Más información para saber qué significa este nivel de seguridad.

    • Vulnerabilidades: cualquier vulnerabilidad detectada en tus artefactos. Haz clic en el nombre de la imagen (java-guestbook-backend) para ver los artefactos que se han analizado en busca de vulnerabilidades.

    • Dependencias de los artefactos de compilación.

    • Detalles de la compilación: detalles de la compilación, como el compilador y el enlace para ver los registros.

    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.

    1. Inhabilita la API Container Scanning:

      gcloud services disable containerscanning.googleapis.com --force
      
    2. Elimina el servicio de Cloud Run guestbook-backend-dev:

      gcloud run services delete guestbook-backend-dev --region=us-central1 \
          --project=${PROJECT_ID}
      
    3. Elimina el servicio guestbook-backend-prod:

      gcloud run services delete guestbook-backend-prod --region=us-central1 \
          --project=${PROJECT_ID}
      
    4. Elimina el flujo de procesamiento de entrega, incluidas la versión y las implementaciones:

      gcloud deploy delivery-pipelines delete cloudrun-guestbook-backend-delivery \
          --force --region=us-central1 --project=${PROJECT_ID}
      

      Este comando elimina el propio flujo de procesamiento, así como todos los recursos release y rollout que haya creado la seguridad de la cadena de suministro de software para ese flujo.

    5. Elimina el repositorio de Artifact Registry:

      gcloud artifacts repositories delete containers \
          --location=us-central1 --async
      

    ¡Ya has completado esta guía de inicio rápido!

    Siguientes pasos