Recibir un evento de registros de auditoría de Cloud


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:

  1. Crea un segmento de Cloud Storage que será la fuente de eventos.

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

  3. Crea un activador de Eventarc.

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

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

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:

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

  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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify 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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

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

    Ir a Registros de auditoría

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

    Ir a Cuentas de servicio

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

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

  14. 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.
  15. Cuando hayas terminado de añadir roles, haz clic en Continuar y en Hecho 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. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. 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 the resourcemanager.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.

  6. Verify 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:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.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
  8. Install the Google Cloud CLI.

  9. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  10. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  11. 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 the resourcemanager.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.

  12. Verify that billing is enabled for your Google Cloud project.

  13. 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 the serviceusage.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
  14. Actualiza los componentes de gcloud:
    gcloud components update
  15. Inicia sesión con tu cuenta:
    gcloud auth login
    
  16. 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
  17. Para configurar qué acceso a datos se registra en los registros de auditoría, habilita los tipos de registro ADMIN_READ, DATA_READ y DATA_WRITE del servicio storage.googleapis.com:
    1. 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
    2. 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
    3. Escribe la nueva política de gestión de identidades y accesos:
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      Si el comando anterior informa de un conflicto con otro cambio, repite estos pasos, empezando por leer la política de IAM del proyecto.
  18. 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 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.
  19. Para confirmar que se ha creado sample-service-account, ejecuta el siguiente comando:
    gcloud iam service-accounts list
    La salida debería ser similar a la siguiente:
    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
  20. 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 Cloud

    Para 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.
  21. Crear un repositorio estándar de Artifact Registry

    Crea un repositorio estándar de Artifact Registry para almacenar tu imagen de contenedor.

    Consola

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

      Ir a Repositorios

    2. Haz clic en Crear repositorio.
    3. Configura tu repositorio:
      1. Introduce un nombre único.
      2. En Formato, elige Docker.
      3. En Modo, elige Estándar.
      4. En Tipo de ubicación, elige Región.
      5. En la lista Región, selecciona us-central1 (Iowa).
    4. Acepta los demás valores predeterminados y haz clic en Crear.

    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

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

      Ir a Contenedores

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

    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

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

      1. En GitHub, ve a GoogleCloudPlatform/golang-samples.
      2. Haz clic en Bifurcar.
      3. Captura de pantalla del botón Fork.
      4. Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.

      Java

      1. En GitHub, ve a GoogleCloudPlatform/java-docs-samples.
      2. Haz clic en Bifurcar.
      3. Captura de pantalla del botón Fork.
      4. Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.

      .NET

      1. En GitHub, ve a GoogleCloudPlatform/dotnet-docs-samples.
      2. Haz clic en Bifurcar.
      3. Captura de pantalla del botón Fork.
      4. Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.

      Node.js

      1. En GitHub, ve a GoogleCloudPlatform/nodejs-docs-samples.
      2. Haz clic en Bifurcar.
      3. Captura de pantalla del botón Fork.
      4. Si se te pide, selecciona la ubicación en la que quieras bifurcar el repositorio.

      Python

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

    5. Haz clic en Crear servicio para que se muestre el formulario Crear servicio.
    6. 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.

    7. Haz clic en Configurar con Cloud Build para abrir el formulario Configurar con Cloud Build.
      1. Si se te solicita, habilita la API Cloud Build y la API Artifact Analysis.
      2. Selecciona GitHub como proveedor de repositorios.
      3. Si se te pide, haz clic en Instalar Google Cloud Build.
      4. Selecciona el repositorio de GitHub que has bifurcado como Repositorio.
      5. Haz clic en Siguiente.
      6. En el campo Branch (Rama), introduce ^main$.
      7. 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)
      8. Haz clic en Guardar.
    8. En el formulario Crear servicio, introduce un nombre para el servicio. Por ejemplo, helloworld-events.
    9. Selecciona us-central1(Iowa) como región en la que quieres que se ubique tu servicio.
    10. Selecciona cualquiera de las opciones de Entrada en función del tráfico de entrada que quieras permitir en el servicio de Cloud Run.
    11. Selecciona Pedir 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. Crea el contenedor y súbelo a Cloud Build:
      gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
      
    3. 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.

    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

    1. En la Google Cloud consola, ve a la página Triggers (Activadores).

      Ir a Activadores

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

    4. 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.
    5. En la lista Proveedor de eventos, seleccione Cloud Storage como fuente de eventos.
    6. En la lista Tipo de evento, selecciona storage.objects.create.
    7. En la lista Región, selecciona us-central1 como región de la que quieres recibir eventos.
    8. Selecciona la cuenta de servicio que has creado. 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 eventos de Cloud Storage y que use la cuenta de servicio que has creado:
      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
      Sustituye 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 es storage.objects.create.
      De esta forma, se crea un activador llamado events-tutorial-trigger.
    2. Para confirmar que events-tutorial-trigger se ha creado correctamente, ejecuta el siguiente comando:
      gcloud eventarc triggers list --location=$REGION
    3. El activador events-tutorial-trigger se muestra con un objetivo de helloworld-events.

    Generar y ver un evento

    1. Para generar un evento, haz lo siguiente:

      Consola

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

        Ir a Contenedores

      3. Selecciona el segmento de almacenamiento que has creado.
      4. 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
    2. Para ver la entrada del registro, sigue estos pasos:
    3. Consola

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

        Ir a Servicios

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

    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:

    1. Elimina la imagen de tu contenedor.

    2. Elimina el segmento de almacenamiento.

    3. Elimina el activador de Eventarc.

    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

    Siguientes pasos