Apache Ranger
Governança de Storage MinIO de forma padronizada.
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:
- Governança unificada: Gerencie políticas de MinIO junto com outros componentes do data lake
- Auditoria centralizada: Consolide logs de acesso de múltiplos sistemas
- Políticas dinâmicas: Aplique regras baseadas em tags, tempo, localização e outros contextos
- 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-demoPasso 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: bridgePasso 3: Inicializar os Serviços
bash
docker-compose up -dAguarde alguns minutos para os serviços iniciarem. Acesse:
- Ranger Admin UI: http://localhost:6080 (admin/admin)
- MinIO Console: http://localhost:9001 (admin/admin123456)
Passo 4: Configurar Service no Ranger
- Acesse o Ranger Admin UI
- Clique em “Service Manager” → “+” para adicionar novo serviço
- Selecione “S3” como tipo de serviço
- 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- 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/.keepPasso 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, ListPolí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, ListPolí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: YesPasso 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 DeniedTeste 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 DeniedTeste 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:9000Passo 9: Configurar Auditoria
As auditorias são automaticamente registradas no Ranger. Para visualizar:
- Acesse Ranger Admin UI
- Clique em “Audit” → “Access”
- 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/12Exemplo 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
- LGPD Compliance: Dados pessoais sensíveis devem ter acesso restrito
- Segregação de Funções: Marketing não pode acessar dados de pagamento
- Auditoria: Todos os acessos a dados de clientes devem ser registrados
- 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 SIEMDashboard 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 trimestralmente2. 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ção4. 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-serverProblema 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=DEBUGProblema 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
- Implemente classificação automática de dados usando Apache Atlas
- Integre com sistemas de identidade corporativa (LDAP/Active Directory)
- Configure data masking para proteger dados sensíveis
- Implemente políticas de retenção e lifecycle management
- Explore integração com ferramentas de Data Loss Prevention (DLP)
Até a próxima!










