Recibir eventos con registros de auditoría de Cloud (gcloud CLI)

En esta guía de inicio rápido se muestra cómo configurar un servicio de Google Kubernetes Engine (GKE) como destino para recibir eventos de Cloud Storage mediante Eventarc.

En esta guía de inicio rápido, harás lo siguiente:

  1. Configura una cuenta de servicio para que Eventarc pueda extraer eventos y reenviarlos al destino.
  2. Crea un segmento de Cloud Storage que será la fuente de eventos.
  3. Crea un clúster de GKE.
  4. Inicializa los destinos de GKE en Eventarc.
  5. Despliega un servicio de GKE que reciba eventos.
  6. Crea un activador de Eventarc que envíe eventos de Cloud Storage al servicio de GKE.
  7. Sube un archivo al segmento de Cloud Storage para generar un evento y ver el evento en los registros del pod de GKE.

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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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. Install the Google Cloud CLI.

  8. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

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

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • 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.

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

  12. Actualiza los componentes de Google Cloud CLI:
    gcloud components update
  13. Habilita las APIs Eventarc, Resource Manager y Google Kubernetes Engine:
    gcloud services enable eventarc.googleapis.com \
        cloudresourcemanager.googleapis.com \
        container.googleapis.com
  14. Define las variables de configuración que se usan en esta guía de inicio rápido:
    PROJECT_ID=$(gcloud config get-value project)
    TRIGGER_SA=eventarc-sa
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
  15. Si has creado el proyecto, se te asignará el rol básico Propietario (roles/owner). De forma predeterminada, este rol de gestión de identidades y accesos (IAM) incluye los permisos necesarios para acceder por completo a la mayoría de los recursos Google Cloud, por lo que puedes saltarte este paso.

    Si no eres el creador del proyecto, debes conceder los permisos necesarios al principal correspondiente. Por ejemplo, una entidad principal puede ser una cuenta de Google (para usuarios finales) o una cuenta de servicio (para aplicaciones y cargas de trabajo de computación). Para obtener más información, consulta la página Roles y permisos de tu destino de evento.

    Permisos obligatorios

    Para obtener los permisos que necesitas para completar esta guía de inicio rápido, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

  16. Anota la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás a un activador de Eventarc para representar la identidad del activador con fines de prueba. Esta cuenta de servicio se crea automáticamente después de habilitar o usar un servicio que utiliza Compute Engine y tiene el siguiente formato de correo electrónico: Google Cloud

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Sustituye PROJECT_NUMBER por el número de tu proyecto. Google Cloud Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola Google Cloud o ejecutando el siguiente comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    En los entornos de producción, te recomendamos que crees una cuenta de servicio y le asignes uno o varios roles de IAM que contengan los permisos mínimos necesarios y que sigas el principio de privilegio mínimo.

  17. Concede el rol Suscriptor de Pub/Sub (roles/pubsub.subscriber) en el proyecto a la cuenta de servicio predeterminada de Compute Engine para que el activador de Eventarc pueda extraer eventos de Pub/Sub.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/pubsub.subscriber
  18. Concede el rol Receptor de eventos de Eventarc (roles/eventarc.eventReceiver) en el proyecto a la cuenta de servicio predeterminada de Compute Engine para que el activador de Eventarc pueda recibir eventos de proveedores de eventos.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  19. Si habilitaste el agente de servicio de Cloud Pub/Sub el 8 de abril del 2021 o antes para admitir solicitudes push de Pub/Sub autenticadas, asigna el rol Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio. De lo contrario, este rol se asigna de forma predeterminada:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  20. En Google Cloud Storage, habilita los tipos de registro de estos servicios: Actividad de administración, Lectura de datos y Escritura de datos:

    1. Lee la política de gestión de identidades y accesos de tu proyecto y guárdala en un archivo:
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. Edita tu política en `/tmp/policy.yaml` y añade o cambia *solo* la configuración de los registros de auditoría de acceso a datos. Precaución: Debes conservar las secciones `bindings:` y `etag:` sin hacer ningún cambio. De lo contrario, es posible que tu proyecto deje de funcionar.
      auditConfigs:
        - auditLogConfigs:
          - logType: ADMIN_READ
          - logType: DATA_WRITE
          - logType: DATA_READ
          service: storage.googleapis.com
        bindings:
        - members:
          - user:EMAIL_ADDRESS
          role: roles/owner
        etag: BwW_bHKTV5U=
        version: 1
      Sustituye EMAIL_ADDRESS por tu dirección de correo.
    3. Escribe la nueva política de gestión de identidades y accesos:
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      Si el comando anterior informa de un conflicto con otro cambio, repite estos pasos, empezando por leer la política de IAM del proyecto.
  21. Crea un segmento de Cloud Storage

    En esta guía de inicio rápido se usa Cloud Storage como origen de eventos. Crea un segmento de Cloud Storage:

    gcloud storage buckets create  gs://events-quickstart-$(gcloud config get-value project) --location=us-central1

    Una vez creada la fuente de eventos, puedes desplegar el servicio receptor de eventos en GKE.

    Crear un clúster de GKE

    Un clúster de GKE consta de al menos una máquina de plano de control de clúster y varias máquinas de trabajador llamadas nodos. Los nodos son instancias de máquinas virtuales (VMs) de Compute Engine que ejecutan los procesos de Kubernetes necesarios para que formen parte del clúster. Despliega aplicaciones en clústeres y las aplicaciones se ejecutan en los nodos.

    Crea un clúster de Autopilot llamado events-cluster:

    gcloud container clusters create-auto $CLUSTER_NAME --region us-central1

    La creación del clúster puede tardar varios minutos. Una vez creado el clúster, la salida debería ser similar a la siguiente:

    Creating cluster events-cluster...done.
    Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
    [...]
    STATUS: RUNNING
    

    De esta forma, se crea un clúster de GKE llamado events-cluster en un proyecto con el ID Google Cloud MY_PROJECT.

    Habilitar destinos de GKE

    Por cada activador que tenga como destino un servicio de GKE, Eventarc crea un componente de reenvío de eventos que extrae eventos de Pub/Sub y los reenvía al destino. Para crear el componente y gestionar los recursos del clúster de GKE, concede permisos al agente de servicio de Eventarc:

    1. Habilita los destinos de GKE para Eventarc:

      gcloud eventarc gke-destinations init
    2. Cuando se te pida que enlaces los roles necesarios, introduce y.

      Los siguientes roles están vinculados a la cuenta de servicio:

      • compute.viewer
      • container.developer
      • iam.serviceAccountAdmin

    Crear un destino de servicio de GKE

    Despliega un servicio de GKE que recibirá y registrará eventos mediante una imagen prediseñada, us-docker.pkg.dev/cloudrun/container/hello:

    1. Kubernetes usa un archivo YAML llamado kubeconfig para almacenar la información de autenticación del clúster de kubectl. Actualiza el archivo kubeconfig con las credenciales y la información del endpoint para que kubectl apunte al clúster de GKE:

      gcloud container clusters get-credentials $CLUSTER_NAME \
          --region us-central1
      
    2. Crea un despliegue de Kubernetes:

      kubectl create deployment $SERVICE_NAME \
          --image=us-docker.pkg.dev/cloudrun/container/hello
      
    3. Expónlo como un servicio de Kubernetes:

      kubectl expose deployment $SERVICE_NAME \
          --type ClusterIP --port 80 --target-port 8080
      

    Crear un activador de Eventarc

    Cuando subes un archivo a Cloud Storage, el activador de Eventarc envía eventos de Cloud Storage al servicio de hello-gke GKE.

    1. Crea un activador de registros de auditoría de Cloud:

      gcloud eventarc triggers create my-gke-trigger \
          --location="us-central1" \
          --destination-gke-cluster="events-cluster" \
          --destination-gke-location="us-central1" \
          --destination-gke-namespace="default" \
          --destination-gke-service="hello-gke" \
          --destination-gke-path="/" \
          --event-filters="type=google.cloud.audit.log.v1.written" \
          --event-filters="serviceName=storage.googleapis.com" \
          --event-filters="methodName=storage.objects.create" \
          --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
      

      De esta forma, se crea un activador llamado my-gke-trigger.

    2. Confirma que el activador se ha creado correctamente:

      gcloud eventarc triggers list

      La salida debería ser similar a la siguiente:

      NAME: my-gke-trigger
      TYPE: google.cloud.audit.log.v1.written
      DESTINATION: GKE: hello-gke
      ACTIVE: By 20:39:43
      LOCATION: us-central1
      

    Generar y ver un evento

    Sube un archivo de texto a Cloud Storage para generar un evento y activar el servicio de GKE. A continuación, puedes ver el mensaje del evento en los registros del pod.

    1. Sube un archivo de texto a Cloud Storage:

      echo "Hello World" > random.txt
      gcloud storage cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt

      La subida genera un evento y el pod de GKE registra el mensaje del evento.

    2. Para ver el mensaje del evento, sigue estos pasos:

      1. Para encontrar el ID del pod, sigue estos pasos:

        kubectl get pods

        La salida debería ser similar a la siguiente:

        NAME                                         READY   STATUS             RESTARTS   AGE
        hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

        Copia el NAME del pod para usarlo en el siguiente paso.

      2. Consulta los registros del pod:

        kubectl logs NAME

        Sustituye NAME por el nombre del pod que has copiado.

      3. Busca una entrada de registro similar a la siguiente:

        2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
        {"severity":"INFO","eventType":"google.cloud.audit.log.v1.written","message":"Received event of type google.cloud.audit.log.v1.written. [...]}
        

    Limpieza

    Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado.

    Puedes hacer lo siguiente:

    1. Elimina el segmento de Cloud Storage.

    2. Elimina el activador de Eventarc.

    3. Elimina el clúster de GKE.

    También puedes eliminar tu Google Cloud proyecto para evitar que se te apliquen cargos. Al eliminar tu Google Cloud proyecto, se detendrá la facturación de todos los recursos utilizados en él.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    Si tienes previsto consultar varios tutoriales y guías de inicio rápido, reutilizar los proyectos puede ayudarte a no superar los límites de cuota de proyectos.

    Siguientes pasos

    Recibir eventos con Pub/Sub (CLI de Google Cloud)