Skip to content

BigQuery

BigQuery es el data warehouse serverless de Google Cloud Platform utilizado para almacenar y consultar grandes volúmenes de datos estructurados en la arquitectura de Solvento.

Descripción

BigQuery proporciona almacenamiento columnar y capacidades de consulta SQL para análisis de datos a gran escala. Es el destino principal de todos los datos estructurados, tanto raw como procesados.

Proyectos GCP

BigQuery se utiliza en los tres proyectos principales de GCP:

Proyecto Rol Tipo de datos
solvento-data-prod Aterrizaje de datos raw Sin procesar, tal como vienen de la fuente
solvento-adv-analytics-prod Datos depurados Resultado del ETL desde data-prod
solvento-risk-analytics-prod Datos de riesgo Data products de riesgo y analytics

Filosofía: Todo dato ingresa primero a solvento-data-prod como raw. Los procesos ETL leen de ahí y escriben datos depurados a solvento-adv-analytics-prod. solvento-risk-analytics-prod puede leer de ambos proyectos según necesidad.

Ver documentación completa de proyectos GCP →


Datasets por proyecto

solvento-data-prod — Raw

Todos los datasets de este proyecto contienen datos sin transformar, tal como los entregan los sistemas fuente.

Dataset Descripción Fuente de ingesta
airbyte Réplica CDC del Backend Solvento (PostgreSQL). Tablas raw de todas las entidades del backend: usuarios, operaciones, configuraciones. Airbyte — replicación incremental
airbyte_internal Metadatos y estado interno de las sincronizaciones de Airbyte: estado de jobs, logs de control. No apto para consumo analítico. Airbyte (sistema)
analiticas Catálogos y datos de referencia analíticos: códigos SAT de productos y servicios (catalogo_prodyserv_sat), tipos de cambio (exchange_rates). Fuente de enriquecimiento para modelos dbt. Manual / Cloud Functions
bitacora_solvento Registro cronológico de eventos operativos del sistema Solvento. Auditoría de acciones y cambios de estado en entidades clave. Cloud Run / Cloud Functions
buro Datos raw de buró de crédito: consultas, respuestas y reportes de historial crediticio para evaluación de clientes. API externa
catalog Catálogos de referencia geográfica y operativa: estados (c_estado), municipios (c_municipio). Utilizado por modelos dbt para enriquecimiento. Manual
config Parámetros de configuración y variables operativas que gobiernan el comportamiento de pipelines y procesos de ingesta. Manual
dashboards Tablas y vistas materializadas de soporte para dashboards operativos. Datos pre-agregados para consumo en BI. Dataflow / Cloud Functions
dataform_assertions Resultados de assertions y validaciones de calidad ejecutadas por Dataform: registros de éxito/fallo por dataset y tabla. Dataform
datastream_loanpro Réplica CDC de LoanPro (MySQL) con ventanas de 15 minutos. Entidades principales: loan_entity, loan__customer, loan_setup_entity, customer_entity, loan_tx, charge_entity, loan_status_archive, loan__portfolio, line_of_credit_entity. Datastream
hubspot Réplica de datos CRM de HubSpot: deals, contactos y empresas. Fuente de datos comerciales para modelos de riesgo y analytics. Airbyte — API REST
insights Análisis exploratorios y datos de insights ad hoc generados por el equipo de datos. Manual / Cloud Functions
keycloack Datos raw de usuarios, roles y sesiones del identity provider Keycloak. Cloud Functions / Dataflow
metabase_views Vistas SQL de BigQuery expuestas como fuente de datos en Metabase. Capa de presentación que simplifica consultas para usuarios de negocio. Views sobre otros datasets
report Tablas de reportes operativos y financieros para distribución periódica (inversionistas, operaciones). dbt / Cloud Functions
sdp Datos del sistema de pagos de Solvento. Registros de transacciones y operaciones del core financiero. Cloud Run / Dataflow
shinkansen Datos de payouts y órdenes de payout de Shinkansen. Ver tabla de objetos abajo. Shinkansen pipeline
svc_master_public Catálogo maestro de servicios y productos de Solvento. Tablas de referencia para mapeo de productos y configuraciones de negocio. Manual / ETL
syntage Datos raw de la API de Syntage: facturas electrónicas (invoices, invoices_items), carta porte (cp_body, cp_ubicaciones, cp_mercancias), y tablas auxiliares. Principal fuente de datos operativos del negocio de factoraje. Dataflow templates vía Pub/Sub
syntage_failed Eventos y mensajes de Syntage que fallaron en el pipeline de ingesta. Almacenados para reintento, auditoría y debugging. Dataflow (dead-letter)
toku Datos raw de eventos de pago de Toku ingestados vía webhooks. Contiene notificaciones de transacciones y estados de pago. Webhooks — Cloud Run → Pub/Sub → Dataflow

Objetos del dataset shinkansen

Objeto Tipo Descripción
shinkansen_metadata Tabla NRT: metadata inmediata de eventos de webhook (tracking_key, receipt_url, etc.)
shinkansen_payout_results Tabla NRT: estado técnico final del payout order (notificaciones de éxito o falla)
shinkansen_treasury Tabla Carga diaria desde Treasury. Fuente de verdad para conciliación y campos operativos
shinkansen_transactions_history Tabla Carga manual desde exportación CSV de Shinkansen WEB. Histórico de transacciones
shinkansen_unificado Vista Consolida las cuatro tablas anteriores con semántica temporal clara

solvento-adv-analytics-prod — Depurado

Datasets con datos procesados y transformados por dbt-etls y procesos de consistencia de Cloud Run.

Dataset Descripción Proceso que escribe
consistency_jobs Facturas e items depurados y validados: invoices, invoices_items, invoices_360, invoices_items_360. Resultado del ETL desde solvento-data-prod.syntage. dbt-etls + Cloud Run (consistencia)
consistency_jobs_temp Tablas temporales e intermedias del proceso de consistencia. No apto para consumo directo; tablas de trabajo de corta vida. Cloud Run (consistencia)
dashboards Tablas y vistas pre-agregadas para dashboards de negocio en Metabase y Luzmo. dbt-etls / Cloud Functions
keycloack Datos depurados de usuarios y sesiones Keycloak, procesados desde solvento-data-prod.keycloack. dbt-etls
loantape Portafolio de crédito consolidado para análisis y reportes de loantape. Distribuido a inversionistas y para análisis interno del portafolio activo. dbt-etls / Cloud Functions
model_analytics_javimo Dataset de desarrollo y experimentación del equipo de analytics. No usar en producción. Desarrollo manual
model_analytics_terminal_v2 Modelos analíticos v2 para la aplicación Solvento Terminal. Datos de operaciones de terminal de carga. dbt-etls
terminal Dataset principal de la aplicación Solvento Terminal. Contiene client_dbt (modelo de cliente) y market_dbt (modelo de mercado). Fuente para ETL hacia Supabase vía Terminal Uploader. dbt-etls
terminal_stg Staging area del proyecto Terminal. Tablas intermedias de la capa silver, previas al modelo gold. dbt-etls
terminal_v3 Dataset de la versión 3 del proyecto Terminal con arquitectura de modelos actualizada. dbt-etls
toku Datos de Toku transformados desde solvento-data-prod.toku. Eventos de pago normalizados. dbt-etls

solvento-risk-analytics-prod — Riesgo

Datasets generados por el proyecto dbt-analytics (warehouse). Los datasets con prefijo dfrade_, rodnaka_ o sufijo _feat_* son entornos de desarrollo personal del equipo; no deben usarse en pipelines de producción.

Datasets de producción

Dataset Capa dbt Descripción
analytics_engineering_staging Bronze (stg_*) Transformaciones iniciales de datos raw a tipos y formatos canónicos. Fuentes: LoanPro, Syntage, HubSpot, Toku.
analytics_engineering_intermediate Silver (int_*) Lógica de negocio de riesgo. Joins, cálculos y enriquecimiento de entidades.
analytics_engineering_intermediate_2 Silver extendido Procesamiento complementario para casos de uso específicos de riesgo que requieren una segunda capa intermedia.
analytics_engineering_core Gold (fact_*, dim_*) Tablas finales de hechos y dimensiones listas para consumo por modelos y data products.
analytics_engineering_data_products Data Products Productos de riesgo especializados: Solvento Score v2, DSCR, Customer Classifier, Segmentación, Variable Interest Reserve Writeoff.
analytics_engineering_seeds Seeds Tablas de referencia, catálogos y parámetros estáticos del proyecto dbt.
analytics_engineering_semantic Semántica Capa semántica que expone métricas y dimensiones de negocio para consumo consistente.
analytics_engineering_utility Utilidades Modelos utilitarios y helpers materializados de uso transversal.
analytics_engineering Base Dataset base del proyecto. Contiene modelos sin sufijo de ambiente específico.
feature_store Feature Store Features calculadas y versionadas para entrenamiento y scoring de modelos de ML de riesgo.
fs_prd_snapshots Feature Store Snapshots históricos del feature store de producción para reproducibilidad de modelos y análisis de drift.
risk_analytics Analytics Tablas y vistas principales de análisis de riesgo de portafolio.
sigma Analytics Datos de análisis estadístico y scoring Sigma para evaluación de riesgo crediticio.
sigma_chat Analytics Datos de interacciones del producto Sigma.
terminal_v3 Analytics Dataset Terminal v3 en el contexto del proyecto de riesgo.

Data products disponibles

Data Product Dataset Descripción
dp_solvento_score_v2 analytics_engineering_data_products Score de crédito Solvento v2. Componentes: cancelled invoices, debt ratio, ratio top 3, revenue HubSpot.
dscr analytics_engineering_data_products Debt Service Coverage Ratio. Análisis de cobertura del servicio de deuda.
customer_type / customer_type_all_customers analytics_engineering_data_products Clasificación y segmentación de clientes.
historical_variable_interest_loan_buckets analytics_engineering_data_products Reservas y writeoffs de interés variable.
comp_segmentation_carta_porte / comp_segmentation_invoice_items analytics_engineering_data_products Segmentación por Carta Porte e items de factura.

Ver documentación completa de dbt Risk Analytics →


Flujo de Datos

graph LR
    subgraph fuentes["Fuentes"]
        Dataflow[Dataflow Pipelines]
        DatastreamSvc[Datastream<br/>LoanPro — 15 min]
        AirbyteSvc[Airbyte<br/>Backend + HubSpot]
        CloudRun[Cloud Run<br/>Webhooks + APIs]
    end

    subgraph raw["solvento-data-prod<br/>RAW"]
        syntage[syntage]
        datastream_loanpro[datastream_loanpro]
        hubspot_ds[hubspot]
        airbyte_ds[airbyte]
        toku_ds[toku]
        otros[catalog / analiticas<br/>shinkansen / etc.]
    end

    subgraph adv["solvento-adv-analytics-prod<br/>DEPURADO"]
        consistency_jobs[consistency_jobs]
        terminal_ds[terminal]
        loantape_ds[loantape]
        otros_adv[dashboards / toku / etc.]
    end

    subgraph risk["solvento-risk-analytics-prod<br/>RIESGO"]
        staging_ds[analytics_engineering_staging]
        core_ds[analytics_engineering_core]
        dp_ds[analytics_engineering_data_products]
        feature_store_ds[feature_store]
    end

    Dataflow --> syntage
    Dataflow --> toku_ds
    DatastreamSvc --> datastream_loanpro
    AirbyteSvc --> airbyte_ds
    AirbyteSvc --> hubspot_ds
    CloudRun --> otros

    syntage --> consistency_jobs
    datastream_loanpro --> staging_ds
    hubspot_ds --> staging_ds
    airbyte_ds --> staging_ds

    consistency_jobs --> core_ds
    staging_ds --> core_ds
    core_ds --> dp_ds
    core_ds --> feature_store_ds

    terminal_ds -->|"Terminal Uploader → Supabase"| loantape_ds

Relaciones con otros componentes

Entrada de datos

  • Dataflow: Consume mensajes de Pub/Sub y escribe datos raw a solvento-data-prod (syntage, toku, shinkansen, etc.)
  • Datastream: Replicación CDC de LoanPro (MySQL) → datastream_loanpro cada 15 minutos
  • Airbyte: Replicación de Backend Solvento (PostgreSQL) → airbyte y HubSpot → hubspot
  • Cloud Run: Procesa webhooks/APIs y escribe eventos raw a BigQuery
  • AWS Glue: ETL desde S3 hacia BigQuery (solvento-data-prod)

Salida de datos

  • dbt-etls: Lee de solvento-data-prod, transforma y escribe a solvento-adv-analytics-prod
  • dbt-analytics: Lee de data-prod y adv-analytics-prod, escribe a solvento-risk-analytics-prod
  • Metabase Cloud: Consulta solvento-adv-analytics-prod para dashboards internos y embebidos
  • Terminal Uploader: Consume solvento-adv-analytics-prod.terminal y sincroniza hacia Supabase
  • Luzmo: Consulta datasets de solvento-adv-analytics-prod

Cómo se ingesta la data

Cada tipo de dato llega a BigQuery por un mecanismo diferente. La tabla siguiente resume el patrón por fuente y enlaza a la documentación de cada componente.

Fuente Mecanismo Dataset destino Documentación
Syntage (facturas, carta porte, buro, tax compliance) Webhook HTTP → Cloud Run → Pub/Sub → Dataflow solvento-data-prod.syntage, buro, insights Dataflow Templates · Cloud Run · Arquitectura 5.0
LoanPro (MySQL) CDC en tiempo real — ventanas de 15 min solvento-data-prod.datastream_loanpro Datastream
Backend Solvento (PostgreSQL) Replicación incremental solvento-data-prod.airbyte Airbyte
HubSpot CRM API REST nativa solvento-data-prod.hubspot Airbyte
Shinkansen (payouts) Webhooks NRT + carga diaria desde Treasury solvento-data-prod.shinkansen Shinkansen
Archivos XML en Cloud Storage Cloud Run batch (bucket-xml-parser-prod) solvento-data-prod.svc_master_public Cloud Run — bucket-xml-parser-prod
Amazon S3 AWS Glue ETL solvento-data-prod S3 → Glue → GCP
Datos depurados (ETL desde data-prod) dbt-etls solvento-adv-analytics-prod.* dbt ETLs
Datos de riesgo (ETL desde data-prod + adv) dbt-analytics solvento-risk-analytics-prod.* dbt Risk Analytics

Monitoreo y plan de mejora

Estado actual

El dashboard Data Processes en Cloud Monitoring (solvento-data-prod) ya cubre el flujo de ingesta: mensajes en Pub/Sub, throughput de Dataflow, logs de error y tamaño de tablas en BQ para los pipelines activos.

Ver documentación del dashboard →

Lo que no está cubierto aún es la capa de gobierno de BigQuery en sí: costos por dataset, bytes procesados por consulta, uso de slots y frescura de datos. A continuación el plan para cerrar esa brecha.


Plan de monitoreo BQ

1. Costos por dataset y proyecto

Problema: No hay visibilidad granular de qué dataset o qué usuario consume más bytes de consulta.

Acción: Crear una vista sobre INFORMATION_SCHEMA.JOBS_BY_PROJECT en cada proyecto para identificar las queries más costosas, los usuarios que más consumen y los datasets más consultados.

-- Top 20 queries por bytes procesados (últimos 7 días)
SELECT
  user_email,
  destination_table.dataset_id AS dataset,
  ROUND(total_bytes_processed / POW(1024, 3), 2) AS gb_procesados,
  ROUND(total_bytes_billed / POW(1024, 3), 2)    AS gb_facturados,
  creation_time,
  SUBSTR(query, 1, 200) AS query_preview
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  project_id = 'solvento-adv-analytics-prod'
  AND creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND state = 'DONE'
  AND error_result IS NULL
ORDER BY total_bytes_billed DESC
LIMIT 20;

Dónde ejecutar: En solvento-adv-analytics-prod (mayor uso de consultas) y solvento-risk-analytics-prod.

2. Alertas de presupuesto en GCP Billing

Acción: Configurar alertas de presupuesto por proyecto en la consola de GCP Billing:

Proyecto Umbral sugerido (% del presupuesto mensual) Canal de alerta
solvento-data-prod 80% y 100% Correo / Slack del equipo de datos
solvento-adv-analytics-prod 80% y 100% Correo / Slack del equipo de datos
solvento-risk-analytics-prod 80% y 100% Correo / Slack del equipo de datos

3. Monitoreo de tamaño y frescura de tablas clave

Acción: Añadir al dashboard Data Processes (o a uno nuevo) scorecards de almacenamiento y frescura para datasets que hoy no están cubiertos.

Tablas prioritarias a instrumentar:

Dataset Tabla Métrica Frecuencia esperada
datastream_loanpro — (dataset completo) storage/stored_bytes Crecimiento diario continuo
airbyte — (dataset completo) storage/stored_bytes Crecimiento diario
hubspot deals, contacts storage/stored_bytes Actualización diaria
consistency_jobs invoices, invoices_items storage/stored_bytes + frescura Actualización horaria
analytics_engineering_data_products dp_solvento_score_v2 storage/stored_bytes Actualización según pipeline de riesgo

Frescura: Usar bigquery.googleapis.com/storage/row_count combinado con INFORMATION_SCHEMA.TABLE_STORAGE para detectar tablas que no han recibido datos en X horas.

4. Límites y cuotas a establecer

BigQuery en on-demand no limita queries por defecto. Para controlar costos y evitar consultas accidentales costosas se recomienda:

Control Configuración sugerida Dónde aplicar
Quota de bytes por usuario/día 100 GB/usuario/día en adv-analytics-prod IAM → BigQuery → Custom quotas
Quota de bytes por proyecto/día Según presupuesto mensual ÷ 30 GCP Quotas & Limits
Expiración de tablas temporales 7 días en consistency_jobs_temp Dataset default table expiration
Expiración de particiones 90 días en tablas raw de alta cardinalidad (ej. syntage.invoices_items) Partition expiration por tabla
Partition filter requerido Activar require_partition_filter en tablas raw grandes Configuración de tabla

5. Slot usage (si se migra a reservas)

Hoy los proyectos corren en on-demand. Si el consumo crece, evaluar migración a reservas de slots (Editions):

Señal de alerta Acción
Costo mensual on-demand > $X en un proyecto Evaluar reserva Standard/Enterprise en esa región
Latencia p95 de queries dbt > 5 min frecuentemente Revisar clustering y particionamiento antes de comprar slots
Cola de jobs frecuente en horas pico Considerar reserva base + autoscaling

Métrica a observar: bigquery.googleapis.com/reservation/slot_utilization (disponible si se tienen reservas activas).

6. Vista de gobierno consolidada

Acción a futuro: Crear una tabla o vista materializada de gobernanza que consolide uso por dataset, diariamente, para consulta del equipo:

-- Vista diaria de almacenamiento por dataset (ejecutar en cada proyecto)
SELECT
  table_schema          AS dataset,
  SUM(total_logical_bytes) / POW(1024, 3)  AS gb_logicos,
  SUM(total_physical_bytes) / POW(1024, 3) AS gb_fisicos,
  COUNT(*)              AS num_tablas,
  MAX(last_modified_time) AS ultima_modificacion
FROM `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
GROUP BY 1
ORDER BY gb_logicos DESC;

Priorización del plan

Prioridad Acción Esfuerzo Impacto
Alta Alertas de presupuesto en GCP Billing (ítem 2) Bajo (15 min por proyecto) Inmediato — evita sorpresas en factura
Alta Scorecards de tamaño en dashboard (ítem 3) Medio (añadir tiles al generador) Visibilidad operativa de datasets no cubiertos
Media Quota de bytes por usuario en adv-analytics-prod (ítem 4) Bajo (GCP console) Previene consultas accidentales costosas
Media Expiración de particiones/tablas temp (ítem 4) Bajo (ALTER TABLE) Reduce costos de almacenamiento gradualmente
Media Vista de queries costosas vía INFORMATION_SCHEMA (ítem 1) Bajo (SQL) Identifica oportunidades de optimización
Baja Vista consolidada de gobernanza (ítem 6) Medio Reportes periódicos de costos al equipo

Particionamiento y clustering

Las tablas de mayor volumen usan particionamiento diario para reducir costos de consulta (partition pruning) y clustering para acelerar filtros frecuentes.

Tabla Filas aprox. Partición Columnas de clustering
solvento-data-prod.syntage.invoices 176 M load_dts (DAY) rfc, id
solvento-data-prod.syntage.invoices_items 2 870 M partition_date (DAY)
solvento-data-prod.syntage.cp_body 5 M
solvento-data-prod.hubspot.deals 7 K _airbyte_extracted_at (DAY) id, _airbyte_extracted_at
solvento-adv-analytics-prod.consistency_jobs.invoices 108 M etl_dts (DAY) id
solvento-adv-analytics-prod.terminal.client_dbt 1 800 K

Observaciones y oportunidades de mejora:

  • syntage.invoices_items (2.87B filas) no tiene clustering — añadir rfc mejoraría consultas por cliente.
  • syntage.cp_body no tiene particionamiento — considerar particionar por ingested_at cuando supere 50 M filas.
  • terminal.client_dbt sin particionamiento — evaluar partición por issuedat al crecer.
  • Se recomienda activar require_partition_filter en invoices_items para evitar table scans completos.

Vistas principales

Dataset solvento-data-prod.metabase_views

Vistas expuestas directamente en Metabase para consumo de usuarios de negocio y finanzas.

Vista Propósito
audita_bq Auditoría de operaciones en BigQuery
lim_ops Límites operativos de crédito
pagos_v11_colab_upgraded Pagos (versión colaborativa v11)
saldos_v7_upgraded Saldos de portafolio (versión v7)
usr_disp Disponibilidad de usuarios / clientes
vencim Vencimientos de crédito

Dataset solvento-data-prod.shinkansen

Vista Propósito
shinkansen_unificado Consolida payouts NRT + Treasury + histórico CSV con semántica temporal

IAM y Service Accounts

Los accesos a BigQuery se gestionan principalmente mediante service accounts dedicadas por función. Los usuarios humanos tienen acceso directo en algunos proyectos para desarrollo y análisis.

solvento-data-prod

Rol BQ Principal Tipo Función
bigquery.dataOwner data-prod-sa SA SA principal del proyecto — operaciones de ingesta
bigquery.dataOwner insights-publisher SA Escribe al dataset insights
bigquery.dataEditor airbyte-sa SA Escribe réplicas de Airbyte
bigquery.dataEditor sa-cloudrun-data-prod SA Escribe desde servicios Cloud Run
bigquery.dataEditor sa-dbt-bq-dwh-prod SA Escribe desde dbt-etls
bigquery.dataEditor sa-aws-bq-dwh-prod SA Escribe desde AWS Glue
bigquery.dataEditor risk-analytics-prod-sa SA Lee y escribe desde dbt-analytics
bigquery.dataViewer advanced-analytics-prod-sa SA Lee datos raw para dbt-etls
bigquery.dataViewer metabase-sa SA Lee para dashboards Metabase
bigquery.dataViewer luzmo-sa SA Lee para dashboards Luzmo
bigquery.dataViewer sales-finance-bq Grupo Acceso de lectura para equipo de finanzas/ventas
bigquery.admin metabase-sa SA Revisar — admin es excesivo para lectura BI
bigquery.admin consistencia-sa SA Jobs de consistencia de datos
bigquery.dataOwner avalencia, fveloso, geroafonso Usuarios Equipo data engineering

solvento-adv-analytics-prod

Rol BQ Principal Tipo Función
bigquery.dataOwner advanced-analytics-prod-sa SA SA principal del proyecto
bigquery.dataEditor consistencia-sa SA Jobs de consistencia
bigquery.dataEditor sa-dbt-bq-ra-prod SA Escribe desde dbt-analytics
bigquery.dataEditor sa-user-bq-aa-prod SA SA de usuario para adv-analytics
bigquery.dataViewer metabase-sa SA Lee para dashboards Metabase
bigquery.dataViewer agutierrez, astrid, dfrade Usuarios Equipo analytics — desarrollo
bigquery.admin metabase-sa SA Revisar — admin sobre adv-analytics
iam.securityReviewer delta-230 SA Revisión de seguridad automatizada

Observaciones de IAM

Accesos a revisar

  • metabase-sa con bigquery.admin en ambos proyectos: debería tener solo bigquery.dataViewer + bigquery.jobUser para lectura de dashboards.
  • Usuarios con roles/editor a nivel de proyecto: avalencia, fveloso, j.tapias, jaime, m.fleming tienen editor en solvento-data-prod — este rol otorga acceso a todos los servicios, no solo BQ.
  • El grupo sales-finance-bq tiene acceso directo a datos raw en solvento-data-prod — evaluar si debería leer únicamente desde vistas curadas en metabase_views.

PII y datos sensibles

Datasets con datos personales identificables

Se identificaron los siguientes datasets con PII en solvento-data-prod. Ninguno tiene column-level security (policy tags) configurado.

Dataset Tablas con PII Campos sensibles identificados Volumen
keycloack keycloack_users first_name, last_name, email, phone, tax_id 3 747 filas
buro buro_datos_generales, buro_persona_* (12 tablas) rfc_cliente, curp, apellido_paterno, apellido_materno, direccion, codigo_postal, datos de crédito historial 24 tablas totales
datastream_loanpro 5202851_P_address_entity, 5202851_P_customer_entity, 5202851_P_company_profile_entity, 5202851_P_company_directory_entity address1, address2, city, zipcode, geo_lat, geo_lon 50 tablas totales
hubspot contacts, deals Datos de contacto de clientes y prospectos 7 675 deals
airbyte Tablas de entidades de backend Datos de usuarios del sistema Backend Solvento Múltiples

Riesgo actual

Riesgo Descripción Impacto
Sin column-level security Ninguna columna PII tiene policyTags configurados en Data Catalog Cualquier usuario con dataViewer puede leer campos como curp, email, tax_id
Grupo sales-finance-bq accede a datos raw El grupo tiene dataViewer en solvento-data-prod, incluyendo buro y keycloack Exposición de datos financieros y personales sin curación
metabase-sa admin sobre proyectos raw Puede leer y modificar cualquier tabla incluyendo PII Superficie de ataque si la SA se ve comprometida
Datos de buró sin restricción 24 tablas con historial crediticio, domicilios, empleos de personas físicas Alta sensibilidad regulatoria

Plan de remediación

Prioridad Acción Cómo
Alta Configurar policy tags en columnas PII Data Catalog → Taxonomía de privacidad → Etiquetar email, phone, tax_id, curp, address*
Alta Reducir metabase-sa de admin a dataViewer + jobUser gcloud projects remove-iam-policy-binding + add-iam-policy-binding
Alta Restringir acceso de sales-finance-bq a vistas curadas Revocar dataViewer en proyecto, dar dataViewer solo en metabase_views
Media Enmascarar campos PII en vistas de metabase_views Usar SHA256() o REGEXP_REPLACE() en campos sensibles dentro de las vistas
Media Auditar accesos con Data Access Logs Activar DATA_READ audit logs en buro y keycloack
Baja Evaluar VPC Service Controls Impedir acceso a datasets raw desde fuera del perímetro de red corporativa

Referencias