En este tutorial se explica cómo desplegar un servicio de Cloud Run autenticado que recibe eventos de Cloud Storage mediante registros de auditoría de Cloud. Sigue este tutorial para desplegar cargas de trabajo de producción. El activador de Eventarc filtra los eventos en función de las entradas de Registros de auditoría de Cloud. Para obtener más información, consulta Determinar filtros de eventos para registros de auditoría de Cloud.
Puedes completar este tutorial mediante la Google Cloud consola o la CLI de Google Cloud.
Objetivos
En este tutorial, aprenderás a hacer lo siguiente:
Crea un segmento de Cloud Storage que será la fuente de eventos.
Despliega un servicio de receptor de eventos en Cloud Run.
Crea un activador de Eventarc.
Genera un evento subiendo un archivo al segmento de Cloud Storage y míralo en los registros de Cloud Run.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
Es posible que las restricciones de seguridad definidas por tu organización te impidan completar los siguientes pasos. Para obtener información sobre cómo solucionar problemas, consulta el artículo Desarrollar aplicaciones en un entorno limitado Google Cloud .
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.
Ten en cuenta que, de forma predeterminada, los permisos de Cloud Build incluyen permisos para subir y descargar artefactos de Artifact Registry.
Permisos obligatorios
Para obtener los permisos que necesitas para completar este tutorial, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:
-
Editor de Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador de Cloud Run (
roles/run.admin
) -
Administrador de Eventarc (
roles/eventarc.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.
Sigue estos pasos con la consola de Google Cloud o con gcloud CLI:
Consola
- 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.
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.
-
Verify 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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create 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.
-
Verify 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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Para configurar qué acceso a datos se registra en los registros de auditoría, habilita los tipos de registro Lectura de administrador, Lectura de datos y Escritura de datos en Google Cloud Storage:
-
En la Google Cloud consola, ve a la página Cuentas de servicio.
- Haz clic en Crear cuenta de servicio.
-
Escribe el nombre de la cuenta de servicio, que será el que se muestre en la Google Cloud consola.
La consola Google Cloud genera un ID de cuenta de servicio basado en este nombre. Edita el ID si es necesario. No podrás cambiarlo más adelante.
- Opcional: Escribe una descripción de la cuenta de servicio.
-
Si no quieres configurar los controles de acceso ahora, haz clic en Hecho para terminar de crear la cuenta de servicio.
Para configurar los controles de acceso ahora, haga clic en Crear y continuar y siga con el siguiente paso.
- Selecciona los roles Invocador de Cloud Run y
Receptor de eventos de Eventarc para concederlos en el proyecto a la cuenta de servicio asociada a tu activador de Eventarc.
Para hacer pruebas, 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 Conceder permisos de servicio de Cloud Run.
Ten en cuenta que, si creas un activador para un servicio de Cloud Run autenticado sin conceder el rol Invocador de Cloud Run, el activador se creará correctamente y estará activo. Sin embargo, el activador no funcionará como debería y aparecerá un mensaje similar al siguiente en los registros:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- Cuando hayas terminado de añadir roles, haz clic en Continuar y en Hecho 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.
-
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.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.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.
-
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.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.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
- Inicia sesión con tu cuenta:
gcloud auth login
- Defina las variables de configuración que se usan en este tutorial:
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 datos se registra en los registros de auditoría, habilita los tipos de registro
ADMIN_READ
,DATA_READ
yDATA_WRITE
del serviciostorage.googleapis.com
:- 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
, añadiendo o cambiando 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 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:
- Crea una cuenta de servicio para el proyecto:
Después de crear una cuenta de servicio, pueden pasar hasta siete minutos antes de que puedas usarla. Si intentas usar una cuenta de servicio inmediatamente 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 ha creado
sample-service-account
, ejecuta el siguiente comando: La salida debería ser similar a la siguiente: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
- Concede los roles Invocador de Cloud Run (
run.invoker
) y Receptor de eventos de Eventarc (roles/eventarc.eventReceiver
) en el proyecto a la cuenta de servicio asociada a tu 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"
Sustituye
PROJECT_ID
por el ID de tu proyecto. Google CloudPara hacer pruebas, esto otorga el rol de invocador de Cloud Run a todos los servicios y trabajos de Cloud Run del proyecto. Sin embargo, puedes otorgar el rol al servicio. Para obtener más información, consulta Conceder permisos de servicio de Cloud Run.
Ten en cuenta que, si creas un activador para un servicio de Cloud Run autenticado sin conceder el rol Invocador de Cloud Run, el activador se creará correctamente y estará activo. Sin embargo, el activador no funcionará como debería y aparecerá un mensaje similar al siguiente en los registros:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- En la Google Cloud consola, ve a la página Repositorios.
- Haz clic en Crear repositorio.
- Configura tu repositorio:
- Introduce un nombre único.
- En Formato, elige Docker.
- En Modo, elige Estándar.
- En Tipo de ubicación, elige Región.
- En la lista Región, selecciona us-central1 (Iowa).
- Acepta los demás valores predeterminados y haz clic en Crear.
- En la Google Cloud consola, ve a la página Buckets.
- Haz clic en Crear segmento.
- Introduce la información del contenedor y haz clic en Continuar para completar cada paso:
- Introduce un nombre único. Por ejemplo,
eventarcbucket
. - Seleccione Región como Tipo de ubicación.
- Selecciona us-central1 (Iowa) como Ubicación.
- Selecciona Estándar como clase de almacenamiento predeterminada.
- Selecciona Uniforme en Control de acceso.
- Introduce un nombre único. Por ejemplo,
- Haz clic en Crear.
- Clona el repositorio de ejemplo en tu cuenta de GitHub:
- En GitHub, ve a GoogleCloudPlatform/golang-samples.
- Haz clic en Bifurcar.
- Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.
- En GitHub, ve a GoogleCloudPlatform/java-docs-samples.
- Haz clic en Bifurcar.
- Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.
- En GitHub, ve a GoogleCloudPlatform/dotnet-docs-samples.
- Haz clic en Bifurcar.
- Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.
- En GitHub, ve a GoogleCloudPlatform/nodejs-docs-samples.
- Haz clic en Bifurcar.
- Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.
- En GitHub, ve a GoogleCloudPlatform/python-docs-samples.
- Haz clic en Bifurcar.
- Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.
- En la Google Cloud consola, ve a la página Servicios.
- Haz clic en Crear servicio para que se muestre el formulario Crear servicio.
- Selecciona Desplegar continuamente desde un repositorio.
Los cambios realizados en el repositorio de GitHub se integran automáticamente en imágenes de contenedor en Artifact Registry y se despliegan 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 Cloud Build y la API Artifact Analysis.
- Selecciona GitHub como proveedor de repositorios.
- Si se te pide, haz clic en Instalar Google Cloud Build.
- Selecciona el repositorio de GitHub que has bifurcado como Repositorio.
- Haz clic en Siguiente.
- En el campo Branch (Rama), introduce
^main$
. - Seleccione Dockerfile como Tipo de compilación y proporcione la ubicación de origen del Dockerfile:
eventarc/audit-storage/Dockerfile
o
eventarc/audit_storage/Dockerfile
(Ir)
- Haz clic en Guardar.
- En el formulario Crear servicio, introduce un nombre para el servicio.
Por ejemplo,
helloworld-events
. - Selecciona us-central1(Iowa) como región en la que quieres que se ubique tu servicio.
- Selecciona cualquiera de las opciones de Entrada en función del tráfico de entrada que quieras permitir en el servicio de Cloud Run.
- Selecciona Pedir autenticación.
- Haz clic en Crear.
- 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
- Crea el contenedor y súbelo a Cloud Build:
gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
- Despliega la imagen de contenedor en Cloud Run:
gcloud run deploy $SERVICE_NAME \ --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
Cuando se te pida que permitas las invocaciones sin autenticar, introduce
n
.Si la implementación se realiza correctamente, la línea de comandos muestra la URL del servicio.
- En la Google Cloud consola, ve a la página Triggers (Activadores).
- Haz clic en Crear activador.
- Escribe un Nombre del activador.
Es el ID del activador y debe empezar por una letra. Puede contener hasta 63 letras minúsculas, números o guiones.
- Selecciona un Tipo de activador:
- Propios: filtra los eventos enviados desde proveedores de Google Cloud(directamente o a través de entradas de registros de auditoría de Cloud) o proveedores que usan mensajes de Pub/Sub.
- De terceros: filtra los eventos enviados por proveedores externos.
- En la lista Proveedor de eventos, seleccione Cloud Storage como fuente de eventos.
- En la lista Tipo de evento, selecciona storage.objects.create.
- En la lista Región, selecciona us-central1 como región de la que quieres recibir eventos.
- Selecciona la cuenta de servicio que has creado. 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.
- Crea un activador que filtre eventos de Cloud Storage y que use la cuenta de servicio que has creado:
Sustituyegcloud 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 Google Cloud ID del proyecto.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 está auditando, que esstorage.objects.create
.
events-tutorial-trigger
. - Para confirmar que
events-tutorial-trigger
se ha creado correctamente, ejecuta el siguiente comando:gcloud eventarc triggers list --location=$REGION
El activador - Para generar un evento, haz lo siguiente:
Consola
- Crea un archivo de texto con el nombre
random.txt
y el texto "Hello World". - En la Google Cloud consola, ve a la página Buckets.
- Selecciona el segmento de almacenamiento que has creado.
- En la pestaña Objetos, haga clic en Subir archivos y suba 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
- Para ver la entrada del registro, sigue estos pasos:
- En la Google Cloud consola, ve a la página Servicios.
- En la lista de servicios, haga clic en el nombre del servicio que ha creado para ir a la página Detalles del servicio.
- Haz clic en la pestaña Registros para obtener los registros de solicitudes y contenedores de todas las revisiones de este servicio. Puedes filtrar por nivel de gravedad del registro.
- Busca una entrada de registro similar a la siguiente:
dondeDetected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
es el nombre del segmento 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 la siguiente:
dondeDetected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
es el nombre del segmento de Cloud Storage.
Crear un repositorio estándar de Artifact Registry
Crea un repositorio estándar de Artifact Registry para almacenar tu imagen de contenedor.Consola
gcloud
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Sustituye REPOSITORY
por un nombre único para el repositorio de Artifact Registry.
Crea un segmento de Cloud Storage
En este tutorial se usa Cloud Storage como origen de eventos. Para crear un segmento de almacenamiento, sigue estos pasos:
Consola
gcloud
gcloud storage buckets create gs://events-tutorial-PROJECT_ID/ --location=$REGION
Una vez creado el origen del evento, puedes implementar el servicio receptor de eventos en Cloud Run.
Desplegar el servicio de receptor de eventos en Cloud Run
Despliega un servicio de Cloud Run que recibe y registra eventos. Para implementar el servicio de receptor de eventos de ejemplo, haz lo siguiente:
Consola
Go

Java

.NET

Node.js

Python

gcloud
Ahora que has desplegado tu servicio de receptor de eventos llamado helloworld-events
en Cloud Run, puedes configurar el activador.
Crear un activador de Eventarc
El activador de Eventarc enviará eventos del segmento de Cloud Storage al servicio de Cloud Run helloworld-events
.
Consola
gcloud
events-tutorial-trigger
se muestra con un objetivo de helloworld-events
.
Generar y ver un evento
Consola
gcloud
Has desplegado correctamente un servicio de receptor de eventos en Cloud Run, has creado un activador de Eventarc, has generado un evento desde Cloud Storage y lo has visto en los registros de Cloud Run.
Limpieza
Aunque Cloud Run no cobra cuando el servicio no está en uso, es posible que se te apliquen cargos por almacenar la imagen de contenedor en Artifact Registry, almacenar archivos en tu segmento de Cloud Storage y recursos de Eventarc.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