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:
- Configura una cuenta de servicio para que Eventarc pueda extraer eventos y reenviarlos al destino.
- Crea un segmento de Cloud Storage que será la fuente de eventos.
- Crea un clúster de GKE.
- Inicializa los destinos de GKE en Eventarc.
- Despliega un servicio de GKE que reciba eventos.
- Crea un activador de Eventarc que envíe eventos de Cloud Storage al servicio de GKE.
- 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
- 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.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
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 theresourcemanager.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.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
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 theresourcemanager.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.
-
Verify that billing is enabled for your Google Cloud project.
- Actualiza los componentes de Google Cloud CLI:
gcloud components update
- Habilita las APIs Eventarc, Resource Manager y Google Kubernetes Engine:
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com
- 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
-
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:
-
Administrador de Eventarc (
roles/eventarc.admin
) -
Administrador de Kubernetes Engine (
roles/container.admin
) -
Usuario con permiso para ver registros (
roles/logging.viewAccessor
) -
Administrador de gestión de identidades y accesos del proyecto (
roles/resourcemanager.projectIamAdmin
) -
Administrador de cuentas de servicio (
roles/iam.serviceAccountAdmin
) -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) -
Administrador de Uso de Servicio (
roles/serviceusage.serviceUsageAdmin
) -
Administrador de almacenamiento (
roles/storage.admin
)
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.
-
Administrador de Eventarc (
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.
- 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
- 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
- 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
- En Google Cloud Storage, habilita los tipos de registro de estos servicios: Actividad de administración, Lectura de datos y Escritura de datos:
- 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
- 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.
SustituyeauditConfigs: - 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
EMAIL_ADDRESS
por tu dirección de correo. - Escribe la nueva política de gestión de identidades y accesos:
Si el comando anterior informa de un conflicto con otro cambio, repite estos pasos, empezando por leer la política de IAM del proyecto.gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
- Lee la política de gestión de identidades y accesos de tu proyecto y guárdala en un archivo:
Habilita los destinos de GKE para Eventarc:
gcloud eventarc gke-destinations init
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
Kubernetes usa un archivo YAML llamado
kubeconfig
para almacenar la información de autenticación del clúster dekubectl
. Actualiza el archivokubeconfig
con las credenciales y la información del endpoint para quekubectl
apunte al clúster de GKE:gcloud container clusters get-credentials $CLUSTER_NAME \ --region us-central1
Crea un despliegue de Kubernetes:
kubectl create deployment $SERVICE_NAME \ --image=us-docker.pkg.dev/cloudrun/container/hello
Expónlo como un servicio de Kubernetes:
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP --port 80 --target-port 8080
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
.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
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.
Para ver el mensaje del evento, sigue estos pasos:
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.Consulta los registros del pod:
kubectl logs NAME
Sustituye
NAME
por el nombre del pod que has copiado.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. [...]}
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:
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
:
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.
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.
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:
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.