Omer Kushmaro

Gerencie sua pilha de segurança do Elastic como código com o provedor Terraform do Elastic Stack.

Das regras de detecção aos conectores de IA, as versões mais recentes do provedor Terraform trazem segurança, observabilidade e recursos de aprendizado de máquina para seus fluxos de trabalho de infraestrutura como código.

5 min de leituraProduct Updates, Enablement
Gerencie sua pilha de segurança do Elastic como código com o provedor Terraform do Elastic Stack.

O provedor Terraform do Elastic Stack atingiu um marco significativo. A partir da versão v0.13.1, você pode gerenciar sua postura de segurança do Elasticsearch — regras de detecção, listas de exceção e regras predefinidas — juntamente com tarefas de detecção de anomalias de aprendizado de máquina, monitores sintéticos e conectores de IA, tudo como código.

Isso integra sua lógica de detecção e tarefas de aprendizado de máquina ao mesmo fluxo de trabalho versionado e revisado por pares que seus clusters principais. Isso garante que sua postura de segurança e os conectores de IA não sejam mais exceções manuais em um ambiente totalmente automatizado.

O desafio: Configuração de segurança e observabilidade em escala

À medida que as implementações do Elastic crescem, também aumenta a complexidade de gerenciá-las. As equipes de segurança mantêm centenas de regras de detecção. Os SREs configuram o monitoramento em dezenas de clusters. Os engenheiros de aprendizado de máquina ajustam as tarefas de detecção de anomalias em vários ambientes. Todas essas configurações devem ser consistentes, auditáveis e reproduzíveis.

Sem infraestrutura como código, as equipes enfrentam dois problemas:

  1. Desvio de configuração. Regras, políticas e monitores são criados manualmente através da interface do usuário do Kibana. Com o tempo, a produção e a encenação divergem. Ninguém tem certeza de qual versão de uma regra de detecção está sendo executada em cada local.

  2. Rastro de auditoria oculto. Quando uma regra de detecção é alterada ou uma exceção é adicionada, não há solicitação de pull request para revisar, nenhum histórico de commits para rastrear e nenhum caminho de reversão caso algo dê errado. Os usuários precisam fazer um esforço extra para acessar esse histórico.

O provedor Terraform do Elastic Stack resolve isso integrando essas configurações ao mesmo fluxo de trabalho versionado e revisado por pares que as equipes já utilizam para infraestrutura.

Artefatos de segurança como código: regras de detecção, exceções e regras predefinidas.

Agora você pode gerenciar todo o ciclo de vida das regras de detecção do Elastic Security por meio do Terraform.

Regras de detecção

O recurso elasticstack_kibana_security_detection_rule permite definir, versionar e implantar regras de detecção no formato da Linguagem de Configuração HashiCorp (HCL):

resource "elasticstack_kibana_security_detection_rule" "suspicious_admin_logon" {
  name        = "Suspicious Admin Logon Activity"
  type        = "query"
  query       = "event.action:logon AND user.name:admin"
  language    = "kuery"
  enabled     = true
  description = "Detects suspicious admin logon activities"
  severity    = "high"
  risk_score  = 75
  from        = "now-6m"
  to          = "now"
  interval    = "5m"
  tags        = ["security", "authentication", "admin"]
}

Isso significa que suas regras de detecção residem no Git, passam por revisão de código e são implantadas de forma consistente em todos os ambientes. Chega de clicar na interface do Kibana para replicar regras do ambiente de teste para o de produção.

Documentação de recursos da regra de detecção

Listas e itens de exceção

A abordagem de segurança como código se estende a um conjunto completo de recursos de gerenciamento de exceções:

  • elasticstack_kibana_security_exception_list - Criar e gerenciar listas de exceção
  • elasticstack_kibana_security_exception_item - Defina itens de exceção individuais dentro de uma lista
  • elasticstack_kibana_security_list e elasticstack_kibana_security_list_item - Gerenciar listas de valores para listas de permissões de IP, hashes de arquivos e outros indicadores.
  • elasticstack_kibana_security_list_data_streams - Associar listas a fluxos de dados específicos

Eis um exemplo que os une: uma lista de exceções com itens que suprimem falsos positivos conhecidos para uma regra de detecção:

resource "elasticstack_kibana_security_exception_list" "vuln_scanner_exceptions" {
  list_id        = "vuln-scanner-exceptions"
  name           = "Vulnerability Scanner Exceptions"
  description    = "Suppress alerts from authorized vulnerability scanners"
  type           = "detection"
  namespace_type = "single"
  tags           = ["security", "vulnerability-scanning"]
}

resource "elasticstack_kibana_security_exception_item" "nessus_scanner" {
  list_id        = elasticstack_kibana_security_exception_list.vuln_scanner_exceptions.list_id
  item_id        = "nessus-scanner"
  name           = "Nessus Scanner - Authorized"
  description    = "Suppress alerts from authorized Nessus scanner hosts"
  type           = "simple"
  namespace_type = "single"

  entries = [
    {
      type     = "match"
      field    = "source.ip"
      operator = "included"
      value    = "10.0.50.10"
    },
    {
      type     = "match_any"
      field    = "process.name"
      operator = "included"
      values   = ["nessus", "nessusd"]
    }
  ]

  tags = ["nessus", "authorized-scanner"]
}

resource "elasticstack_kibana_security_exception_item" "qualys_scanner" {
  list_id        = elasticstack_kibana_security_exception_list.vuln_scanner_exceptions.list_id
  item_id        = "qualys-scanner"
  name           = "Qualys Scanner - Authorized"
  description    = "Suppress alerts from authorized Qualys scanner subnet"
  type           = "simple"
  namespace_type = "single"

  entries = [
    {
      type     = "match"
      field    = "source.ip"
      operator = "included"
      value    = "10.0.51.0/24"
    }
  ]

  tags = ["qualys", "authorized-scanner"]
}

A lista de exceções e seus itens são vinculados por list_id, portanto o Terraform gerencia o grafo de dependências automaticamente. Adicionar um novo scanner autorizado é uma simples solicitação de pull request – sem precisar navegar pela interface do Kibana, sem risco de esquecer qual ambiente recebeu a atualização.

Regras de segurança pré-configuradas

O recurso elasticstack_kibana_prebuilt_rule permite gerenciar as regras de detecção pré-construídas do Elastic via Terraform. Isso é particularmente valioso para organizações que precisam rastrear quais regras predefinidas estão ativadas, personalizar seus parâmetros e garantir uma implementação consistente em todos os ambientes.

Detecção de anomalias em aprendizado de máquina como código

A detecção de anomalias por meio de aprendizado de máquina é uma das funcionalidades mais poderosas do Elasticsearch, mas o gerenciamento de tarefas de aprendizado de máquina em diferentes ambientes tem sido tradicionalmente um processo manual. Você cria um trabalho na interface do Kibana, ajusta os detectores, configura o fluxo de dados e espera que alguém documente as configurações para que elas possam ser replicadas no próximo ambiente.

O recurso elasticstack_elasticsearch_ml_anomaly_detection_job altera isso. Agora você pode definir a configuração completa de uma tarefa de detecção de anomalias no HCL — detectores, intervalos de buckets, influenciadores, feeds de dados e limites de análise — e implantá-la de forma consistente em ambientes de desenvolvimento, teste e produção.

resource "elasticstack_elasticsearch_ml_anomaly_detection_job" "cpu_anomalies" {
  job_id      = "high-cpu-by-host"
  description = "Detect unusual CPU usage patterns"

  analysis_config = {
    bucket_span = "15m"
    detectors   = [{
      function   = "high_mean"
      field_name = "system.cpu.user_pct"
    }]
    influencers = ["host.name"]
  }

  data_description = {
    time_field = "@timestamp"
  }
}

Isso é importante para equipes que dependem de aprendizado de máquina para detectar anomalias na infraestrutura, comportamentos incomuns de usuários ou ameaças à segurança. Em vez de recriar manualmente os trabalhos ao iniciar novos clusters ou ao recuperar de falhas, toda a configuração de aprendizado de máquina reside em um sistema de controle de versão – revisável, repetível e recuperável.

Automação entre clusters com chaves de API

Para organizações que executam vários clusters Elasticsearch, o provedor agora oferece suporte a chaves de API de cluster para pesquisa entre clusters (CCS) e replicação entre clusters (CCR). Você pode criar chaves de API projetadas especificamente para comunicação segura entre clusters, permitindo a automação de ponta a ponta de arquiteturas com múltiplos clusters.

Isso significa que você pode provisionar dois clusters, configurar o CCS/CCR entre eles e definir as credenciais de segurança necessárias, tudo em uma única configuração do Terraform.

resource "elasticstack_elasticsearch_security_api_key" "ccs_key" {
  name = "cross-cluster-search-key"
  type = "cross_cluster"

  access = {
    search = [{
      names = ["logs-*", "metrics-*"]
    }]
    replication = [{
      names = ["archive-*"]
    }]
  }

  expiration = "90d"

  metadata = jsonencode({
    environment = "production"
    purpose     = "ccs-ccr-between-prod-clusters"
    team        = "platform"
  })
}

Quando type é definido como cross_cluster, a chave de API é definida para operações CCS/CCR. Você define quais padrões de índice são acessíveis para pesquisa e replicação, define uma política de expiração e marca a chave com metadados - tudo isso pode ser revisado em uma solicitação de pull.

Saiba mais sobre os recursos de chave de API na documentação.

Conectores de IA como código

O provedor agora oferece suporte aos conectores .bedrock e .gen-ai , trazendo a infraestrutura de IA para seus fluxos de trabalho do Terraform. À medida que as equipes integram cada vez mais modelos de linguagem complexos em seus fluxos de trabalho do Elastic — para assistentes de IA, descoberta de ataques e investigações automatizadas — o gerenciamento dessas configurações de conectores como código torna-se essencial.

resource "elasticstack_kibana_action_connector" "bedrock" {
  name              = "aws-bedrock"
  connector_type_id = ".bedrock"
  config = jsonencode({
    apiUrl       = "https://bedrock-runtime.us-east-1.amazonaws.com"
    defaultModel = "anthropic.claude-v2"
  })
  secrets = jsonencode({
    accessKey = var.aws_access_key
    secret    = var.aws_secret_key
  })
}

resource "elasticstack_kibana_action_connector" "openai" {
  name              = "openai"
  connector_type_id = ".gen-ai"
  config = jsonencode({
    apiProvider  = "OpenAI"
    apiUrl       = "https://api.openai.com/v1/chat/completions"
    defaultModel = "gpt-4"
  })
  secrets = jsonencode({
    apiKey = var.openai_api_key
  })
}

Com esses conectores definidos no Terraform, você pode versionar sua configuração de integração de IA juntamente com o restante da sua infraestrutura Elastic — e trocar modelos ou provedores por meio de uma simples solicitação de pull request.

Melhorias na observabilidade

Monitores sintéticos

O recurso elasticstack_kibana_synthetics_monitor agora inclui um campo labels , permitindo melhor organização e filtragem de verificações sintéticas. Os rótulos permitem categorizar os monitores por equipe, ambiente ou serviço, facilitando o gerenciamento do monitoramento sintético em grande escala.

Melhorias adicionais na plataforma

Os lançamentos recentes também incluíram diversos recursos e atributos que complementam a cobertura do provedor:

  • elasticstack_elasticsearch_alias - Gerenciar aliases do Elasticsearch como um recurso dedicado
  • elasticstack_kibana_default_data_view - Defina a visualização de dados padrão para um espaço do Kibana.
  • solution atributo em elasticstack_kibana_space - Configurar o tipo de solução para espaços do Kibana (disponível a partir da versão 8.16)
  • Aprimoramentos na política do agente de frota - host_name_format para configurar nome do host versus FQDN e required_versions para fixação de versão.

Para começar

Se você já utiliza o provedor Terraform do Elastic Stack, atualize para a versão mais recente para obter todos esses recursos:

terraform {
  required_providers {
    elasticstack = {
      source  = "elastic/elasticstack"
      version = "~> 0.14"
    }
  }
}

Se você é iniciante no gerenciamento do Elastic Stack com Terraform, comece consultando a documentação do provedor no registro do Terraform.

Para começar a usar o Elastic Cloud hoje mesmo, faça login no console do Elastic Cloud ou inscreva-se para um teste gratuito.
Para conferir a lista completa de alterações, acesse as notas de lançamento no GitHub.

Compartilhe este artigo