Recopila registros de auditoría de Oracle Cloud Infrastructure

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de auditoría de Oracle Cloud Infrastructure a Google Security Operations con Amazon S3.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Es la instancia de Google SecOps.
  • Cuenta de Oracle Cloud Infrastructure con permisos para crear y administrar lo siguiente:
    • Centro de Service Connector
    • Oracle Functions
    • Vaults y Secrets
    • Políticas de IAM y grupos dinámicos
    • Logging
  • Cuenta de AWS con permisos para crear y administrar lo siguiente:
    • Buckets de S3
    • Usuarios y políticas de IAM

Crea un bucket de Amazon S3

  1. Accede a la consola de administración de AWS.
  2. Ve a S3 > Crear bucket.
  3. Proporciona los siguientes detalles de configuración:
    • Nombre del bucket: Ingresa un nombre único (por ejemplo, oci-audit-logs-bucket).
    • Región de AWS: Selecciona una región (por ejemplo, us-east-1).
    • Mantén la configuración predeterminada para las demás opciones.
  4. Haz clic en Crear bucket.
  5. Guarda el Nombre y la Región del bucket para usarlos más adelante.

Crea un usuario de IAM en AWS para OCI Functions

  1. Accede a la consola de administración de AWS.
  2. Ve a IAM > Usuarios > Agregar usuarios.
  3. Proporciona los siguientes detalles de configuración:
    • Nombre de usuario: Ingresa un nombre de usuario (por ejemplo, oci-functions-s3-user).
    • Tipo de acceso: Selecciona Clave de acceso: Acceso programático.
  4. Haz clic en Next: Permissions.
  5. Haz clic en Adjuntar las políticas existentes de forma directa.
  6. Busca y selecciona la política AmazonS3FullAccess.
  7. Haz clic en Siguiente: Etiquetas.
  8. Haz clic en Siguiente: Revisar.
  9. Haz clic en Crear usuario.
  10. Importante: En la página de confirmación, copia y guarda las siguientes credenciales:
    • ID de clave de acceso
    • Clave de acceso secreta

Almacena las credenciales de AWS en OCI Vault

Para almacenar de forma segura las credenciales de AWS, debes usar Oracle Cloud Infrastructure Vault en lugar de codificarlas de forma rígida en el código de la función.

Crea una bóveda y una clave de encriptación maestra

  1. Accede a la consola de Oracle Cloud.
  2. Ve a Identidad y seguridad > Vault.
  3. Si no tienes una bóveda, haz clic en Crear bóveda.
  4. Proporciona los siguientes detalles de configuración:
    • Create in Compartment: Selecciona tu compartimento.
    • Nombre: Ingresa un nombre (por ejemplo, oci-functions-vault).
  5. Haz clic en Crear bóveda.
  6. Una vez que se cree la bóveda, haz clic en su nombre para abrirla.
  7. En Claves de encriptación maestras, haz clic en Crear clave.
  8. Proporciona los siguientes detalles de configuración:
    • Modo de protección: Software
    • Nombre: Ingresa un nombre (por ejemplo, oci-functions-key).
    • Forma de la clave: Algoritmo: AES
    • Forma de la clave: Longitud: 256 bits
  9. Haga clic en Crear clave.

Crea secretos para las credenciales de AWS

  1. En la bóveda, en Secrets, haz clic en Crear Secret.
  2. Proporciona los siguientes detalles de configuración para la clave de acceso de AWS:
    • Create in Compartment: Selecciona tu compartimento.
    • Nombre: aws-access-key
    • Descripción: Clave de acceso de AWS para S3
    • Clave de encriptación: Selecciona la clave de encriptación maestra que creaste.
    • Contenido del tipo de Secret: Texto sin formato
    • Secret Contents: Pega tu ID de clave de acceso de AWS.
  3. Haz clic en Crear secreto.
  4. Copia y guarda el OCID de este secreto (se ve como ocid1.vaultsecret.oc1...).
  5. Vuelve a hacer clic en Crear secreto para crear el segundo secreto.
  6. Proporciona los siguientes detalles de configuración para la clave secreta de AWS:
    • Create in Compartment: Selecciona tu compartimento.
    • Nombre: aws-secret-key
    • Description: Clave secreta de AWS para S3
    • Clave de encriptación: Selecciona la misma clave de encriptación maestra.
    • Contenido del tipo de Secret: Texto sin formato
    • Secret Contents: Pega tu clave de acceso secreta de AWS.
  7. Haz clic en Crear secreto.
  8. Copia y guarda el OCID de este secreto.

Crea un grupo dinámico para las funciones de OCI

  1. Accede a la consola de Oracle Cloud.
  2. Ve a Identidad y seguridad > Identidad > Grupos dinámicos.
  3. Haz clic en Crear un grupo dinámico.
  4. Proporciona los siguientes detalles de configuración:

    • Nombre: oci-functions-dynamic-group
    • Descripción: Grupo dinámico para que las funciones de OCI accedan a los secretos de Vault
    • Reglas de coincidencia: Ingresa la siguiente regla (reemplaza <your_compartment_ocid> por el OCID de tu compartimento):

      ALL {resource.type = 'fnfunc', resource.compartment.id = '<your_compartment_ocid>'}
      
  5. Haz clic en Crear.

Crea una política de IAM para el acceso a Vault

  1. Accede a la consola de Oracle Cloud.
  2. Ve a Identidad y seguridad > Identidad > Políticas.
  3. Selecciona el compartimento en el que deseas crear la política.
  4. Haz clic en Crear política.
  5. Proporciona los siguientes detalles de configuración:

    • Nombre: oci-functions-vault-access-policy
    • Descripción: Permite que OCI Functions lea secretos de Vault
    • Creador de políticas: Activa Mostrar editor manual.
    • Sentencias de política: Ingresa lo siguiente (reemplaza <compartment_name> por el nombre de tu compartimento):

      allow dynamic-group oci-functions-dynamic-group to manage secret-family in compartment <compartment_name>
      
  6. Haz clic en Crear.

Crea una aplicación de OCI Function

  1. Accede a la consola de Oracle Cloud.
  2. Ve a Servicios para desarrolladores > Aplicaciones (en Funciones).
  3. Haz clic en Crear aplicación.
  4. Proporciona los siguientes detalles de configuración:
    • Nombre: Ingresa un nombre (por ejemplo, oci-logs-to-s3-app).
    • VCN: Selecciona una VCN en tu compartimento.
    • Subredes: Selecciona una o más subredes.
  5. Haz clic en Crear.

Crea e implementa la función de OCI

  1. En la consola de Oracle Cloud, haz clic en el ícono de Cloud Shell en la esquina superior derecha.
  2. Espera a que se inicialice Cloud Shell.

Crea la función

  1. En Cloud Shell, crea un directorio nuevo para tu función:

    mkdir pushlogs
    cd pushlogs
    
  2. Inicializa una nueva función de Python:

    fn init --runtime python
    
  3. Esto crea tres archivos: func.py, func.yaml y requirements.txt.

Actualiza func.py

  • Reemplaza el contenido de func.py con el siguiente código:

    import io
    import json
    import logging
    import boto3
    import oci
    import base64
    import os
    from fdk import response
    
    def handler(ctx, data: io.BytesIO = None):
        """
        OCI Function to push audit logs from OCI Logging to AWS S3
        """
        try:
            # Parse incoming log data from Service Connector
            funDataStr = data.read().decode('utf-8')
            funData = json.loads(funDataStr)
    
            logging.getLogger().info(f"Received {len(funData)} log entries")
    
            # Replace these with your actual OCI Vault secret OCIDs
            secret_key_id = "ocid1.vaultsecret.oc1..<your_secret_key_ocid>"
            access_key_id = "ocid1.vaultsecret.oc1..<your_access_key_ocid>"
    
            # Replace with your S3 bucket name
            s3_bucket_name = "oci-audit-logs-bucket"
    
            # Use Resource Principals for OCI authentication
            signer = oci.auth.signers.get_resource_principals_signer()
            secret_client = oci.secrets.SecretsClient({}, signer=signer)
    
            def read_secret_value(secret_client, secret_id):
                """Retrieve and decode secret value from OCI Vault"""
                response = secret_client.get_secret_bundle(secret_id)
                base64_secret_content = response.data.secret_bundle_content.content
                base64_secret_bytes = base64_secret_content.encode('ascii')
                base64_message_bytes = base64.b64decode(base64_secret_bytes)
                secret_content = base64_message_bytes.decode('ascii')
                return secret_content
    
            # Retrieve AWS credentials from OCI Vault
            awsaccesskey = read_secret_value(secret_client, access_key_id)
            awssecretkey = read_secret_value(secret_client, secret_key_id)
    
            # Initialize boto3 session with AWS credentials
            session = boto3.Session(
                aws_access_key_id=awsaccesskey,
                aws_secret_access_key=awssecretkey
            )
            s3 = session.resource('s3')
    
            # Process each log entry
            for i in range(0, len(funData)):
                # Use timestamp as filename
                filename = funData[i].get('time', f'log_{i}')
                # Remove special characters from filename
                filename = filename.replace(':', '-').replace('.', '-')
    
                logging.getLogger().info(f"Processing log entry: {filename}")
    
                # Write log entry to temporary file
                temp_file = f'/tmp/{filename}.json'
                with open(temp_file, 'w', encoding='utf-8') as f:
                    json.dump(funData[i], f, ensure_ascii=False, indent=4)
    
                # Upload to S3
                s3_key = f'{filename}.json'
                s3.meta.client.upload_file(
                    Filename=temp_file,
                    Bucket=s3_bucket_name,
                    Key=s3_key
                )
    
                logging.getLogger().info(f"Uploaded {s3_key} to S3 bucket {s3_bucket_name}")
    
                # Clean up temporary file
                os.remove(temp_file)
    
            return response.Response(
                ctx,
                response_data=json.dumps({
                    "status": "success",
                    "processed_logs": len(funData)
                }),
                headers={"Content-Type": "application/json"}
            )
    
        except Exception as e:
            logging.getLogger().error(f"Error processing logs: {str(e)}")
            return response.Response(
                ctx,
                response_data=json.dumps({
                    "status": "error",
                    "message": str(e)
                }),
                headers={"Content-Type": "application/json"},
                status_code=500
            )
    
    • Reemplaza secret_key_id por el OCID secreto real de tu caja fuerte para la clave secreta de AWS.
    • Reemplaza access_key_id por el OCID secreto real de tu bóveda para la clave de acceso de AWS.
    • Reemplaza s3_bucket_name por el nombre real de tu bucket de S3.

Actualiza func.yaml

Reemplaza el contenido de func.yaml con lo siguiente:

  schema_version: 20180708
  name: pushlogs
  version: 0.0.1
  runtime: python
  build_image: fnproject/python:3.9-dev
  run_image: fnproject/python:3.9
  entrypoint: /python/bin/fdk /function/func.py handler
  memory: 256

Actualiza requirements.txt

  • Reemplaza el contenido de requirements.txt con lo siguiente:

    fdk>=0.1.56
    boto3
    oci
    

Implementa la función

  1. Configura el contexto de Fn para usar tu aplicación:

    fn use context <region-context>
    fn update context oracle.compartment-id <compartment-ocid>
    
  2. Sigue estos pasos para implementar la función:

    fn -v deploy --app oci-logs-to-s3-app
    
  3. Espera a que se complete la implementación. Deberías ver un resultado que indica que la función se implementó correctamente.

  4. Verifica que se haya creado la función:

    fn list functions oci-logs-to-s3-app
    

Crea un conector de servicio para enviar registros de auditoría de OCI a la función

  1. Accede a la consola de Oracle Cloud.
  2. Ve a Analytics & AI > Messaging > Service Connector Hub.
  3. Selecciona el compartimento en el que deseas crear el conector de servicio.
  4. Haz clic en Create Service Connector.

Configura los detalles del conector de servicio

  1. Proporciona los siguientes detalles de configuración:

Información del conector de servicio: * Nombre del conector: Ingresa un nombre descriptivo (por ejemplo, audit-logs-to-s3-connector). * Descripción: Descripción opcional (por ejemplo, "Reenvía los registros de auditoría de OCI a AWS S3"). * Compartment del recurso: Selecciona el compartimento.

Configurar la fuente

  1. En Configurar fuente, haz lo siguiente:
    • Fuente: Selecciona Logging.
    • Compartment: Selecciona el compartimento que contiene los registros de auditoría.
    • Log Group: Selecciona _Audit (este es el grupo de registros predeterminado para los registros de auditoría).
    • Registros: Haz clic en + Otro registro.
    • Selecciona el registro de auditoría de tu compartimiento (por ejemplo, _Audit_Include_Subcompartment).

Configurar objetivo

  1. En Configurar objetivo, haz lo siguiente:
    • Objetivo: Selecciona Funciones.
    • Compartment: Selecciona el compartimento que contiene la aplicación de la función.
    • Function Application: Selecciona oci-logs-to-s3-app (la aplicación que creaste antes).
    • Función: Selecciona pushlogs (la función que implementaste).

Configurar política

  1. En Configurar política, haz lo siguiente:

    • Revisa las instrucciones de la política de IAM requeridas que se muestran.
    • Haz clic en Crear para crear automáticamente las políticas requeridas.
  2. Haz clic en Crear para crear el conector de servicio.

  3. Espera a que se cree y active el conector de servicio. El estado debería cambiar a Activo.

Verifica que los registros se envíen a AWS S3

  1. Accede a la consola de Oracle Cloud.
  2. Realiza algunas acciones que generen registros de auditoría (por ejemplo, crear o modificar un recurso).
  3. Espera de 2 a 5 minutos para que se procesen los registros.
  4. Accede a la consola de administración de AWS.
  5. Ve a S3 > Buckets.
  6. Haz clic en tu bucket (por ejemplo, oci-audit-logs-bucket).
  7. Verifica que los archivos de registro JSON aparezcan en el bucket.

Configura el bucket de AWS S3 y el IAM para Google SecOps

Crea un usuario de IAM para Chronicle

  1. Accede a la consola de administración de AWS.
  2. Ve a IAM > Usuarios > Agregar usuarios.
  3. Proporciona los siguientes detalles de configuración:
    • Nombre de usuario: Ingresa chronicle-s3-reader.
    • Tipo de acceso: Selecciona Clave de acceso: Acceso programático.
  4. Haz clic en Next: Permissions.
  5. Haz clic en Adjuntar las políticas existentes de forma directa.
  6. Busca y selecciona la política AmazonS3ReadOnlyAccess.
  7. Haz clic en Siguiente: Etiquetas.
  8. Haz clic en Siguiente: Revisar.
  9. Haz clic en Crear usuario.
  10. Haz clic en Descargar archivo CSV para guardar el ID de clave de acceso y la clave de acceso secreta.
  11. Haz clic en Cerrar.

Opcional: Crea una política de IAM personalizada para el acceso con privilegios mínimos

Si quieres restringir el acceso solo al bucket específico, haz lo siguiente:

  1. Ve a IAM > Políticas > Crear política.
  2. Haz clic en la pestaña JSON.
  3. Ingresa la siguiente política:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "s3:GetObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::oci-audit-logs-bucket",
            "arn:aws:s3:::oci-audit-logs-bucket/*"
          ]
        }
      ]
    }
    
    • Reemplaza oci-audit-logs-bucket por el nombre de tu bucket.
  4. Haz clic en Siguiente: Etiquetas.

  5. Haz clic en Siguiente: Revisar.

  6. Proporciona los siguientes detalles de configuración:

    • Nombre: chronicle-s3-read-policy
    • Descripción: Acceso de solo lectura al bucket de registros de auditoría de OCI
  7. Haz clic en Crear política.

  8. Regresa a IAM > Usuarios y selecciona el usuario chronicle-s3-reader.

  9. Haz clic en Agregar permisos > Adjuntar políticas directamente.

  10. Busca y selecciona chronicle-s3-read-policy.

  11. Quita la política AmazonS3ReadOnlyAccess si la agregaste antes.

  12. Haz clic en Agregar permisos.

Configura un feed en Google SecOps para transferir registros de auditoría de Oracle Cloud

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. En la siguiente página, haz clic en Configurar un solo feed.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Oracle Cloud Audit Logs).
  5. Selecciona Amazon S3 V2 como el Tipo de fuente.
  6. Selecciona Oracle Cloud Infrastructure como el Tipo de registro.
  7. Haz clic en Siguiente.
  8. Especifica valores para los siguientes parámetros de entrada:
    • URI de S3: Ingresa el URI del bucket de S3 (por ejemplo, s3://oci-audit-logs-bucket/).
    • Opción de eliminación de la fuente: Selecciona la opción de eliminación según tu preferencia:
      • Nunca: Se recomienda para pruebas y configuración inicial.
      • Borrar archivos transferidos: Borra los archivos después de la transferencia correcta (usa esta opción para producción y administrar los costos de almacenamiento).
    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
    • ID de clave de acceso: Ingresa el ID de clave de acceso del usuario de IAM de Chronicle que creaste.
    • Clave de acceso secreta: Ingresa la clave de acceso secreta del usuario de IAM de Chronicle que creaste.
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transmisión: Es la etiqueta que se aplicará a los eventos de este feed.
  9. Haz clic en Siguiente.
  10. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
data.request.headers.authorization.0 event.idm.read_only_udm.additional.fields Valor tomado de data.request.headers.authorization.0 y agregado como un par clave-valor en el que la clave es "Autorización de encabezados de solicitud".
data.compartmentId event.idm.read_only_udm.additional.fields Valor tomado de data.compartmentId y agregado como un par clave-valor en el que la clave es "compartmentId".
data.compartmentName event.idm.read_only_udm.additional.fields Valor tomado de data.compartmentName y agregado como un par clave-valor en el que la clave es "compartmentName".
data.response.headers.Content-Length.0 event.idm.read_only_udm.additional.fields Valor tomado de data.response.headers.Content-Length.0 y agregado como un par clave-valor en el que la clave es "Content-Length de los encabezados de respuesta".
data.response.headers.Content-Type.0 event.idm.read_only_udm.additional.fields El valor se toma de data.response.headers.Content-Type.0 y se agrega como un par clave-valor en el que la clave es "Response Headers Content-Type".
data.eventGroupingId event.idm.read_only_udm.additional.fields Valor tomado de data.eventGroupingId y agregado como un par clave-valor en el que la clave es "eventGroupingId".
oracle.tenantid, data.identity.tenantId event.idm.read_only_udm.additional.fields El valor se toma de oracle.tenantid si está presente; de lo contrario, se toma de data.identity.tenantId. Se agrega como un par clave-valor en el que la clave es "tenantId".
data.message event.idm.read_only_udm.metadata.description Valor tomado de data.message.
time event.idm.read_only_udm.metadata.event_timestamp Valor tomado de time y analizado como una marca de tiempo ISO8601.
event.idm.read_only_udm.metadata.event_type Se configura de forma predeterminada en GENERIC_EVENT. Se establece en NETWORK_CONNECTION si hay un principal (IP o nombre de host) y una IP de destino. Se establece en STATUS_UPDATE si solo hay un principal presente.
time event.idm.read_only_udm.metadata.ingested_timestamp Si oracle.ingestedtime no está vacío, el valor se toma del campo time y se analiza como una marca de tiempo ISO8601.
oracle.tenantid event.idm.read_only_udm.metadata.product_deployment_id Valor tomado de oracle.tenantid.
type event.idm.read_only_udm.metadata.product_event_type Valor tomado de type.
oracle.logid event.idm.read_only_udm.metadata.product_log_id Valor tomado de oracle.logid.
specversion event.idm.read_only_udm.metadata.product_version Valor tomado de specversion.
data.request.action event.idm.read_only_udm.network.http.method Valor tomado de data.request.action.
data.identity.userAgent event.idm.read_only_udm.network.http.parsed_user_agent Valor tomado de data.identity.userAgent y analizado.
data.response.status event.idm.read_only_udm.network.http.response_code Valor tomado de data.response.status y convertido en un número entero.
data.protocol event.idm.read_only_udm.network.ip_protocol El valor numérico de data.protocol se convierte en su representación de cadena (p.ej., El 6 se convierte en "TCP" y el 17 en "UDP").
data.bytesOut event.idm.read_only_udm.network.sent_bytes Valor tomado de data.bytesOut y convertido en un número entero sin signo.
data.packets event.idm.read_only_udm.network.sent_packets Valor tomado de data.packets y convertido en un número entero.
data.identity.consoleSessionId event.idm.read_only_udm.network.session_id Valor tomado de data.identity.consoleSessionId.
id event.idm.read_only_udm.principal.asset.product_object_id Valor tomado de id.
source event.idm.read_only_udm.principal.hostname Valor tomado de source.
data.sourceAddress, data.identity.ipAddress event.idm.read_only_udm.principal.ip Los valores de data.sourceAddress y data.identity.ipAddress se combinan en este campo.
data.sourcePort event.idm.read_only_udm.principal.port Valor tomado de data.sourcePort y convertido en un número entero.
data.request.headers.X-Forwarded-For.0 event.idm.read_only_udm.principal.resource.attribute.labels El valor se toma de data.request.headers.X-Forwarded-For.0 y se agrega como un par clave-valor en el que la clave es "x forward".
oracle.compartmentid event.idm.read_only_udm.principal.resource.attribute.labels Valor tomado de oracle.compartmentid y agregado como un par clave-valor en el que la clave es "compartmentid".
oracle.loggroupid event.idm.read_only_udm.principal.resource.attribute.labels Valor tomado de oracle.loggroupid y agregado como un par clave-valor en el que la clave es "loggroupid".
oracle.vniccompartmentocid event.idm.read_only_udm.principal.resource.attribute.labels Valor tomado de oracle.vniccompartmentocid y agregado como un par clave-valor en el que la clave es "vniccompartmentocid".
oracle.vnicocid event.idm.read_only_udm.principal.resource.attribute.labels Valor tomado de oracle.vnicocid y agregado como un par clave-valor en el que la clave es "vnicocid".
oracle.vnicsubnetocid event.idm.read_only_udm.principal.resource.attribute.labels Valor tomado de oracle.vnicsubnetocid y agregado como un par clave-valor en el que la clave es "vnicsubnetocid".
data.flowid event.idm.read_only_udm.principal.resource.product_object_id Valor tomado de data.flowid.
data.identity.credentials event.idm.read_only_udm.principal.user.attribute.labels Valor tomado de data.identity.credentials y agregado como un par clave-valor en el que la clave es "credentials".
data.identity.principalName event.idm.read_only_udm.principal.user.user_display_name Valor tomado de data.identity.principalName.
data.identity.principalId event.idm.read_only_udm.principal.user.userid Valor tomado de data.identity.principalId.
data.action event.idm.read_only_udm.security_result.action Se configura de forma predeterminada en UNKNOWN_ACTION. Si data.action es "REJECT", se establece en BLOCK. Si data.action es "ACCEPT", se establece en ALLOW.
data.endTime event.idm.read_only_udm.security_result.detection_fields Valor tomado de data.endTime y agregado como un par clave-valor en el que la clave es "endTime".
data.startTime event.idm.read_only_udm.security_result.detection_fields Valor tomado de data.startTime y agregado como un par clave-valor en el que la clave es "startTime".
data.status event.idm.read_only_udm.security_result.detection_fields Valor tomado de data.status y agregado como un par clave-valor en el que la clave es "status".
data.version event.idm.read_only_udm.security_result.detection_fields Valor tomado de data.version y agregado como un par clave-valor en el que la clave es "version".
data.destinationAddress event.idm.read_only_udm.target.ip Valor tomado de data.destinationAddress.
data.destinationPort event.idm.read_only_udm.target.port Valor tomado de data.destinationPort y convertido en un número entero.
data.request.path event.idm.read_only_udm.target.url Valor tomado de data.request.path.
event.idm.read_only_udm.metadata.product_name Se establece en "ORACLE CLOUD AUDIT".
event.idm.read_only_udm.metadata.vendor_name Se debe establecer en "ORACLE".

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.