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_loanprocada 15 minutos - Airbyte: Replicación de Backend Solvento (PostgreSQL) →
airbytey 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 asolvento-adv-analytics-prod - dbt-analytics: Lee de
data-prodyadv-analytics-prod, escribe asolvento-risk-analytics-prod - Metabase Cloud: Consulta
solvento-adv-analytics-prodpara dashboards internos y embebidos - Terminal Uploader: Consume
solvento-adv-analytics-prod.terminaly 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ñadirrfcmejoraría consultas por cliente.syntage.cp_bodyno tiene particionamiento — considerar particionar poringested_atcuando supere 50 M filas.terminal.client_dbtsin particionamiento — evaluar partición porissuedatal crecer.- Se recomienda activar
require_partition_filtereninvoices_itemspara 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-saconbigquery.adminen ambos proyectos: debería tener solobigquery.dataViewer+bigquery.jobUserpara lectura de dashboards.- Usuarios con
roles/editora nivel de proyecto:avalencia,fveloso,j.tapias,jaime,m.flemingtieneneditorensolvento-data-prod— este rol otorga acceso a todos los servicios, no solo BQ. - El grupo
sales-finance-bqtiene acceso directo a datos raw ensolvento-data-prod— evaluar si debería leer únicamente desde vistas curadas enmetabase_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 |