Implementa en Cloud Run y visualiza estadísticas de seguridad

En esta guía de inicio rápido, se explica cómo implementar una imagen de contenedor en Cloud Run y ver las estadísticas de seguridad para la implementación en el panel Seguridad de Software Delivery Shield en la consola de Google Cloud. Realizarás lo siguiente:

  • Implementar una imagen en Cloud Run con Cloud Deploy Cloud Deploy es un servicio de Google Cloud que automatiza la entrega de tus aplicaciones a una serie de entornos de destino en una secuencia de promoción definida.
  • Visualiza las siguientes estadísticas de seguridad para la implementación:

    • Información de identidad y encriptación para 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) para los artefactos de compilación.
    • 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.

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

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

  6. Habilita las APIs de Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning:

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

    gcloud init
  9. 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.

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

  11. Habilita las APIs de Cloud Build, Artifact Registry, Cloud Deploy, Cloud Run, and Container Scanning:

    gcloud services enable cloudbuild.googleapis.com  artifactregistry.googleapis.com  clouddeploy.googleapis.com  run.googleapis.com  containerscanning.googleapis.com

Establece la configuración predeterminada

  1. Establece una variable de entorno para el ID del proyecto:

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

    gcloud config set deploy/region us-central1
    

Otorgar acceso

Otorga funciones de IAM a la cuenta de servicio predeterminada de Compute Engine. Esto es necesario para que Cloud Deploy implemente 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 agregar cualquiera de estos roles, comunícate con el administrador de tu proyecto.

Crea un repositorio de Docker en Artifact Registry

  1. Crea un nuevo repositorio de Docker llamado containers en la ubicación us-central1 y con la descripción “Docker repository”:

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

    gcloud artifacts repositories list
    

    Deberías ver containers en la lista de repositorios que se muestran.

Prepara la aplicación de ejemplo

Necesitarás algún código fuente de muestra para compilar e implementar. En esta sección, clonarás un repositorio de código fuente existente que contiene una muestra de código de Java.

  1. Clona el repositorio que contiene la muestra de código 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 reemplazar PROJECT_ID por el ID del proyecto:

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

Compila la aplicación

  1. Compilar y alojar en contenedores la aplicación de Java con Cloud Build El siguiente comando compila y aloja en contenedores la aplicación de Java y almacena el contenedor compilado en el repositorio de Docker de Artifact Registry:

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

    Cuando se complete la compilación, verás un mensaje de estado de éxito 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
    

Genera SBOM para la imagen compilada

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

Genera la SBOM para la imagen que compilaste en la sección anterior:

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

Implementa el contenedor en Cloud Run con Cloud Deploy

  1. Registra tu canalización y destinos con el servicio de Cloud Deploy:

    gcloud deploy apply --file cloudrun.clouddeploy.yaml
    

    Ahora tienes una canalización con destinos, lista para implementar la aplicación en el primer destino.

  2. Para verificar que tu canalización exista, ve a la página Canalizaciones de entrega en la consola de Google Cloud:

    Abrir la página Canalizaciones de entrega

    Se muestra la canalización de entrega que acabas de crear, cloudrun-guestbook-backend-delivery.

  3. Haz clic en cloudrun-guestbook-backend-delivery para supervisar 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 versión nueva aparece en la sección Versiones de la página Detalles de la canalización de entrega.

  5. Supervisa la vista Visualización de la canalización en la página Detalles de la canalización de entrega hasta que se muestre el botón Promover para dev-cluster. Es posible que debas actualizar la página.

  6. En el primer destino de la visualización de la canalización de entrega, cloudrun-dev, haz clic en Ascender.

    Se muestra el cuadro de diálogo Promocionar la versión. Muestra los detalles del destino al que promocionarás.

  7. Haz clic en Promover.

    La versión ahora está en cola para su implementación en cloudrun-prod. Cuando se completa la implementación, la visualización de la canalización de entrega la muestra como implementada:

    Captura de pantalla de la implementación

Ver estadísticas de seguridad en Cloud Deploy

  1. Abre la página Canalizaciones de entrega de Cloud Deploy en la consola de Google Cloud.

    Abrir la página de Cloud Deploy

  2. En la tabla Canalizaciones de entrega, haz clic en cloudrun-Guest-backend-delivery.

  3. En la página Detalles de canalizaciones de entrega, haz 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 Artefactos de compilación, ubica la fila con el artefacto java-Guest-backend y en la columna Estadísticas de seguridad correspondiente, haz clic en Ver.

Verás el panel Seguridad de Software Delivery Shield para la implementación.

Captura de pantalla del panel de seguridad

En este panel, se muestra la siguiente información:

  • Nivel SLSA: Esta compilación alcanzó el nivel 3 de SLSA. Haz clic en el vínculo Más información para saber qué significa este nivel de seguridad.

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

  • Dependencias para los artefactos de compilación.

  • Detalles de compilación: Detalles de la compilación, como el compilador y el vínculo para ver los registros

Visualiza las estadísticas de seguridad en Cloud Run

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

    Abrir la página Servicios de Cloud Run

  2. En la tabla Servicios de Cloud Run, haz clic en Guest-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 el panel Seguridad de Software Delivery Shield para la implementación.

Captura de pantalla del panel de seguridad

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 alcanzó el nivel 3 de SLSA. Haz clic en el vínculo Más información para saber qué significa este nivel de seguridad.

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

  • Dependencias para los artefactos de compilación.

  • Detalles de compilación: Detalles de la compilación, como el compilador y el vínculo para ver los registros

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.

  1. Inhabilita la API de Container Scanning:

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

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

    gcloud run services delete guestbook-backend-prod --region=us-central1 \
        --project=${PROJECT_ID}
    
  4. Borra la canalización de entrega, incluidas las versiones y los lanzamientos:

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

    Este comando borra la canalización de entrega, junto con todos los recursos release y rollout, la seguridad de la cadena de suministro de software creada para esa canalización.

  5. Borra el repositorio de Artifact Registry:

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

Eso es todo, finalizaste la guía de inicio rápido.

¿Qué sigue?