Sitemap
Hugo Habbema

Hugo Habbema

Engenheiro de Dados | Linkedin: https://www.linkedin.com/in/hugo-habbema/

Press enter or click to view image in full size

Apache Ranger

Governança de Storage MinIO de forma padronizada.

8 min readDec 2, 2025

--

Introdução

A governança de dados é um desafio crítico em ambientes modernos de data lakes e object storage. O Apache Ranger oferece uma solução robusta para gerenciar políticas de segurança centralizadas, enquanto o MinIO fornece armazenamento de objetos compatível com S3 de alto desempenho. Neste artigo, exploraremos como integrar essas tecnologias para estabelecer uma governança efetiva.

O que é Apache Ranger?

Apache Ranger é uma plataforma de segurança centralizada para gerenciar, monitorar e aplicar políticas de acesso a dados em todo o ecossistema Hadoop. Suas principais características incluem:

  • Gerenciamento centralizado de políticas: Interface web intuitiva para criar e gerenciar políticas de acesso
  • Auditoria detalhada: Rastreamento completo de todas as operações de acesso aos dados
  • Controle granular: Políticas baseadas em recursos, usuários, grupos e condições contextuais
  • Integração ampla: Suporte nativo para HDFS, Hive, HBase, Kafka, e extensível para outros sistemas

Por que integrar Ranger com MinIO?

MinIO é uma solução de object storage de alta performance, mas nativamente oferece apenas políticas IAM básicas. A integração com Ranger adiciona:

  1. Governança unificada: Gerencie políticas de MinIO junto com outros componentes do data lake
  2. Auditoria centralizada: Consolide logs de acesso de múltiplos sistemas
  3. Políticas dinâmicas: Aplique regras baseadas em tags, tempo, localização e outros contextos
  4. Compliance: Facilite conformidade com regulamentações como LGPD, GDPR e HIPAA

Arquitetura da Solução

┌─────────────────┐
│ Apache Ranger │
│ Admin UI │
└────────┬────────┘
│
│ Políticas
▼
┌─────────────────┐
│ Ranger Plugin │
│ para MinIO │
└────────┬────────┘
│
│ Intercepta requisições
▼
┌─────────────────┐
│ MinIO Server │
│ Object Storage │
└─────────────────┘

Exemplo Prático: Configuração Passo a Passo

Pré-requisitos

  • Docker e Docker Compose instalados
  • Conhecimento básico de object storage S3
  • 8GB RAM disponível

Passo 1: Preparar o Ambiente

Primeiro, vamos criar uma estrutura de diretórios para nossa configuração:

mkdir -p ranger-minio-demo/{ranger,minio,postgres}
cd ranger-minio-demo

Passo 2: Docker Compose

Crie um arquivo docker-compose.yml:

version: '3.8'

services:
postgres:
image: postgres:13
container_name: ranger-postgres
environment:
POSTGRES_DB: ranger
POSTGRES_USER: ranger
POSTGRES_PASSWORD: rangerPass123
volumes:
- ./postgres:/var/lib/postgresql/data
networks:
- ranger-net
ranger-admin:
image: apache/ranger:2.4.0
container_name: ranger-admin
depends_on:
- postgres
environment:
RANGER_DB_HOST: postgres
RANGER_DB_NAME: ranger
RANGER_DB_USER: ranger
RANGER_DB_PASSWORD: rangerPass123
ports:
- "6080:6080"
networks:
- ranger-net
minio:
image: minio/minio:latest
container_name: minio-server
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: admin123456
ports:
- "9000:9000"
- "9001:9001"
volumes:
- ./minio:/data
networks:
- ranger-net
networks:
ranger-net:
driver: bridge

Passo 3: Inicializar os Serviços

bash

docker-compose up -d

Aguarde alguns minutos para os serviços iniciarem. Acesse:

Passo 4: Configurar Service no Ranger

  1. Acesse o Ranger Admin UI
  2. Clique em “Service Manager” → “+” para adicionar novo serviço
  3. Selecione “S3” como tipo de serviço
  4. Preencha os campos:
Service Name: minio-dev
Display Name: MinIO Development
Description: MinIO object storage for development
Active Status: Enabled

Config Properties:
- s3.endpoint: http://minio:9000
- access.key: admin
- secret.key: admin123456
  1. Clique em “Test Connection” e depois “Add”

Passo 5: Criar Estrutura de Buckets no MinIO

Usando o MinIO Client (mc):

# Instalar mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

# Configurar alias
mc alias set myminio http://localhost:9000 admin admin123456
# Criar buckets para diferentes departamentos
mc mb myminio/finance-data
mc mb myminio/hr-data
mc mb myminio/engineering-data
mc mb myminio/analytics-data
# Criar estrutura de pastas
mc cp /dev/null myminio/finance-data/reports/.keep
mc cp /dev/null myminio/finance-data/sensitive/.keep
mc cp /dev/null myminio/hr-data/employees/.keep
mc cp /dev/null myminio/hr-data/payroll/.keep

Passo 6: Criar Políticas de Acesso no Ranger

Política 1: Acesso Completo para Administradores

Policy Name: admin-full-access
Description: Administradores têm acesso completo a todos os recursos

Resources:
- Bucket: *
- Object: *
Allow Conditions:
- Select Group: admin-group
- Permissions: Read, Write, Delete, List

Política 2: Finance — Acesso Restrito

Policy Name: finance-department-access
Description: Departamento financeiro acessa apenas dados de finanças

Resources:
- Bucket: finance-data
- Object: /*
Allow Conditions:
- Select Group: finance-group
- Permissions: Read, Write, List
Deny Conditions:
- Select Group: finance-group
- Object Path: /sensitive/*
- Permissions: Read (exceto para finance-senior-group)

Política 3: Analistas — Somente Leitura

Policy Name: analytics-read-only
Description: Analistas podem ler dados de múltiplos buckets

Resources:
- Bucket: finance-data, engineering-data, analytics-data
- Object: /*
Allow Conditions:
- Select Group: analytics-group
- Permissions: Read, List

Política 4: Política Baseada em Tags

Policy Name: pii-data-protection
Description: Protege dados sensíveis marcados com tag PII

Tag-Based Policy:
- Tag: CLASSIFICATION=PII
Allow Conditions:
- Select Group: compliance-group, legal-group
- Permissions: Read, Write
Deny All Others: Yes

Passo 7: Criar Usuários e Grupos

No Ranger Admin, navegue até Settings → Users/Groups:

# Grupos
- admin-group
- finance-group
- finance-senior-group
- hr-group
- engineering-group
- analytics-group
- compliance-group

# Usuários
- alice (grupos: admin-group)
- bob (grupos: finance-group)
- carol (grupos: finance-senior-group)
- dave (grupos: hr-group)
- eve (grupos: analytics-group)
- frank (grupos: engineering-group)

Passo 8: Testar as Políticas

Teste 1: Usuário Finance Acessando Seus Dados

# Configurar credenciais do Bob (finance)
export AWS_ACCESS_KEY_ID=bob
export AWS_SECRET_ACCESS_KEY=bob_password

# Deve funcionar - listar bucket finance
aws s3 ls s3://finance-data/ --endpoint-url http://localhost:9000
# Deve funcionar - ler arquivo normal
aws s3 cp s3://finance-data/reports/Q1-2024.pdf . --endpoint-url http://localhost:9000
# Deve falhar - ler arquivo sensível
aws s3 cp s3://finance-data/sensitive/salaries.csv . --endpoint-url http://localhost:9000
# Erro: Access Denied

Teste 2: Analista Tentando Escrever Dados

# Configurar credenciais do Eve (analytics)
export AWS_ACCESS_KEY_ID=eve
export AWS_SECRET_ACCESS_KEY=eve_password

# Deve funcionar - ler dados
aws s3 cp s3://analytics-data/report.csv . --endpoint-url http://localhost:9000
# Deve falhar - escrever dados
echo "test" | aws s3 cp - s3://analytics-data/new-file.txt --endpoint-url http://localhost:9000
# Erro: Access Denied

Teste 3: Admin com Acesso Total

# Configurar credenciais da Alice (admin)
export AWS_ACCESS_KEY_ID=alice
export AWS_SECRET_ACCESS_KEY=alice_password

# Deve funcionar - acessar qualquer bucket
aws s3 ls s3://finance-data/sensitive/ --endpoint-url http://localhost:9000
# Deve funcionar - deletar objetos
aws s3 rm s3://finance-data/old-file.txt --endpoint-url http://localhost:9000

Passo 9: Configurar Auditoria

As auditorias são automaticamente registradas no Ranger. Para visualizar:

  1. Acesse Ranger Admin UI
  2. Clique em “Audit” → “Access”
  3. Filtre por:
  • Service Name: minio-dev
  • User: bob
  • Resource: finance-data/sensitive/*

Você verá todas as tentativas de acesso, incluindo as negadas.

Passo 10: Políticas Avançadas com Condições

Política com Restrição de Horário

Policy Name: business-hours-only
Description: Acesso permitido apenas em horário comercial

Resources:
- Bucket: finance-data
- Object: /sensitive/*
Allow Conditions:
- Select Group: finance-group
- Permissions: Read
- Access Time: 09:00-18:00 (Monday-Friday)

Política com Restrição de IP

Policy Name: internal-network-only
Description: Acesso restrito à rede interna

Resources:
- Bucket: hr-data
- Object: /*
Allow Conditions:
- Select Group: hr-group
- Permissions: Read, Write
- IP Address: 10.0.0.0/8, 172.16.0.0/12

Exemplo de Caso de Uso Real

Cenário: Empresa de E-commerce

Uma empresa de e-commerce armazena dados em MinIO com a seguinte estrutura:

buckets/
├── customer-data/
│ ├── profiles/
│ ├── orders/
│ └── payment-methods/
├── product-catalog/
│ ├── images/
│ └── descriptions/
├── analytics/
│ ├── clickstream/
│ └── reports/
└── backups/
├── daily/
└── weekly/

Requisitos de Governança

  1. LGPD Compliance: Dados pessoais sensíveis devem ter acesso restrito
  2. Segregação de Funções: Marketing não pode acessar dados de pagamento
  3. Auditoria: Todos os acessos a dados de clientes devem ser registrados
  4. Backup: Apenas equipe de infraestrutura pode acessar backups

Implementação com Ranger

Políticas:

1. Customer Data Protection (PII):
- Resource: customer-data/payment-methods/*
- Allow: compliance-team, finance-team (Read)
- Deny: All others
- Audit: All accesses

2. Marketing Read Access:
- Resource: customer-data/profiles/*, analytics/*
- Allow: marketing-team (Read, List)
- Deny: customer-data/payment-methods/*

3. Product Management:
- Resource: product-catalog/*
- Allow: product-team (Read, Write, Delete)
- Allow: marketing-team (Read)

4. Backup Restricted:
- Resource: backups/*
- Allow: infra-team (Read, Write, Delete)
- Deny: All others

5. Analytics Self-Service:
- Resource: analytics/reports/*
- Allow: data-analysts (Read, Write)
- Resource: analytics/clickstream/*
- Allow: data-analysts (Read only)

Monitoramento e Alertas

Configurar Alertas no Ranger

Você pode configurar alertas para eventos críticos:

# Exemplo de configuração de alerta
Alert Name: Unauthorized Access Attempts
Condition:
- Event Type: Access Denied
- Resource: customer-data/payment-methods/*
- Threshold: 5 attempts in 10 minutes

Action:
- Send email to: security@empresa.com
- Create incident in SIEM

Dashboard de Auditoria

Crie dashboards personalizados conectando Ranger a ferramentas de visualização:

  • Grafana: Visualize métricas de acesso em tempo real
  • Elasticsearch: Indexe logs de auditoria para análise avançada
  • Splunk: Correlacione eventos de segurança

Melhores Práticas

1. Princípio do Menor Privilégio

Sempre comece com permissões mínimas e expanda conforme necessário:

✓ Conceda acesso específico a buckets/objetos necessários
✗ Evite wildcards (*) em políticas de produção
✓ Use grupos em vez de usuários individuais
✓ Revise permissões trimestralmente

2. Segregação de Ambientes

Desenvolvimento: minio-dev (políticas relaxadas)
Homologação: minio-staging (políticas semelhantes a produção)
Produção: minio-prod (políticas rigorosas + MFA)

3. Hierarquia de Políticas

Nível 1: Políticas globais (todos os buckets)
Nível 2: Políticas por departamento
Nível 3: Políticas específicas de projeto
Nível 4: Políticas baseadas em tags/classificação

4. Auditoria e Compliance

  • Habilite auditoria para TODOS os acessos a dados sensíveis
  • Exporte logs regularmente para storage imutável
  • Configure retenção de logs conforme requisitos regulatórios (mínimo 7 anos para dados financeiros)
  • Implemente alertas para padrões anormais de acesso

5. Automação

Integre o Ranger com ferramentas de IaC:

# Exemplo com Terraform
resource "ranger_policy" "finance_access" {
name = "finance-department-access"
service = "minio-dev"
resources = {
bucket = ["finance-data"]
object = ["/*"]
}

policy_items {
groups = ["finance-group"]
permissions = ["read", "write", "list"]
}
}

Troubleshooting

Problema 1: Políticas não sendo aplicadas

Sintoma: Usuário consegue acessar recursos que deveriam ser bloqueados

Get Hugo Habbema’s stories in your inbox

Join Medium for free to get updates from this writer.

Solução:

# Verificar se o plugin Ranger está ativo no MinIO
docker logs minio-server | grep ranger

# Verificar sincronização de políticas
curl http://localhost:6080/service/plugins/policies/download/minio-dev
# Forçar refresh de políticas
docker restart minio-server

Problema 2: Auditoria não registrando eventos

Sintoma: Logs de acesso não aparecem no Ranger

Solução:

# Verificar conectividade
curl http://ranger-admin:6080/service/plugins/audit

# Verificar configuração do Solr
docker logs ranger-admin | grep solr
# Aumentar nível de log
export RANGER_AUDIT_LOG_LEVEL=DEBUG

Problema 3: Performance degradada

Sintoma: Latência aumentada em operações de object storage

Solução:

  • Habilite cache de políticas no plugin (padrão: 30 segundos)
  • Reduza frequência de auditoria para operações de leitura
  • Use políticas baseadas em grupos em vez de usuários individuais
  • Considere usar CDN/caching para objetos públicos

Conclusão

A integração entre Apache Ranger e MinIO proporciona uma solução poderosa para governança de dados em ambientes de object storage. Com políticas centralizadas, auditoria detalhada e controle granular, organizações podem:

  • Garantir compliance com regulamentações de privacidade
  • Implementar segurança em profundidade
  • Auditar e monitorar todos os acessos a dados sensíveis
  • Escalar a governança conforme o crescimento da infraestrutura

A implementação requer planejamento cuidadoso e compreensão dos requisitos de negócio, mas os benefícios em termos de segurança, compliance e operacionalidade justificam o investimento.

Recursos Adicionais

Próximos Passos

  1. Implemente classificação automática de dados usando Apache Atlas
  2. Integre com sistemas de identidade corporativa (LDAP/Active Directory)
  3. Configure data masking para proteger dados sensíveis
  4. Implemente políticas de retenção e lifecycle management
  5. Explore integração com ferramentas de Data Loss Prevention (DLP)

Até a próxima!

--

--