Recibir un evento de Registros de auditoría de Cloud


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:

  1. Crear un bucket de Cloud Storage para que sea la fuente del evento

  2. Implementar un servicio de receptor de eventos en Cloud Run

  3. Crear un activador de Eventarc.

  4. 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. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

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:

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

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.

    Enable the APIs

  8. 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:

    Ir a Registros de auditoría

  9. En la consola de Google Cloud, ve a la página Cuentas de servicio.

    Ir a Cuentas de servicio

  10. Haz clic en Crear cuenta de servicio.
  11. 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.

  12. Opcional: Ingresa una descripción de la cuenta de servicio.
  13. 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.

  14. 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.
  15. Cuando hayas terminado de agregar funciones, haz clic en Continuar y Listo para terminar de crear la cuenta de servicio.

gcloud

  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. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 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
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. 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
  12. Actualiza los componentes de gcloud:
    gcloud components update
  13. Accede con tu cuenta:
    gcloud auth login
    
  14. 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
  15. Para configurar qué acceso a los datos se registra en tus registros de auditoría, habilita los tipos de registro ADMIN_READ, DATA_READ y DATA_WRITE para el servicio storage.googleapis.com:
    1. 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
    2. 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
    3. 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.
  16. Crea una cuenta de servicio para el proyecto:
    gcloud iam service-accounts create sample-service-account \
        --description="A sample service account" \
        --display-name="Sample service account"
    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.
  17. Para confirmar que se creó sample-service-account, ejecuta lo siguiente:
    gcloud iam service-accounts list
    El resultado debería ser similar al siguiente ejemplo:
    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
  18. 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 del 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

  1. En la consola de Google Cloud, ve a la página Repositorios.

    Ir a Repositorios

  2. Haz clic en Crear repositorio.
  3. Configura tu repositorio:
    1. Ingresa un nombre único.
    2. En Formato, elige Docker.
    3. En Modo, selecciona Estándar.
    4. En Tipo de ubicación, elige Región.
    5. En la lista Región, selecciona us-central1 (Iowa).
  4. 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

  1. En la consola de Google Cloud, ve a la página Buckets.

    Ir a Buckets

  2. Haz clic en Crear bucket.
  3. Ingresa la información de tu bucket y haz clic en Continuar para completar cada paso:
    1. Ingresa un nombre único. Por ejemplo, eventarcbucket.
    2. Selecciona Región como el Tipo de ubicación.
    3. Selecciona us-central1 (Iowa) como la Ubicación.
    4. Selecciona Estándar para clase de almacenamiento predeterminada.
    5. En Control de acceso, selecciona Uniforme.
  4. Haz clic en Crear.

gcloud

gsutil mb -l $REGION gs://events-tutorial-PROJECT_ID/

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

  1. Clona el repositorio de muestra en tu cuenta de GitHub:
  2. Go

    1. En GitHub, navega hasta GoogleCloudPlatform/golang-samples
    2. Haz clic en Fork.
    3. Captura de pantalla del botón Bifurcación
    4. Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.

    Java

    1. En GitHub, navega hasta GoogleCloudPlatform/java-docs-samples.
    2. Haz clic en Fork.
    3. Captura de pantalla del botón Bifurcación
    4. Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.

    .NET

    1. En GitHub, navega hasta GoogleCloudPlatform/dotnet-docs-samples.
    2. Haz clic en Fork.
    3. Captura de pantalla del botón Bifurcación
    4. Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.

    Node.js

    1. En GitHub, navega hasta GoogleCloudPlatform/nodejs-docs-samples.
    2. Haz clic en Fork.
    3. Captura de pantalla del botón Bifurcación
    4. Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.

    Python

    1. En GitHub, navega hasta GoogleCloudPlatform/python-docs-samples.
    2. Haz clic en Fork.
    3. Captura de pantalla del botón Bifurcación
    4. Si se te solicita, selecciona la ubicación en la que deseas bifurcar el repositorio.
  3. En la consola de Google Cloud, ve a la página Servicios.
  4. Ir a Servicios

  5. Haz clic en Crear servicio para mostrar el formulario Crear servicio.
  6. Selecciona Implementar continuamente a partir de un repositorio.

    Los cambios en tu repositorio de GitHub se compilan automáticamente en imágenes de contenedor en Artifact Registry y se implementan en Cloud Run.

  7. Haz clic en Configurar con Cloud Build para abrir el formulario Configurar con Cloud Build.
    1. Si se te solicita, habilita la API de Cloud Build y la API de Artifact Analysis.
    2. Selecciona GitHub como Proveedor de repositorio (Repository Provider).
    3. Si se te solicita, haz clic en Instalar Google Cloud Build.
    4. Selecciona el repositorio de GitHub que bifurcaste como el repositorio.
    5. Haz clic en Siguiente.
    6. En el campo Rama, ingresa ^main$.
    7. 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)
    8. Haz clic en Guardar.
  8. En el formulario Crear servicio, ingresa un nombre de servicio. Por ejemplo, helloworld-events
  9. Selecciona us-central1(Iowa) como la región en la que quieres que se ubique el servicio.
  10. Selecciona cualquiera de las opciones de Ingress en función del tráfico de entrada que deseas permitir en el servicio de Cloud Run.
  11. Selecciona Solicitar autenticación.
  12. Haz clic en Crear.

gcloud

  1. 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
  2. Compila el contenedor y súbelo a Cloud Build:
    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
    
  3. 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

  1. En la consola de Google Cloud, ve a la página Activadores.

    Ir a Activadores

  2. Haz clic en Crear activador.
  3. 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.

  4. 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.
  5. En la lista Proveedor del evento, selecciona Cloud Storage como el origen de los eventos.
  6. En la lista Tipo de evento, selecciona storage.objects.create.
  7. En la lista Región, selecciona us-central1 como la región desde la que recibirás los eventos.
  8. Selecciona la Cuenta de servicio que creaste. Por ejemplo, SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com.
  9. En la lista Destino del evento, selecciona Cloud Run.
  10. En la lista Seleccionar un servicio de Cloud Run, selecciona helloworld-events.
  11. Haz clic en Crear.
  12. Ten en cuenta que también puedes crear un activador de Eventarc con la página de la consola de Cloud Run.

gcloud

  1. Crea un activador que filtre los eventos de Cloud Storage y que use la cuenta de servicio que creaste:
    gcloud 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
    Reemplaza 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 es storage.objects.create.
    Esto crea un activador llamado events-tutorial-trigger.
  2. Para confirmar que events-tutorial-trigger se creó de forma correcta, ejecuta el siguiente comando:
    gcloud eventarc triggers list --location=$REGION
  3. El activador, events-tutorial-trigger, se muestra con un destino de helloworld-events.

Genera y visualiza un evento

  1. Para generar un evento, haz lo siguiente:

    Console

    1. Crea un archivo de texto con el nombre de archivo random.txt y el texto “Hello World”.
    2. En la consola de Google Cloud, ve a la página Buckets.

      Ir a Buckets

    3. Selecciona el bucket de almacenamiento que creaste.
    4. 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
    gsutil cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
  2. Sigue estos pasos para ver la entrada de registro:
  3. Console

    1. En la consola de Google Cloud, ve a la página Servicios.

      Ir a Servicios

    2. En la lista de servicios, haz clic en el nombre del servicio que creaste para ir a la página de Detalles del servicio.
    3. 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
    4. Busca una entrada de registro similar a lo siguiente:
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      En el ejemplo anterior, BUCKET_NAME es el nombre del bucket de Cloud Storage.

    gcloud

    1. gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
    2. Busca una entrada de registro similar a lo siguiente:
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      En el ejemplo anterior, BUCKET_NAME es el nombre del bucket de Cloud Storage.

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:

  1. Borrar tu imagen de contenedor.

  2. Borrar tu bucket de almacenamiento.

  3. Borrar el activador de Eventarc.

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

¿Qué sigue?