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

Exercícios

  1. Qual é a finalidade do RBAC no Elastic Stack e como ele ajuda na segurança?
  2. ✓ Resposta: O RBAC (controle de acesso baseado em papéis) permite definir permissões granulares para usuários, atribuindo papéis com privilégios específicos. Isso garante que cada usuário tenha apenas o acesso necessário, reduzindo o risco de exposição de dados e ações não autorizadas.
  3. Explique como o TLS protege a comunicação no Elastic Stack e cite um cenário em que ele é indispensável.
  4. ✓ Resposta: O TLS criptografa os dados em trânsito, impedindo que sejam interceptados ou adulterados. É indispensável em ambientes de produção onde os dados trafegam pela rede, especialmente em nuvens públicas ou redes não confiáveis, para proteger dados sensíveis.
  5. O que é o Index Lifecycle Management (ILM) e como ele pode contribuir para a segurança dos dados?
  6. ✓ Resposta: O ILM automatiza a gestão do ciclo de vida dos índices, movendo-os por fases (hot, warm, cold, delete) de acordo com políticas. Isso ajuda a garantir que dados sensíveis sejam excluídos automaticamente após o período de retenção, reduzindo o risco de vazamento e cumprindo requisitos de conformidade.
  7. Quais métricas o Stack Monitoring coleta e por que é importante para a segurança?
  8. ✓ Resposta: O Stack Monitoring coleta métricas de saúde do cluster, como CPU, memória, disco, latência de busca, número de nós, entre outras. É importante para a segurança porque permite detectar anomalias (como picos de uso) que podem indicar ataques ou falhas, e também para garantir a disponibilidade do serviço.
  9. Escreva um exemplo de como criar um papel no Elasticsearch que permita a um usuário apenas ler índices com prefixo 'app-logs-'.
  10. ✓ Resposta: Exemplo de criação de papel via API:
    PUT /_security/role/app_logs_reader
    {
      "indices": [
        {
          "names": ["app-logs-*"],
          "privileges": ["read"]
        }
      ]
    }