Recibe eventos mediante Registros de auditoría de Cloud (gcloud)
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, podrás hacer lo siguiente:
- Crear un bucket de Cloud Storage para que sea la fuente del evento
- Crear un clúster de GKE.
- Configurar una cuenta de servicio para extraer eventos de Pub/Sub mediante un componente de reenvío de eventos que reenvíe eventos al destino
- Inicializar los destinos de GKE en Eventarc
- Implementar un servicio de GKE que reciba eventos.
- Crear un activador de Eventarc que envíe eventos desde Cloud Storage al servicio de GKE.
- Subir un archivo al bucket de Cloud Storage para generar un evento y visualizarlo en los registros del Pod de GKE.
Antes de comenzar
- 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.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
- Instala y, luego, inicializa Google Cloud CLI.
Si se te solicita configurar una región de procesamiento predeterminada, ingresa
n
. - Actualiza los componentes de gcloud:
gcloud components update
- Habilita las API de Google Cloud, Cloud Build, Resource Manager, Google Kubernetes Engine, Eventarc y Container Registry:
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
- Establece las variables de configuración que se usan en esta guía de inicio rápido:
gcloud config set project PROJECT_ID gcloud config set run/cluster events-cluster gcloud config set run/cluster_location us-central1 gcloud config set run/platform gke gcloud config set eventarc/location us-central1
En el ejemplo anterior,PROJECT_ID
es el ID del proyecto de Google Cloud. - Opcional: Para comprobar los ajustes de configuración con Google Cloud CLI, escribe lo siguiente:
gcloud config list
El resultado debería ser similar al ejemplo siguiente:[eventarc] location = us-central1 [run] cluster = events-cluster cluster_location = us-central1 platform = gke
- Habilita los tipos de registros de lectura de administrador, lectura de datos y escritura de datos de los registros de auditoría de Cloud en Cloud Storage:
- Lee la política de IAM de tu proyecto y almacénala en un archivo:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- Edita la política en
/tmp/policy.yaml
. Para ello, agrega o cambia solo la configuración de los registros de auditoría de acceso a datos.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
ReemplazaEMAIL_ADDRESS
por tu dirección de correo electrónico. - Escribe tu nueva política de IAM:
gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
Si el comando anterior informa de un conflicto con otro cambio, repite estos pasos y comienza por leer la lectura de la política de IAM del proyecto.
- Lee la política de IAM de tu proyecto y almacénala en un archivo:
Cree un bucket de Cloud Storage
En esta guía de inicio rápido, se usa Cloud Storage como la fuente del evento. Para crear un bucket de almacenamiento, ejecuta el siguiente comando:
gsutil mb -l us-central1 gs://events-quickstart-$(gcloud config get-value project)/
Después de crear la fuente del evento, puedes implementar el servicio del receptor de eventos en GKE.
Cree un clúster de GKE
Crea un clúster de GKE con el complemento HttpLoadBalancing
.
Habilita Workload Identity para acceder a los servicios de Google Cloud desde aplicaciones que se ejecutan dentro de GKE.
PROJECT_ID=$(gcloud config get-value project) gcloud beta container clusters create events-cluster \ --addons=HttpLoadBalancing \ --machine-type=n1-standard-4 \ --enable-autoscaling --min-nodes=2 --max-nodes=10 \ --no-issue-client-certificate --num-nodes=2 \ --logging=SYSTEM,WORKLOAD \ --monitoring=SYSTEM \ --scopes=cloud-platform,logging-write,monitoring-write,pubsub \ --zone us-central1 \ --release-channel=rapid \ --workload-pool=$PROJECT_ID.svc.id.goog
Espera a que termine de crearse el clúster. Puedes ignorar las advertencias durante el proceso de creación. Una vez que se crea el clúster, el resultado debe ser similar al siguiente:
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1beta1/projects/my-project
/zones/us-central1/clusters/events-cluster].
En el ejemplo anterior, my-project
es el ID del proyecto de Google Cloud.
Esto crea un clúster de GKE llamado events-cluster
en my-project
.
Configura una cuenta de servicio de Google
Configura una cuenta de servicio proporcionada por el usuario y otórgale funciones específicas para que el componente de reenvío de eventos pueda extraer eventos de Pub/Sub y reenviarlos al destino.
Crea una cuenta de servicio llamada
TRIGGER_GSA
que se use para crear activadores:TRIGGER_GSA=eventarc-gke-triggers gcloud iam service-accounts create $TRIGGER_GSA
Otorga las funciones
pubsub.subscriber
,monitoring.metricWriter
yeventarc.eventReceiver
a la cuenta de servicio:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/eventarc.eventReceiver"
Habilita los destinos de GKE
Para cada activador que se orienta a 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 administrar los recursos en el clúster de GKE, otorga permisos a una cuenta de servicio de Eventarc:
Habilita los destinos de GKE para Eventarc:
gcloud eventarc gke-destinations init
Cuando se te solicite vincular los roles necesarios, ingresa
y
.Los siguientes roles están vinculados a la cuenta de servicio:
compute.viewer
container.developer
iam.serviceAccountAdmin
Crea un destino de servicio de GKE
Mediante una imagen compilada con anterioridad, gcr.io/cloudrun/hello
, implementa un servicio de GKE que recibirá y registrará eventos:
Crea una Deployment de Kubernetes:
SERVICE_NAME=hello-gke kubectl create deployment $SERVICE_NAME \ --image=gcr.io/cloudrun/hello
Exponlo como un servicio de Kubernetes:
kubectl expose deployment $SERVICE_NAME \ --type LoadBalancer --port 80 --target-port 8080
Crea un activador de registros de auditoría de Cloud
Cuando subes un archivo a Cloud Storage, el activador de Eventarc envía eventos desde Cloud Storage al servicio de GKE hello-gke
.
Crea un activador de registros de auditoría de Cloud:
gcloud eventarc triggers create my-gke-trigger \ --location=$TRIGGER_LOCATION \ --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=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
Esto crea un activador llamado
my-gke-trigger
.Confirma que el activador se haya creado correctamente:
gcloud eventarc triggers list
El resultado debería ser similar al ejemplo siguiente:
NAME TYPE DESTINATION ACTIVE my-gke-trigger google.cloud.audit.log.v1.written GKE: hello-gke Yes
Genera y visualiza un evento
Sube un archivo de texto a Cloud Storage para generar un evento y activar el servicio de GKE. Luego, puedes ver el mensaje del evento en los registros del Pod.
Sube un archivo de texto a Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt
La carga genera un evento y el Pod de GKE registra el mensaje del evento.
Para ver el mensaje del evento, sigue estos pasos:
- Busca el ID del Pod:
kubectl get pods
El resultado debería ser similar al ejemplo siguiente:NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
Donde NAME es el nombre del Pod. Toma nota deNAME
para usarlo en el siguiente paso. - Verifica los registros del Pod:
kubectl logs
ReemplazaNAME
NAME
por el nombre del Pod que copiaste. - Busca una entrada de registro similar a lo 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. [...]}
- Busca el ID del Pod:
Limpia
Si bien Cloud Run no cobra cuando el servicio no se usa, es posible que se te cobre poralmacenar la imagen del contenedor en Container Registry, recursos de Eventarc, mensajes de Pub/Sub y el clúster de GKE.
Puedes borrar tu imagen, borrar tu bucket de almacenamiento y borrar el clúster de GKE.
Para borrar el activador de Eventarc, ejecuta el siguiente comando:
gcloud eventarc triggers delete my-gke-trigger
Como alternativa, puedes borrar el proyecto de Cloud Console para evitar que se generen cargos. Si borras el proyecto de Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.
gcloud projects delete PROJECT_ID_OR_NUMBER
Reemplaza PROJECT_ID_OR_NUMBER
por el ID o el número del proyecto.