Segurança de Elastic Stack
LidoAula sobre segurança no Elastic Stack, abordando controle de acesso baseado em papéis (RBAC), proteção de comunicação com TLS, gerenciamento do ciclo de vida de índices (ILM) e monitoramento da saúde do cluster. Inclui exemplos práticos e exercícios com respostas.
O Elastic Stack é uma plataforma poderosa para busca, análise e visualização de dados, mas sua flexibilidade também exige atenção especial à segurança. Nesta aula, vamos explorar os quatro pilares fundamentais para proteger uma implantação Elastic Stack: controle de acesso baseado em papéis (RBAC), criptografia de comunicação (TLS), gerenciamento do ciclo de vida de índices (ILM) e monitoramento contínuo. Cada um desses componentes desempenha um papel crucial na construção de um ambiente seguro, confiável e em conformidade com políticas de segurança.
Vamos mergulhar em cada tópico com exemplos práticos, configurações e boas práticas. Ao final, você terá uma compreensão sólida de como implementar segurança no Elastic Stack, desde a configuração inicial até o monitoramento proativo.
RBAC (Role-Based Access Control)
O controle de acesso baseado em papéis (RBAC) é o mecanismo central para gerenciar permissões no Elastic Stack. Ele permite que os administradores definam papéis (roles) com permissões específicas e atribuam esses papéis a usuários. Isso garante que cada usuário tenha apenas os acessos necessários para executar suas tarefas, seguindo o princípio do menor privilégio.
No Elastic Stack, o RBAC é implementado através de recursos como users, roles e privileges. Os privilégios podem ser de cluster (como monitor ou manage) ou de índice (como read, write ou delete). A configuração pode ser feita via Kibana (UI) ou via API. Vamos ver um exemplo de criação de papel e usuário usando a API.
# Criar um papel chamado 'log_reader' com acesso de leitura ao índice 'logs-*'
PUT /_security/role/log_reader
{
"indices": [
{
"names": ["logs-*"],
"privileges": ["read"]
}
]
}
# Criar um usuário 'john' com o papel 'log_reader'
POST /_security/user/john
{
"password": "senha-forte",
"roles": ["log_reader"],
"full_name": "John Doe"
}
Também é possível usar o Kibana para gerenciar papéis e usuários de forma visual, acessando Stack Management → Security → Roles/Users. Lembre-se de que o RBAC depende da autenticação: você deve habilitar o módulo de segurança do Elasticsearch (por exemplo, com a licença básica gratuita) e configurar o realm de autenticação (como native, LDAP, SAML, etc.).
Boas práticas: evite usar o papel superuser em contas cotidianas; crie papéis granulares; revise periodicamente as permissões; e use o recurso de role mapping para integrar com provedores de identidade.
TLS (Transport Layer Security)
O TLS é essencial para proteger a comunicação entre os componentes do Elastic Stack (nós, Kibana, Logstash, Beats, etc.) e também entre clientes e o cluster. Sem TLS, os dados trafegam em texto plano, vulneráveis a interceptação e adulteração. O Elastic Stack suporta TLS para comunicação interna (entre nós) e para comunicação externa (HTTP).
Para habilitar TLS, é necessário gerar certificados (pode ser autoassinados para desenvolvimento, mas em produção é recomendado usar uma CA confiável). Vamos mostrar um exemplo de configuração no elasticsearch.yml para habilitar TLS na camada de transporte e HTTP.
# elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
Além disso, o Kibana também deve ser configurado para usar HTTPS, e os clientes (como Beats) devem ser configurados com as informações do certificado. O Elastic Stack oferece o utilitário elasticsearch-certutil para gerar os certificados necessários. Para uma implantação mais simples, você pode usar o elasticsearch-certutil cert para gerar um certificado para cada nó.
Boas práticas: use certificados assinados por uma CA confiável em produção; renove os certificados antes da expiração; monitore a validade dos certificados; e evite desabilitar a verificação de certificados.
Index Lifecycle (ILM)
O gerenciamento do ciclo de vida de índices (ILM) é um recurso que automatiza a gestão dos índices ao longo do tempo, aplicando políticas que definem fases como hot, warm, cold e delete. Isso ajuda a otimizar o armazenamento, reduzir custos e garantir que os dados sejam removidos de acordo com políticas de retenção, o que também é um aspecto de segurança (evitar retenção excessiva de dados sensíveis).
Uma política de ILM é composta por fases, cada uma com ações específicas. Por exemplo, na fase hot os índices são ativos e recebem escrita; na fase warm podem ser otimizados e reduzir réplicas; na fase cold podem ser movidos para armazenamento mais barato; e na fase delete são excluídos. Vamos criar uma política simples que exclui índices após 30 dias.
# Criar uma política de ILM
PUT /_ilm/policy/log_retention_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "50GB",
"max_age": "7d"
}
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
# Aplicar a política a um template de índice
PUT /_index_template/logs_template
{
"index_patterns": ["logs-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "log_retention_policy"
}
}
}
O ILM também pode ser gerenciado pela interface do Kibana em Stack Management → Index Lifecycle Policies. É importante planejar as políticas de acordo com os requisitos de negócio e compliance, definindo tempos de retenção adequados para cada tipo de dado.
Boas práticas: use o ILM para automatizar a retenção; teste as políticas em ambiente de desenvolvimento; monitore as ações do ILM; e combine com o índice de aliases para facilitar consultas.
Monitoring
O monitoramento do Elastic Stack é fundamental para garantir a segurança e a disponibilidade do sistema. O Elastic Stack oferece ferramentas como o Stack Monitoring (que coleta métricas de saúde dos nós, índices, etc.) e também a capacidade de configurar alertas para eventos de segurança.
O Stack Monitoring é habilitado por padrão no Elasticsearch e pode ser visualizado no Kibana em Stack Monitoring. Ele coleta métricas como uso de CPU, memória, disco, latência de busca, entre outras. Além disso, podemos usar o Watcher (ou alertas em versões mais recentes) para criar alertas baseados em condições, como tentativas de login falhas ou aumento anormal de tráfego.
# Exemplo de alerta com Watcher para detectar muitas falhas de autenticação
PUT /_watcher/watch/auth_failure_watch
{
"trigger": {
"schedule": {
"interval": "5m"
}
},
"input": {
"search": {
"request": {
"indices": ["filebeat-*"],
"body": {
"query": {
"bool": {
"filter": [
{"term": {"event.category": "authentication"}},
{"term": {"event.outcome": "failure"}}
]
}
}
}
}
}
},
"condition": {
"script": {
"source": "ctx.payload.hits.total >= 10"
}
},
"actions": {
"email_admin": {
"email": {
"to": "admin@example.com",
"subject": "Muitas falhas de autenticação",
"body": "Foram detectadas {{ctx.payload.hits.total}} falhas de autenticação nos últimos 5 minutos."
}
}
}
}
Além disso, você pode configurar o módulo de auditoria do Elasticsearch para registrar eventos de segurança, como acessos a índices e alterações de permissões. Isso é essencial para análises forenses e conformidade.
Boas práticas: monitore não apenas a saúde do cluster, mas também logs de segurança; configure alertas para eventos críticos; integre o monitoramento com ferramentas externas (como PagerDuty, Slack); e revise regularmente os dashboards de monitoramento.
Boas Práticas e Observações Finais
Além dos quatro pilares, lembre-se de manter o Elastic Stack atualizado, aplicar hardening nos sistemas operacionais, usar senhas fortes e armazenar segredos com segurança. O Elastic Stack oferece recursos como o Elastic Security para detecção de ameaças, mas isso é um tópico avançado. A segurança é um processo contínuo, então revise suas configurações periodicamente.
Referências
- Elasticsearch Security Privileges
- Elasticsearch Security Settings
- Set up TLS on Elasticsearch
- Index Lifecycle Management
- Monitor Elasticsearch Cluster
- Kibana Secure Settings
Exercícios
- Qual é a finalidade do RBAC no Elastic Stack e como ele ajuda na segurança?
- Explique como o TLS protege a comunicação no Elastic Stack e cite um cenário em que ele é indispensável.
- O que é o Index Lifecycle Management (ILM) e como ele pode contribuir para a segurança dos dados?
- Quais métricas o Stack Monitoring coleta e por que é importante para a segurança?
- Escreva um exemplo de como criar um papel no Elasticsearch que permita a um usuário apenas ler índices com prefixo 'app-logs-'.
PUT /_security/role/app_logs_reader
{
"indices": [
{
"names": ["app-logs-*"],
"privileges": ["read"]
}
]
}