Trino + Apache Ranger¶
Acesso governado para dados sensíveis no GovHub BR.
Visão Geral¶
Trino + Ranger formam a camada de acesso governado para dados que não podem ser consultados diretamente no PostgreSQL. O Ranger define políticas de acesso (quem pode ver o quê), e o Trino as aplica em tempo de query.
graph LR
JH[JupyterHub] --> TR[Trino]
TR --> RG[Ranger - Políticas]
TR --> PG[(PostgreSQL)]
RG -->|row-level security| TR
RG -->|column masking| TR
Quando Usar¶
| Caminho | Quando | Exemplo |
|---|---|---|
| PostgreSQL direto | Dados públicos | TransfereGov, ComprasGov, Siorg |
| Trino + Ranger | Dados sensíveis | Siape (pessoal), Siafi (detalhado) |
Regra geral
O desenho recomendado mantém Superset voltado a dados Gold públicos ou agregados no PostgreSQL. Para análises que tocam registros individuais de fontes sensíveis, como Siape ou detalhamento Siafi, use o caminho governado com Trino + Ranger quando ele estiver habilitado no ambiente.
Arquitetura¶
sequenceDiagram
participant User as Analista
participant JH as JupyterHub
participant Trino as Trino
participant Ranger as Apache Ranger
participant PG as PostgreSQL
User->>JH: Query dados sensíveis
JH->>Trino: SQL via conector Trino
Trino->>Ranger: Verificar políticas do usuário
Ranger-->>Trino: Policies (row filter + column mask)
Trino->>PG: SQL modificado com filtros
PG-->>Trino: Resultados
Trino-->>JH: Dados filtrados/mascarados
JH-->>User: Resultado governado
Políticas de Acesso¶
Row-Level Security¶
Filtrar linhas baseado no perfil do usuário:
| Política | Regra | Aplicação |
|---|---|---|
| Órgão próprio | Servidor vê apenas dados do seu órgão | WHERE orgao_lotacao = user.orgao |
| Dados agregados | Pesquisador vê apenas contagens | GROUP BY forçado |
| Acesso total | Equipe IPEA/Dides | Sem filtro |
Column Masking¶
Ocultar ou mascarar colunas sensíveis:
| Coluna | Masking | Quem vê original |
|---|---|---|
| CPF | ***.***.***-XX |
Ninguém (exceto admin) |
| Nome | Primeiros 3 caracteres | Equipe autorizada |
| Remuneração individual | NULL | Equipe autorizada |
| Remuneração agregada | Valor real | Todos via Gold |
Configuração¶
Trino — Conector PostgreSQL¶
# catalog/postgres.properties
connector.name=postgresql
connection-url=jdbc:postgresql://postgres:5432/govhub
connection-user=trino_reader
connection-password=${ENV:TRINO_PG_PASSWORD}
Ranger — Política Exemplo¶
{
"policyName": "siape_orgao_proprio",
"resources": {
"database": {"values": ["govhub"]},
"schema": {"values": ["silver"]},
"table": {"values": ["servidores"]}
},
"rowFilterPolicyItems": [{
"accesses": [{"type": "select"}],
"users": ["analista_ipea"],
"rowFilterInfo": {
"filterExpr": "orgao_lotacao = 'IPEA'"
}
}]
}
Conexão via JupyterHub¶
from sqlalchemy import create_engine
import pandas as pd
# Conexão via Trino — Ranger aplica as políticas configuradas no ambiente
engine = create_engine("trino://trino:8443/postgres/silver")
# O usuário autenticado determina quais filtros Ranger aplica
df = pd.read_sql("SELECT * FROM servidores LIMIT 100", engine)
# → Ranger aplica filtros conforme a política vigente
Deploy¶
A referência de deploy de Trino e Ranger fica no repositório continuous-deployment. Confirme no cluster alvo quais componentes estão ativos e quais namespaces foram adotados:
continuous-deployment/
├── trino/
│ ├── values.yaml
│ └── values.prod.yaml
└── ranger/
├── values.yaml
└── values.prod.yaml
| Namespace | Componente | Porta comum |
|---|---|---|
trino |
Trino coordinator | 8443 |
trino |
Trino workers | — |
trino |
Ranger admin | 6080 |
Monitoramento¶
- Trino UI: Queries em execução, performance, falhas
- Ranger Audit: Log de todas as decisões de acesso (permitido/negado)
- Alertas: query lenta, falha de autenticação ou aumento incomum de erros