Anunciando Subestação
Introdução
Temos o prazer de anunciar publicamente o lançamento do Substation , um kit de ferramentas de código aberto para criar pipelines de dados altamente configuráveis, sem manutenção e econômicos. A Substation resolve um problema que toda equipe de segurança tem, mas poucos podem reconhecer - a necessidade de normalizar, correlacionar e enriquecer seus dados de eventos de segurança em escala.
Por que construímos a subestação
A equipe de detecção e resposta da Brex precisava de uma solução escalável e de baixa manutenção que nos permitisse gerenciar os requisitos de processamento de dados de dezenas de fontes de eventos de segurança e conjuntos de dados exclusivos. Nosso objetivo era criar uma solução reutilizável para qualquer conjunto de dados, escalonável para qualquer volume de evento e fácil de implantar e manter.
O objetivo geral da Substation é capacitar as equipes de segurança e observabilidade para obter controle sobre seus logs de eventos com sobrecarga operacional mínima. A maioria das plataformas de segurança (ou seja, SIEM ) oferece poucas opções para equipes que desejam gerenciar a qualidade dos dados . Na melhor das hipóteses, eles podem dar aos usuários a capacidade de fazer transformações de dados simples depois que os eventos são ingeridos na plataforma. Se as equipes desejam dados de alta qualidade, normalmente precisam investir recursos operacionais e de engenharia na implantação e manutenção de sistemas distribuídos complexos.
Nossa equipe usa o Substation em produção há mais de 15 meses e achamos que agora é o momento certo para compartilhá-lo com a comunidade de segurança de código aberto. Como cada equipe tem uma definição diferente de “em escala”, abaixo estão alguns números de nossa implantação interna para ajudar a explicar como o usamos:
- Processe mais de 5 terabytes (TB) de dados por dia, com um custo variável de US$ 30 a US$ 40 por TB
- Sustentar mais de 100 mil eventos por segundo (EPS), com picos de mais de 200 mil EPS
- Implante novos pipelines de dados com centenas de recursos exclusivos em minutos
- Gerencie 30 pipelines de dados, cada um com designs e configurações exclusivos
- Gaste menos de 1 hora por semana em operações e manutenção
A subestação se diferencia de outras soluções de pipeline de dados de várias maneiras:
- Totalmente sem servidor — você nunca gerenciará um servidor ou pensará em dimensionar um cluster
- Projetado para escala - o sistema escala de 10 a mais de 100.000 eventos por segundo, e faz isso automaticamente sem a necessidade de intervenção de um engenheiro
- Infraestrutura e configurações como código — usamos Terraform , Jsonnet e AWS AppConfig , o que significa que você pode implantar pipelines de dados exclusivos e reutilizáveis em minutos
- Custo-benefício — fizemos um esforço extra para tornar as coisas acessíveis, incluindo a criação de uma versão compatível e mínima do Kinesis Producer and Client Libraries in Go
- Extensível — expomos o núcleo da subestação como pacotes Go, para que você possa criar seus próprios sistemas de processamento de dados personalizados
Substation é duas soluções em uma: é um sistema de pipeline de dados de fluxo orientado a eventos e um pacote para construir sistemas de processamento de dados personalizados.
Como um sistema de pipeline de dados, o Substation possui os seguintes recursos:
- Filtragem e processamento de eventos em tempo real
- Correlação e enriquecimento de eventos entre conjuntos de dados
- Roteamento de eventos simultâneos para sistemas downstream
- Executa em contêineres, construído para extensibilidade
- Suporte para novos filtros de eventos e processadores
- Suporte para novas fontes de ingestão e destinos de carga
- Suporta criação de aplicativos personalizados (por exemplo, multi-nuvem)
- Avalie e filtre dados estruturados e não estruturados
- Modifique dados de, para e no local como JSON
Esse padrão de design oferece suporte ao armazenamento de dados brutos e processados e carrega dados processados simultaneamente para vários destinos.
O projeto também oferece suporte a outros casos de uso. Cada pipeline de dados mostrado abaixo é um exemplo do que pode ser construído hoje:
Existem centenas de permutações de design exclusivas, todas totalmente controladas pelos usuários por meio de configurações Terraform e Jsonnet. Hoje, o projeto oferece essas opções de carregamento e carregamento de dados:
- AWS API Gateway (ingerir)
- AWS DynamoDB (carga)
- AWS Kinesis Data Streams (ingerir e carregar)
- AWS Kinesis Firehose (carga)
- AWS S3 (ingerir e carregar)
- AWS S3 via SNS (ingerir)
- AWS SNS (ingerir)
- AWS SQS (ingerir e carregar)
- HTTP (carregar)
- Imprimir na saída padrão (carregar)
- Lógica de sumô (carga)
Uma das maiores vantagens do Substation é que o sistema de pipeline de dados minimiza os custos operacionais e de infraestrutura, dimensionando automaticamente os recursos para dentro e para fora sem a intervenção de um engenheiro. Vemos isso todos os dias na Brex e geralmente está relacionado a mudanças nas atividades dos funcionários, sistemas e usuários. Aqui está um exemplo:
Uma semana normal no Brex cria picos e vales de atividade com os quais nossos recursos escalam, mas às vezes coisas não planejadas acontecem e os picos ficam muito, muito altos. Um dia, em meados de junho, verifiquei nosso painel de métricas de processamento de eventos e vi o seguinte:
É difícil ver, mas nosso volume de eventos aumentou 10x em um período de algumas horas e aumentou 4x em menos de uma hora . A escala desse aumento causaria estragos nos sistemas tradicionais de pipeline de dados, provavelmente causando um incidente devido à memória, CPU e alarmes de perda de evento, todos acionados ao mesmo tempo, mas para nós não foi um evento e, em vez disso, ficamos imaginando que divertido havíamos perdido.
Trabalho futuro
A subestação está em desenvolvimento ativo e usa versão semântica para lançamentos. Embora não tenhamos um roteiro para compartilhar, estamos interessados em explorar essas oportunidades com o projeto em 2023:
- Funções de enriquecimento de dados para o sistema de pipeline de dados e pacote público
- Suporte para vários provedores de serviços em nuvem, incluindo funcionalidade entre nuvens
- Verificação de configuração e reversão automatizada no AppConfig
- Recuperação automatizada para falhas durante a ingestão de dados assíncronos (por exemplo, S3)
- Produtores escaláveis e idempotentes para afundar dados
Projetos de código aberto deste tamanho não são criados isoladamente, então obrigado a todos na Brex* que contribuíram para o projeto e o tornaram possível, e obrigado a todos os futuros colaboradores que ainda não conhecemos!
* Agradecimentos especiais à equipe do projeto Brex e colaboradores:
- Josh Liburdi (líder da equipe de projeto, arquiteto principal e engenheiro)
- Julie Agnes Sparks (equipe de projeto, documentação, revisão de código)
- Parsa Attari (documentação, revisão de código)
- Jake Miller (contribuições de código)
- Ben Morris (revisão de segurança)
- Dan Gilmartin (revisão de arquitetura)
- Mike Ruth (revisão de arquitetura)