Skip to content

GovHub-br/data-governance-workshop

Repository files navigation

Workshop: Trino + Apache Ranger + SQL Server + PostgreSQL + MongoDB

Este projeto sobe um laboratório local para demonstrar LGPD com:

  • Trino 480 com plugin do Ranger
  • Apache Ranger 2.8.0
  • SQL Server 2022
  • PostgreSQL 16
  • MongoDB 7

O foco do ambiente é mostrar:

  • autenticação no Trino
  • autorização no Ranger
  • column masking, redact, nullify e hash
  • diferenças entre dados pessoais, dados pessoais sensíveis e identificadores técnicos

Documentos

Visão rápida

Papel de cada peça:

  • Trino: autentica quem entra e executa as queries
  • Ranger: autoriza o que esse usuário pode fazer
  • bancos de dados: guardam os dados reais

Em uma frase:

  • o Trino responde "quem é você?"
  • o Ranger responde "o que você pode ver ou fazer?"

Criar um usuário no Ranger não cria automaticamente um login no Trino. O Ranger usa usuários e grupos para políticas. O Trino precisa de um mecanismo próprio de autenticação para aceitar a conexão.

O que sobe

Serviços:

  • aula-trino
  • aula-ranger
  • aula-ranger-db
  • aula-ranger-solr
  • aula-sqlserver
  • aula-postgres-lab
  • aula-mongodb

Catálogos já registrados no Trino:

  • sqlserver
  • postgresql
  • mongodb

Subir o ambiente

docker compose up -d
docker compose ps
docker compose logs -f ranger trino sqlserver-init postgres-lab mongodb

Endpoints

  • Trino HTTPS: https://localhost:8443
  • Ranger UI: http://localhost:6080/login.jsp
  • Solr: http://localhost:8983
  • SQL Server: localhost:1433
  • PostgreSQL do laboratório: localhost:5433
  • MongoDB do laboratório: localhost:27017

Credenciais padrão do Ranger:

  • usuário: admin
  • senha: rangerR0cks!

Dados de demonstração

SQL Server

Banco: aula_masking
Schema: demo
Tabela: clientes

Colunas úteis para demo:

  • nome
  • email
  • cpf
  • salario
  • cidade

Boas candidates para políticas:

  • cpf: Redact ou Hash
  • email: Show First 4
  • salario: Nullify

Arquivo de seed:

PostgreSQL

Banco: lgpd_workshop
Schema: demo

Tabelas:

  • colaboradores
  • transacoes_cartao

Campos para demo em colaboradores:

  • cpf
  • telefone
  • salario
  • data_nascimento
  • conta_bancaria
  • diagnostico_cid
  • observacao_rh

Campos para demo em transacoes_cartao:

  • email_fatura
  • cpf_portador
  • cartao_token
  • ultimos4
  • ip_compra

Boas candidates para políticas:

  • conta_bancaria: Redact
  • diagnostico_cid: Nullify
  • cartao_token: Hash
  • cpf_portador: Hash ou Redact

Arquivo de seed:

MongoDB

Database: lgpd_workshop

Collections:

  • paciente_eventos
  • leads_privacidade

Campos para demo em paciente_eventos:

  • email
  • cpf
  • telefone
  • plano_saude
  • biometria_hash
  • geolocalizacao
  • prontuario_resumo

Campos para demo em leads_privacidade:

  • email
  • telefone
  • renda_mensal
  • documento
  • endereco
  • ip_origem
  • device_id

Boas candidates para políticas:

  • prontuario_resumo: Nullify
  • geolocalizacao: Redact
  • documento: Hash
  • email: Show First 4

Arquivo de seed:

Como o login funciona

Hoje o Trino está configurado com autenticação por arquivo de senha:

O Trino aceita a conexão e valida a senha. Depois disso, o Ranger avalia as políticas para aquele nome de usuário.

Criar um usuário novo no Trino

Se você já tem htpasswd instalado localmente, rode dentro de trino/etc:

htpasswd -B -C 10 password.db mateuzao

Esse comando:

  • adiciona o usuário mateuzao
  • grava a senha com bcrypt
  • não recria o arquivo porque não usa -c

Se você não tiver htpasswd instalado localmente:

docker run --rm -it -v "$PWD/trino/etc:/work" httpd:2.4-alpine \
  htpasswd -B -C 10 /work/password.db mateuzao

Depois de alterar o arquivo de senhas:

docker compose restart trino

Teste rápido no Trino

Abra um shell no contêiner:

docker exec -it aula-trino trino \
  --server https://localhost:8443 \
  --user professor \
  --password \
  --insecure

Exemplos:

SHOW CATALOGS;

SHOW SCHEMAS FROM sqlserver;
SHOW TABLES FROM sqlserver.demo;
SELECT * FROM sqlserver.demo.clientes;

SHOW SCHEMAS FROM postgresql;
SHOW TABLES FROM postgresql.demo;
SELECT nome, conta_bancaria, diagnostico_cid
FROM postgresql.demo.colaboradores;

SHOW SCHEMAS FROM mongodb;
SHOW TABLES FROM mongodb.lgpd_workshop;
SELECT nome, cpf, prontuario_resumo
FROM mongodb.lgpd_workshop.paciente_eventos;

DBeaver

Configuração mínima:

  • host: localhost
  • port: 8443
  • user: um usuário presente em trino/etc/password.db
  • password: a senha desse usuário
  • SSL: ligado
  • SSLVerification: NONE por causa do certificado self-signed do laboratório

Configurar o serviço do Ranger para o Trino

No Ranger:

  1. Access Manager
  2. Add New Service
  3. tipo Trino
  4. crie o serviço com:
  • Service Name: trino-aula
  • Display Name: trino-aula
  • Username: em branco
  • Password: em branco

Esse nome precisa bater com:

Autenticação x autorização

O que o Trino faz

O Trino:

  • recebe a conexão
  • valida a senha
  • associa a sessão a um usuário, por exemplo professor

O que o Ranger faz

O Ranger:

  • vê que a sessão está como professor
  • decide se professor pode executar query
  • decide se professor pode atuar como esse Trino User
  • decide se professor pode fazer select
  • decide se alguma coluna precisa ser mascarada

Por que criar usuário no Ranger é diferente

Criar professor no Ranger significa:

  • o Ranger conhece esse nome
  • você pode fazer policy para esse nome

Isso não significa:

  • que o Trino vai autenticar professor
  • que a senha de professor existe no Trino

Para o login funcionar, o usuário precisa existir no mecanismo de autenticação do Trino. Neste lab, isso quer dizer: ele precisa estar em trino/etc/password.db.

Por que a policy de impersonate é necessária

No plugin Ranger para Trino, executar query exige pelo menos estas duas permissões básicas:

  1. Query ID = * com execute
  2. Trino User = {o próprio usuário} com impersonate

Mesmo quando o usuário entra como professor, o Ranger ainda exige a autorização:

  • professor pode atuar como professor

Isso parece redundante, mas é assim que o modelo do plugin foi desenhado: a identidade efetiva do Trino User também precisa ser autorizada.

Políticas mínimas para um usuário consultar

Exemplo para professor.

Política 1: executar queries

  • Resource: Query ID
  • Valor: *
  • User: professor
  • Permission: execute

Política 2: auto-impersonação

  • Resource: Trino User
  • Valor: professor
  • User: professor
  • Permission: impersonate

Política 3: leitura SQL Server

  • Catalog: sqlserver
  • Schema: demo
  • Table: clientes
  • Column: *
  • User: professor
  • Permission: select

Política 4: leitura PostgreSQL

  • Catalog: postgresql
  • Schema: demo
  • Table: colaboradores
  • Column: *
  • User: professor
  • Permission: select

Política 5: leitura MongoDB

  • Catalog: mongodb
  • Schema: lgpd_workshop
  • Table: paciente_eventos
  • Column: *
  • User: professor
  • Permission: select

Se você quiser navegar melhor por ferramentas como DBeaver, normalmente vale liberar também:

  • Catalog: system
  • Schema: jdbc
  • Table: *
  • Permission: select

e, se necessário:

  • Catalog: mongodb
  • Schema: lgpd_workshop
  • Table: leads_privacidade
  • Permission: select

Sugestão de roteiro para o workshop

Usuário professor

Objetivo:

  • ver os dados completos

Policies:

  • execute
  • impersonate
  • select nas tabelas alvo

Usuário aluno

Objetivo:

  • ver dados protegidos

Policies:

  • mesmas permissões mínimas de query
  • select nas tabelas alvo
  • masking por coluna

Exemplo de combinação boa:

  • SQL Server clientes.cpf: Redact
  • SQL Server clientes.email: Show First 4
  • SQL Server clientes.salario: Nullify
  • PostgreSQL colaboradores.conta_bancaria: Redact
  • PostgreSQL colaboradores.diagnostico_cid: Nullify
  • PostgreSQL transacoes_cartao.cartao_token: Hash
  • MongoDB paciente_eventos.prontuario_resumo: Nullify
  • MongoDB leads_privacidade.documento: Hash

Arquivos principais

Observações

  • o ranger-db usa a porta 5432; por isso o PostgreSQL do laboratório foi exposto em 5433
  • o certificado do Trino é self-signed, então clientes gráficos precisam aceitar esse cenário
  • os scripts de init do Postgres e do MongoDB rodam na criação inicial do volume; se quiser recriar do zero, remova os volumes e suba novamente

Fontes oficiais:

About

Repositório dedicado às configurações do Apache Ranger e do Trino, utilizado no workshop de governança centralizada de acesso a dados.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors