En este instructivo, se muestra cómo implementar un servicio autenticado de Cloud Run que recibe eventos de Cloud Storage mediante Registros de auditoría de Cloud. Usa este instructivo para implementar cargas de trabajo de producción. El activador de Eventarc filtra los eventos según las entradas de los Registros de auditoría de Cloud. Si deseas obtener más información, consulta Determina los filtros de eventos para los Registros de auditoría de Cloud.
Puedes completar este instructivo con la consola de Google Cloud o Google Cloud CLI.
Objetivos
En este instructivo, podrás:
Crear un bucket de Cloud Storage para que sea la fuente del evento
Implementar un servicio de receptor de eventos en Cloud Run
Crear un activador de Eventarc.
Generar un evento mediante la carga de un archivo al bucket de Cloud Storage y visualizarlo en los registros de Cloud Run.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
Es posible que las restricciones de seguridad que define tu organización no te permitan completar los siguientes pasos. Para obtener información sobre la solución de problemas, consulta Desarrolla aplicaciones en un entorno de Google Cloud restringido.
Si eres el creador del proyecto, se te otorga el rol de propietario básico (roles/owner
). De forma predeterminada, este rol de Identity and Access Management (IAM) incluye los permisos necesarios para obtener acceso completo a la mayoría de los recursos de Google Cloud, pero puedes omitir este paso.
Si no eres el creador del proyecto, se deben otorgar los permisos necesarios en el proyecto a la principal correspondiente. Por ejemplo, una principal puede ser una Cuenta de Google (para usuarios finales) o una cuenta de servicio (para aplicaciones y cargas de trabajo de procesamiento). Para obtener más información, consulta la página Roles y permisos para el destino del evento.
Ten en cuenta que, de forma predeterminada, los permisos de Cloud Build incluyen permisos para subir y descargar artefactos de Artifact Registry.
Permisos necesarios
Si quieres obtener los permisos que necesitas para completar este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Editor de Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador de Cloud Run (
roles/run.admin
) -
Administrador de Eventarc (
roles/eventarc.admin
) -
Descriptor de acceso de vista de registros (
roles/logging.viewAccessor
) -
Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin
) -
Administrador de cuenta de servicio (
roles/iam.serviceAccountAdmin
) -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) -
Administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin
) -
Administrador de almacenamiento (
roles/storage.admin
)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Completa los siguientes pasos con la consola de Google Cloud o gcloud CLI:
Console
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.
- Para configurar qué acceso a los datos se registra en tus registros de auditoría, habilita los tipos de registro Lectura de administración, Lectura de datos y Escritura de datos para Google Cloud Storage:
-
En la consola de Google Cloud, ve a la página Cuentas de servicio.
- Haz clic en Crear cuenta de servicio.
-
Ingresa un nombre de cuenta de servicio para mostrar en la consola de Google Cloud.
La consola de Google Cloud genera un ID de cuenta de servicio a partir de este nombre. Si es necesario, edita el ID. No podrás cambiar el ID más adelante.
- Opcional: Ingresa una descripción de la cuenta de servicio.
-
Si no quieres configurar los controles de acceso ahora, haz clic en Listo para terminar de crear la cuenta de servicio.
Para establecer controles de acceso ahora, haz clic en Crear y continuar y continúa con el siguiente paso.
- Selecciona los roles de Invocador de Cloud Run y
Receptor de eventos de Eventarc para otorgar en el proyecto a la cuenta de servicio asociada con el activador de Eventarc.
Para fines de prueba, esto otorga el rol de invocador de Cloud Run en todos los servicios y trabajos de Cloud Run del proyecto. Sin embargo, puedes otorgar el rol en el servicio. Para obtener más información, consulta Otorga permisos de servicio de Cloud Run.
Ten en cuenta que si creas un activador para un servicio autenticado de Cloud Run sin otorgar el rol de invocador de Cloud Run, el activador se crea de forma correcta y está activo. Sin embargo, el activador no funcionará como se espera y aparecerá en el registro un mensaje similar al siguiente:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- Cuando hayas terminado de agregar funciones, haz clic en Continuar y Listo para terminar de crear la cuenta de servicio.
gcloud
- 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com and eventarc.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com and eventarc.googleapis.com - Actualiza los componentes de
gcloud
:gcloud components update
- Accede con tu cuenta:
gcloud auth login
- Establece las variables de configuración que se usan en este instructivo:
export REGION=us-central1 gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION} export SERVICE_NAME=helloworld-events
- Para configurar qué acceso a los datos se registra en tus registros de auditoría, habilita los tipos de registro
ADMIN_READ
,DATA_READ
yDATA_WRITE
para el serviciostorage.googleapis.com
:- 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
- Escribe tu nueva política de IAM:
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.gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
- Lee la política de IAM de tu proyecto y almacénala en un archivo:
- Crea una cuenta de servicio para el proyecto:
Después de crear una cuenta de servicio, pueden pasar hasta 7 minutos antes de que puedas usarla. Si intentas usar una cuenta de servicio de forma inmediata después de crearla y recibes un error, espera al menos 60 segundos y vuelve a intentarlo.gcloud iam service-accounts create sample-service-account \ --description="A sample service account" \ --display-name="Sample service account"
- Para confirmar que se creó
sample-service-account
, ejecuta lo siguiente: El resultado debería ser similar al siguiente ejemplo:gcloud iam service-accounts list
DISPLAY NAME EMAIL DISABLED Default compute service account PROJECT_NUMBER-compute@developer.gserviceaccount.com False Sample service account sample-service-account@PROJECT_ID.iam.gserviceaccount.com False
- Otorga los roles de invocador de Cloud Run (
run.invoker
) y receptor de eventos de Eventarc (roles/eventarc.eventReceiver
) en el proyecto a la cuenta de servicio asociada con el activador de Eventarc:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.invoker"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/eventarc.eventReceiver"
Reemplaza
PROJECT_ID
por el ID del proyecto de Google Cloud.Para fines de prueba, esto otorga el rol de invocador de Cloud Run en todos los servicios y trabajos de Cloud Run del proyecto. Sin embargo, puedes otorgar el rol en el servicio. Para obtener más información, consulta Otorga permisos de servicio de Cloud Run.
Ten en cuenta que si creas un activador para un servicio autenticado de Cloud Run sin otorgar el rol de invocador de Cloud Run, el activador se crea de forma correcta y está activo. Sin embargo, el activador no funcionará como se espera y aparecerá en el registro un mensaje similar al siguiente:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
Crea un repositorio estándar de Artifact Registry
Crea un repositorio estándar de Artifact Registry para almacenar tu imagen de contenedor.Console
- En la consola de Google Cloud, ve a la página Repositorios.
- Haz clic en Crear repositorio.
- Configura tu repositorio:
- Ingresa un nombre único.
- En Formato, selecciona Docker.
- En Modo, selecciona Estándar.
- En Tipo de ubicación, elige Región.
- En la lista Región, selecciona us-central1 (Iowa).
- Acepta los otros valores predeterminados y haz clic en Crear.
gcloud
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Reemplaza REPOSITORY
por un nombre único para el repositorio de Artifact Registry.
Crea un bucket de Cloud Storage
En este instructivo, se usa Cloud Storage como la fuente del evento. Para crear un bucket de almacenamiento, ejecuta el siguiente comando:
Console
- En la consola de Google Cloud, ve a la página Buckets.
- Haz clic en Crear bucket.
- Ingresa la información de tu bucket y haz clic en Continuar para completar cada paso:
- Ingresa un nombre único. Por ejemplo,
eventarcbucket
. - Selecciona Región como el Tipo de ubicación.
- Selecciona us-central1 (Iowa) como la Ubicación.
- Selecciona Estándar para clase de almacenamiento predeterminada.
- En Control de acceso, selecciona Uniforme.
- Ingresa un nombre único. Por ejemplo,
- Haz clic en Crear.
gcloud
gcloud storage buckets create gs://events-tutorial-PROJECT_ID/ --location=$REGION
Después de crear la fuente del evento, puedes implementar el servicio del receptor de eventos en Cloud Run.
Implementa el servicio del receptor de eventos en Cloud Run
Implementa un servicio de Cloud Run que reciba y registre eventos. Para implementar el servicio del receptor de eventos de muestra, haz lo siguiente:
Console
- Clona el repositorio de muestra en tu cuenta de GitHub:
- En GitHub, navega hasta GoogleCloudPlatform/golang-samples
- Haz clic en Fork.
- Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.
- En GitHub, navega hasta GoogleCloudPlatform/java-docs-samples.
- Haz clic en Fork.
- Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.
- En GitHub, navega hasta GoogleCloudPlatform/dotnet-docs-samples.
- Haz clic en Fork.
- Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.
- En GitHub, navega hasta GoogleCloudPlatform/nodejs-docs-samples.
- Haz clic en Fork.
- Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.
- En GitHub, navega hasta GoogleCloudPlatform/python-docs-samples.
- Haz clic en Fork.
- Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.
- En la consola de Google Cloud, ve a la página Servicios.
- Haz clic en Crear servicio para mostrar el formulario Crear servicio.
- Selecciona Implementar continuamente a partir de un repositorio.
Los cambios en tu repositorio de GitHub se compilan automáticamente en las imágenes de contenedor de Artifact Registry y se implementan en Cloud Run.
- Haz clic en Configurar con Cloud Build para abrir el formulario Configurar con Cloud Build.
- Si se te solicita, habilita la API de Cloud Build y la API de Artifact Analysis.
- Selecciona GitHub como Proveedor de repositorio (Repository Provider).
- Si se te solicita, haz clic en Instalar Google Cloud Build.
- Selecciona el repositorio de GitHub que bifurcaste como el repositorio.
- Haz clic en Siguiente.
- En el campo Rama, ingresa
^main$
. - Selecciona Dockerfile como el Tipo de compilación y proporciona la ubicación de origen del Dockerfile:
eventarc/audit-storage/Dockerfile
o
eventarc/audit_storage/Dockerfile
(Go)
- Haz clic en Guardar.
- En el formulario Crear servicio, ingresa un nombre de servicio.
Por ejemplo,
helloworld-events
- Selecciona us-central1(Iowa) como la región en la que quieres que se ubique el servicio.
- Selecciona cualquiera de las opciones de Ingress en función del tráfico de entrada que deseas permitir en el servicio de Cloud Run.
- Selecciona Solicitar autenticación.
- Haz clic en Crear.
Go
Java
.NET
Node.js
Python
gcloud
- Clona el repositorio de GitHub:
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
- Compila el contenedor y súbelo a Cloud Build:
gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
- Implementa la imagen del contenedor en Cloud Run:
gcloud run deploy $SERVICE_NAME \ --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
Cuando se te solicite permitir invocaciones no autenticadas, ingresa
n
.Cuando la implementación se realiza correctamente, la línea de comandos muestra la URL del servicio.
Ahora que implementaste el servicio del receptor de eventos llamado helloworld-events
en Cloud Run, puedes configurar el activador.
Crea un activador de Eventarc
El activador de Eventarc enviará eventos desde el bucket de Cloud Storage al servicio helloworld-events
de Cloud Run.
Console
- En la consola de Google Cloud, ve a la página Activadores.
- Haz clic en Crear activador.
- Escribe un nombre de activador.
Este es el ID del activador y debe comenzar con una letra. Puede contener hasta 63 letras en minúscula, números o guiones.
- Selecciona un tipo de activador:
- Propio: Filtra los eventos enviados desde los proveedores de Google Cloud (directamente o a través de entradas de Registros de auditoría de Cloud) o proveedores con mensajes de Pub/Sub.
- De terceros: Filtra los eventos enviados desde proveedores externos.
- En la lista Proveedor del evento, selecciona Cloud Storage como el origen de los eventos.
- En la lista Tipo de evento, selecciona storage.objects.create.
- En la lista Región, selecciona us-central1 como la región desde la que recibirás los eventos.
- Selecciona la Cuenta de servicio que creaste. Por ejemplo,
SERVICE_ACCOUNT_ID@PROJECT_ID
.iam.gserviceaccount.com. - En la lista Destino del evento, selecciona Cloud Run.
- En la lista Seleccionar un servicio de Cloud Run, selecciona helloworld-events.
- Haz clic en Crear. Ten en cuenta que también puedes crear un activador de Eventarc con la página de la consola de Cloud Run.
gcloud
- Crea un activador que filtre los eventos de Cloud Storage y que use la cuenta de servicio que creaste:
Reemplazagcloud eventarc triggers create events-tutorial-trigger \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=sample-service-account@PROJECT_ID.iam.gserviceaccount.com
PROJECT_ID
por el ID del proyecto de Google Cloud.Donde:
type
: especifica que los registros de auditoría se crean cuando se cumplen los criterios de filtro del activador.serviceName
: el servicio que escribe el registro de auditoría, que es Cloud Storage.methodName
: la operación que se audita, que esstorage.objects.create
.
events-tutorial-trigger
. - Para confirmar que
events-tutorial-trigger
se creó de forma correcta, ejecuta el siguiente comando:gcloud eventarc triggers list --location=$REGION
El activador,
events-tutorial-trigger
, se muestra con un destino de helloworld-events
.
Genera y visualiza un evento
- Para generar un evento, haz lo siguiente:
Console
- Crea un archivo de texto con el nombre de archivo
random.txt
y el texto “Hello World”. - En la consola de Google Cloud, ve a la página Buckets.
- Selecciona el bucket de almacenamiento que creaste.
- En la pestaña Objetos, haz clic en Subir archivos y sube el archivo
random.txt
.
gcloud
Sube un archivo de texto a Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
- Crea un archivo de texto con el nombre de archivo
- Sigue estos pasos para ver la entrada de registro:
- En la consola de Google Cloud, ve a la página Servicios.
- En la lista de servicios, haz clic en el nombre del servicio que creaste para ir a la página de Detalles del servicio.
- Hacer clic en la pestaña Registros para obtener los registros de solicitud y contenedor de todas las revisiones de este servicio. Puedes filtrar por nivel de gravedad del registro
- Busca una entrada de registro similar a lo siguiente:
En el ejemplo anterior,Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
es el nombre del bucket de Cloud Storage. -
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
- Busca una entrada de registro similar a lo siguiente:
En el ejemplo anterior,Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
es el nombre del bucket de Cloud Storage.
Console
gcloud
Implementaste un servicio de receptor de eventos en Cloud Run de forma correcta, creaste un activador de Eventarc, generaste un evento desde Cloud Storage y lo viste en los registros de Cloud Run.
Realiza una limpieza
Si bien Cloud Run no cobra cuando el servicio no se usa, es posible que se te cobre por almacenar la imagen de contenedor en Artifact Registry, almacenar archivos en el bucket de Cloud Storage y los recursos de Eventarc.Puedes hacer lo siguiente:
Como alternativa, puedes borrar el proyecto de Cloud para evitar que se generen cargos. Si borras tu proyecto de Google Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID