ElasticsearchV7
Versão da integração: 17.0
Configurar o ElasticsearchV7 para trabalhar com o Google Security Operations
Como criar um token de API
Para criar um novo token de API, faça a seguinte solicitação:
curl --location --request POST 'http://<server address>:<port>/_security/api_key' \
--header 'Authorization: Basic Base64(username, password)' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "siemplify-integration",
"role_descriptors": {}
}':
Exemplo de resposta:
{
"id": "G1NIWnI",
"name": "siemplify-integration",
"api_key": "dSwyjWJ_Ql"
}
- Usamos os parâmetros "id" e "api_key" da resposta.
- Use a codificação base64 de "id" e "api_key" unidas por dois pontos, como "id:api_key".
- O resultado é usado como um token de API na integração.
Como acessar o Elasticsearch
O Google SecOps acessa o Elasticsearch pela API RESTful na porta TCP 9200 por padrão. O servidor do Google SecOps precisa de acesso aos nós relevantes do Elasticsearch no TCP 9200 (padrão) ou em uma porta alternativa se a porta padrão não foi usada durante a implantação do Elasticsearch.
Configurar a integração do ElasticsearchV7 no Google SecOps
Para instruções detalhadas sobre como configurar uma integração no Google SecOps, consulte Configurar integrações.
Configurar a integração do Elasticsearch com um certificado de CA
Se necessário, verifique sua conexão com um arquivo de certificado de CA.
Antes de começar, verifique se você tem o seguinte:
- O arquivo de certificado de CA
- A versão mais recente da integração do Elasticsearch
Para configurar a integração com um certificado da CA, siga estas etapas:
- Analise o arquivo de certificado da CA em uma string Base64.
- Abra a página de parâmetros de configuração da integração.
- Insira a string no campo Arquivo de certificado da CA.
- Para testar se a integração foi configurada corretamente, marque a caixa de seleção Verificar SSL e clique em Testar.
Parâmetros de integração
Use os seguintes parâmetros para configurar a integração:
Nome de exibição do parâmetro | Tipo | Valor padrão | É obrigatório | Descrição |
---|---|---|---|---|
Nome da instância | String | N/A | Não | Nome da instância em que você pretende configurar a integração. |
Descrição | String | N/A | Não | Descrição da instância. |
Endereço do servidor | String | x.x.x.x | Sim | Endereço IP do servidor Elasticsearch 7.0.0. |
Nome de usuário | String | N/A | Sim | O endereço de e-mail do usuário que deve ser usado para se conectar ao Elasticsearch 7.0.0. |
Senha | Senha | N/A | Sim | A senha do usuário correspondente. |
Token da API | Senha | N/A | Não | Token da API XPack do Elasticsearch. |
Autenticar | Caixa de seleção | Desmarcado | Não | N/A |
Verificar SSL | Caixa de seleção | Desmarcado | Não | Use essa caixa de seleção se a conexão do Elasticsearch 7.0.0 exigir uma verificação SSL (desmarcada por padrão). |
Arquivo de certificado de CA | String | N/A | Não | Arquivo de certificado de CA. |
Executar remotamente | Caixa de seleção | Desmarcado | Não | Marque a caixa para executar a integração configurada remotamente. Depois de marcada, a opção aparece para selecionar o usuário remoto (agente). |
Ações
Pesquisa avançada do ES
Descrição
Um teste do Elasticsearch pré-criado que retorna um dicionário de palavras.
Parâmetros
Parâmetros | Tipo | Valor padrão | Descrição |
---|---|---|---|
Índice | String | * | Padrão de pesquisa para um índice do Elasticsearch. No Elastic, o índice é como um DatabaseName, e os dados são armazenados em vários índices.Esse parâmetro define em quais índices pesquisar. Pode ser um nome exato, por exemplo, "smp_playbooks-2019.06.13", ou você pode usar um caractere curinga para pesquisar por um padrão, por exemplo, "smp_playbooks-2019.06 "ou "smp". Para saber mais sobre os índices do Elasticsearch, acesse https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Consulta | String | * | A consulta de pesquisa a ser realizada. Ele está na sintaxe do Lucene. IE1: "*" (é um caractere curinga que retorna todos os registros) IE2: "level:error" IE3: "level:information" IE4: "level:error OR level:warning" Para saber mais sobre a sintaxe do Lucene, acesse https://www.elastic.co/guide/en/kibana/current/lucene-query.html#lucene-query\r\nhttps://www.elastic.co/guide/en/elasticsearch/reference/7.1/query-dsl-query-string-query.html#query-string-syntax |
Limite | String | 100 | Limita a contagem de retorno de documentos, por exemplo: 10. 0 = Sem limite. |
Campo de exibição | String | * | Limita os campos retornados. O padrão "*" retorna todos os campos. Você pode declarar um único campo, por exemplo, "level". |
Campo de pesquisa | String | _all | Campo de pesquisa para consultas de texto livre (quando a consulta não especifica um nome de campo). O padrão é "_all", o que significa que todos os campos são pesquisados. É melhor usar a sintaxe adequada do Lucene nos campos "_all" ou a pesquisa textual em um campo específico. Ie1: Search Field = "_all". Consulta = "level:error". A consulta vai retornar todos os registros em que o campo "level" é igual a "error". Ie2: Search Field = "Message", query = "Login Alarm". A consulta vai retornar todos os registros em que o campo "Message" contém o texto "Login Alarm". |
Campo de carimbo de data/hora | String | @timestamp | O nome do campo em que a filtragem com base em tempo será executada. O padrão é @timestamp. Se as duas datas estiverem vazias, nenhum filtro com base no tempo será aplicado. |
Data mais antiga | String | now-1d | Data de início da pesquisa. A pesquisa vai retornar apenas registros iguais ou posteriores a esse momento. A entrada pode estar em UTC exato: Formato: AAAA-MM-DDTHH:MM:SSZ Exemplo: 2019-06-04T10:00:00Z A entrada também pode ser relativa (usando cálculo de datas): tie: "now", "now-1d", "now-1d/d", "now-2h/h" Para saber mais sobre cálculos de datas, acesse https://www.elastic.co/guide/en/elasticsearch/reference/7.1/common-options.html#date-math |
Data mais antiga | String | agora | Data de término da pesquisa. A pesquisa vai retornar apenas registros iguais ou anteriores a esse ponto no tempo. A entrada pode estar em UTC exato: Formato: AAAA-MM-DDTHH:MM:SSZ Exemplo: 2019-06-04T10:00:00Z A entrada também pode ser relativa (usando cálculos de data): Por exemplo: "now", "now-1d", "now-1d/d", "now-2h/h" Para saber mais sobre cálculos de datas, acesse https://www.elastic.co/guide/en/elasticsearch/reference/7.1/common-options.html#date-math |
Executar em
Essa ação é executada em todas as entidades.
Resultados da ação
Resultado do script
Nome do resultado do script | Opções de valor | Exemplo |
---|---|---|
resultados | N/A | N/A |
Pesquisa da DSL
Descrição
Pesquisa tudo no Elasticsearch e retorna resultados em um formato de dicionário. Essa ação só aceita consultas sem período. Se você quiser usar um período na sua consulta, use a ação "Pesquisa avançada do ES".
Parâmetros
Parâmetros | Tipo | Valor padrão | Descrição |
---|---|---|---|
Índice | String | * | Padrão de pesquisa para um índice do Elasticsearch. No Elasticsearch, o índice é como um DatabaseName, e os dados são armazenados em vários índices. Esse parâmetro define em quais índices pesquisar. Pode ser um nome exato, por exemplo, \"smp_playbooks-2019.06.13\"\r\nou você pode usar um caractere curinga () para pesquisar por um padrão, por exemplo, \"smp_playbooks-2019.06\" ou \"smp*\". Para saber mais sobre os índices do Elasticsearch, acesse https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Consulta | String | * | A consulta de pesquisa a ser realizada. Ele está na sintaxe do Lucene. IE1: \"*\" (é um caractere curinga que retorna todos os registros) IE2: \"level:error\" IE3: \"level:information\" IE4: \"level:error OR level:warning\" Para saber mais sobre a sintaxe do Lucene, acesse https://www.elastic.co/guide/en/kibana/current/lucene-query.html#lucene-query\r\nhttps://www.elastic.co/guide/en/elasticsearch/reference/7.1/query-dsl-query-string-query.html#query-string-syntax |
Limite | String | 100 | Limita a contagem de retorno de documentos, por exemplo: 10. 0 = Sem limite |
Executar em
Essa ação é executada em todas as entidades.
Resultados da ação
Resultado do script
Nome do resultado do script | Opções de valor | Exemplo |
---|---|---|
resultados | N/A | N/A |
Resultado do JSON
[
{
"_score": 0.2876821,
"_type": "person",
"_id": "2",
"_source": {
"lastname": "Smith",
"name": "John",
"job_description": "Systems administrator"
},
"_index": "accounts"
}, {
"_score": 0.28582606,
"_type": "person",
"_id": "1",
"_source":
{
"lastname": "Doe",
"name": "John",
"job_description": "Systems administrator and Linux specialist"
},
"_index": "accounts"
}
]
Ping
Descrição
O teste verifica a conectividade com o servidor do Elasticsearch.
Parâmetros
N/A
Executar em
Essa ação é executada em todas as entidades.
Resultados da ação
Resultado do script
Nome do resultado do script | Opções de valor | Exemplo |
---|---|---|
is_success | Verdadeiro/Falso | is_success:False |
Pesquisa simples do ES
Descrição
A ação pesquisa tudo no Elasticsearch e retorna resultados em um formato de dicionário.
Parâmetros
Parâmetros | Tipo | Valor padrão | Descrição |
---|---|---|---|
Índice | String | * | Padrão de pesquisa para um índice do Elasticsearch. No Elasticsearch, o índice é como um DatabaseName, e os dados são armazenados em vários índices. Esse parâmetro define em quais índices pesquisar. Pode ser um nome exato, por exemplo, \"smp_playbooks-2019.06.13\", ou você pode usar um caractere curinga () para pesquisar por um padrão, por exemplo, \"smp_playbooks-2019.06\" ou \"smp*\". Para saber mais sobre os índices do Elasticsearch, acesse https://www.elastic.co/blog/what-is-an-elasticsearch-index |
Consulta | String | * | A consulta de pesquisa a ser realizada. Ele está na sintaxe do Lucene. IE1: \"*\" (é um caractere curinga que retorna todos os registros) IE2: \"level:error\" IE3: \"level:information\" IE4: \"level:error OR level:warning\" Para saber mais sobre a sintaxe do Lucene, acesse https://www.elastic.co/guide/en/kibana/current/lucene-query.html#lucene-query\r\nhttps://www.elastic.co/guide/en/elasticsearch/reference/7.1/query-dsl-query-string-query.html#query-string-syntax |
Limite | String | 100 | Limita a contagem de retorno de documentos, por exemplo: 10. 0 = Sem limite. |
Executar em
Essa ação é executada em todas as entidades.
Resultados da ação
Resultado do script
Nome do resultado do script | Opções de valor | Exemplo |
---|---|---|
resultados | N/A | N/A |
Resultado do JSON
[{
"_score": 0.2876821,
"_type": "person",
"_id": "2",
"_source":
{
"lastname": "Smith",
"name": "John",
"job_description": "Systems administrator"
},
"_index": "accounts"
},
{
"_score": 0.28582606,
"_type": "person",
"_id": "1",
"_source":
{
"lastname": "Doe",
"name": "John",
"job_description": "Systems administrator and Linux specialist"
},
"_index": "accounts"
}
]
Conectores
Configurar conectores do Elasticsearch v7 no Google SecOps
Para instruções detalhadas sobre como configurar um conector no Google SecOps, consulte Configurar o conector.
Para configurar o conector selecionado, use os parâmetros específicos listados nas tabelas a seguir:
- Parâmetros de configuração do conector do Elasticsearch
- Parâmetros de configuração do conector DSL do Elasticsearch
Conector do Elasticsearch
Descrição
Neste tópico, mostramos como o Google SecOps integra o Elasticsearch ao mecanismo e à configuração para ingestão e processamento.
Encaminhamento de alertas do Elasticsearch para o Google SecOps
O Google SecOps vai pesquisar os índices especificados do Elasticsearch com uma consulta fornecida (usando a sintaxe de consulta do Lucene) e retornar documentos do Elasticsearch que serão traduzidos e contextualizados como "alertas" para casos.
Parâmetros do conector
Use os seguintes parâmetros para configurar o conector:
Nome de exibição do parâmetro | Tipo | Valor padrão | É obrigatório | Descrição |
---|---|---|---|---|
Ambiente padrão | String | N/A | Não | Selecione o ambiente necessário. Por exemplo, "Cliente Um". |
Executar a cada | Número inteiro | 0:0:0:10 | Não | Selecione o período de tempo para executar a conexão. Por exemplo, "todos os dias". |
Nome do campo do produto | String | device_product | Sim | O nome do campo usado para determinar o produto do dispositivo. Exemplo: _type. |
Nome do campo do evento | String | nome | Sim | O nome do campo usado para determinar o nome do evento (subtipo). Exemplo: _source_match_event_id. |
Tempo limite do script (segundos) | String | 60 | Sim | O limite de tempo (em segundos) para o processo Python que executa o script atual. |
Endereço do servidor | String | N/A | Sim | O endereço do servidor Elasticsearch, ou seja, http://{ip_address}:{port} |
Nome de usuário | String | N/A | Sim | Nome de usuário do Elasticsearch. |
Senha | Senha | N/A | Sim | Senha do Elasticsearch. |
Autenticar | Caixa de seleção | Desmarcado | Não | Se é necessário autenticar na conexão. |
Token da API | Senha | N/A | Não | Token da API XPack do Elasticsearch. |
Verificar SSL | Caixa de seleção | Desmarcado | Não | Se é preciso usar SSL na conexão. |
Campo "Nome do alerta" | String | N/A | Sim | O nome do campo em que o nome do alerta está localizado (caminho de campo simples). Exemplo: _source_alert_info_alert |
Campo de carimbo de data/hora | String | N/A | Sim | O nome do campo em que o carimbo de data/hora está localizado (caminho do campo simples). Exemplo: source@timestamp |
Campo "Ambiente" | String | N/A | Não | O nome do campo em que o ambiente está localizado (caminho de campo simples). Exemplo: _source_environment |
Índices | String | N/A | Não | Padrão de índice para pesquisar. Exemplo: "*" |
Consulta | String | N/A | Não | Consulta de padrão de pesquisa (sintaxe de consulta do Lucene). Exemplo: "*" |
Limite de contagem de alertas | Número inteiro | 20 | Sim | Número máximo de alertas a serem extraídos em um ciclo. Exemplo: 20. |
Número máximo de dias para retroceder | Número inteiro | 1 | Sim | Número máximo de dias para buscar alertas desde. Exemplo: 3. |
Mapeamento do campo de gravidade | String | N/A | Não | Nome do campo em que o valor de gravidade é armazenado. |
Endereço do servidor proxy | String | N/A | Não | O endereço do servidor proxy a ser usado. |
Nome de usuário do proxy | String | N/A | Não | O nome de usuário do proxy para autenticação. |
Senha do proxy | Senha | N/A | Não | A senha do proxy para autenticação. |
Nome do campo de gravidade | String | N/A | Não | Se você quiser mapear a gravidade com base no valor da string, crie um arquivo de mapeamento. Consulte o portal de documentação para mais detalhes. |
Padrão de regex do ambiente | String | .* | Não | Um padrão de regex a ser executado no valor encontrado no campo "Nome do campo de ambiente". O padrão é ".*" para capturar tudo e retornar o valor sem alterações. Usado para permitir que o usuário manipule o campo de ambiente usando a lógica regex. Se o padrão de regex for nulo ou vazio, ou se o valor do ambiente for nulo, o resultado final do ambiente será "". |
Como mapear a gravidade no conector
Para mapear a gravidade, especifique qual campo deve ser usado para receber o valor da gravidade no parâmetro "Nome do campo de gravidade". Na resposta, você pode receber três tipos de valores: números inteiros, números de ponto flutuante e strings. Para números inteiros e de ponto flutuante, não é preciso fazer nenhuma outra configuração. O conector vai ler esses valores e mapeá-los de acordo com os padrões do Google SecOps. Um breve lembrete de como os valores inteiros são mapeados:
- 100: crítica
- 100 > x >= 80 Alta
- 80 > x >=60 Médio
- 60 > x >=40 Baixa
- 40 > x Informativa
Se na resposta estivermos trabalhando com strings, será necessária uma configuração adicional. Na pasta em que os scripts do conector estão localizados, há um arquivo de configuração chamado severity_map_config.json
. Esse arquivo define regras de mapeamento para
a gravidade.
Inicialmente, o arquivo vai ficar assim:
{
"Default": 50
}
Imagine uma situação em que os valores necessários estão localizados no
event.severity
. event.severity
pode conter os seguintes valores: "Malicious", "Benign", "Unknown".
Primeiro, especifique no parâmetro "Nome do campo de gravidade" que vamos usar event.severity
.
Em segundo lugar, precisamos atualizar o arquivo de configuração.
Depois das mudanças, o arquivo severity_map_config.json
vai ficar assim:
{
"event.severity": {
"Malicious": 100,
"Unknown": 60,
"Benign": -1
},
"Default": 50
}
Agora, quando o conector receber um evento com event.severity
= "Malicious", ele vai atribuir gravidade crítica.
Regras do conector
Lista de permissões/lista de proibições
O conector não é compatível com listas de permissões/proibições.
Suporte a proxy
O conector é compatível com proxy.
Conector DSL do Elasticsearch
Descrição
O conector funciona fazendo uma chamada da API REST com uma consulta DSL.
Casos de uso e exemplos
Capacidade de usar consultas DSL como um parâmetro de pesquisa no Elasticsearch.
Parâmetros do conector
Use os seguintes parâmetros para configurar o conector:
Nome de exibição do parâmetro | Tipo | Valor padrão | É obrigatório | Descrição |
---|---|---|---|---|
Ambiente padrão | String | N/A | Não | Selecione o ambiente necessário. Por exemplo, "Cliente Um". |
Executar a cada | Número inteiro | 0:0:0:10 | Não | Selecione o período de tempo para executar a conexão. Por exemplo, "todos os dias". |
Nome do campo do produto | String | device_product | Sim | Descreve o nome do campo em que o nome do produto está armazenado. |
Nome do campo de ambiente | String | "" | Não | Descreve o nome do campo em que o nome do ambiente é armazenado. Se o campo de ambiente não for encontrado, o ambiente será "". |
Padrão de regex do ambiente | String | .* | Não | Um padrão de regex a ser executado no valor encontrado no campo "Nome do campo de ambiente". O padrão é ".*" para capturar tudo e retornar o valor sem alterações. Usado para permitir que o usuário manipule o campo de ambiente usando a lógica regex. Se o padrão de regex for nulo ou vazio, ou se o valor do ambiente for nulo, o resultado final do ambiente será "". |
Tempo limite do script (segundos) | Número inteiro | 60 | Sim | Limite de tempo limite para o processo Python que executa o script atual. |
Endereço do servidor | String | N/A | Sim | Endereço IP do servidor da API Elasticsearch. |
Porta | String | N/A | Sim | Porta do servidor da API do Elasticsearch. |
Consulta | String | N/A | Sim | Consulta da DSL usada para a pesquisa. É necessário um formato JSON válido. Para tornar o conector mais estável, recomendamos adicionar uma chave de carimbo de data/hora de classificação em ordem crescente. |
Índice | String | N/A | Sim | Índice usado para uma pesquisa. Por exemplo: _all |
Campo de carimbo de data/hora | String | N/A | Sim | O nome do campo em que o carimbo de data/hora está localizado. source@timestamp |
Nome do campo de alerta | String | N/A | Sim | O nome do campo em que o nome do alerta está localizado. _source_info_alertname |
Campo de descrição | String | N/A | Não | O nome do campo em que a descrição está localizada. _source_alert_info_description |
Gravidade | String | Médio | Sim | Gravidade dos alertas. Informações Baixo Médio Alta Crítico |
Limite de contagem de alertas | Número inteiro | 100 | Não | Limite o número de alertas retornados pelo conector por iteração. |
Autenticar | Caixa de seleção | Desmarcado | Não | Se é necessário autenticar em uma conexão. |
Nome de usuário | String | N/A | Não | Nome de usuário da conta do Elasticsearch. |
Senha | Senha | N/A | Não | Senha da conta do Elasticsearch. |
Usar SSL | Caixa de seleção | Desmarcado | Não | Opção para ativar a conexão SSL/TLS. |
Nome do campo de gravidade | String | N/A | Não | Se você quiser mapear a gravidade com base no valor da string, crie um arquivo de mapeamento. Consulte o portal de documentação para mais detalhes. |
Gravidade do alerta | String | N/A | Não | A gravidade dos alertas. Valores possíveis: Info, Low, Medium, High, Critical. Observação:esse parâmetro tem prioridade sobre "Nome do campo de gravidade". Se você quiser trabalhar com "Nome do campo de gravidade", deixe esse campo vazio. |
Endereço do servidor proxy | String | N/A | Não | O endereço do servidor proxy a ser usado. |
Nome de usuário do proxy | String | N/A | Não | O nome de usuário do proxy para autenticação. |
Senha do proxy | Senha | N/A | Não | A senha do proxy para autenticação. |
Notações aceitas
O conector é compatível com três notações. Por exemplo, se você quiser usar event.type no parâmetro "Nome do campo do evento". Nesse caso, você pode fornecer _source_event_type, event_type ou event.type. Todos esses valores vão se comportar da mesma forma.
Para parâmetros:
- Nome do campo do produto
- Nome do campo do evento
- Nome do campo de gravidade
- Campo "Ambiente"
- Campo de carimbo de data/hora
- Campo "Nome do alerta"
- Campo de descrição do alerta: apenas para conectores DSL
Como mapear a gravidade no conector
Para mapear a gravidade, especifique qual campo deve ser usado para receber o valor da gravidade no parâmetro "Nome do campo de gravidade". Na resposta, você pode receber três tipos de valores: números inteiros, números de ponto flutuante e strings. Para números inteiros e de ponto flutuante, não é preciso fazer nenhuma outra configuração. O conector vai ler esses valores e mapeá-los de acordo com os padrões do Google SecOps. Um breve lembrete de como os valores inteiros são mapeados:
- 100: crítica
- 100 > x >= 80 Alta
- 80 > x >=60 Médio
- 60 > x >=40 Baixa
- 40 > x Informativa
Se na resposta estivermos trabalhando com strings, será necessária uma configuração adicional. Na pasta em que os scripts do conector estão localizados, há um arquivo de configuração chamado severity_map_config.json
. Esse arquivo define regras de mapeamento para
a gravidade.
Inicialmente, o arquivo vai ficar assim:
{
"Default": 50
}
Imagine uma situação em que os valores necessários estão localizados no
event.severity
. event.severity
pode conter os seguintes valores: "Malicious", "Benign", "Unknown".
Primeiro, especifique no parâmetro "Nome do campo de gravidade" que vamos usar event.severity
.
Em segundo lugar, precisamos atualizar o arquivo de configuração.
Depois das mudanças, o arquivo severity_map_config.json
vai ficar assim:
{
"event.severity": {
"Malicious": 100,
"Unknown": 60,
"Benign": -1
},
"Default": 50
}
Agora, quando o conector receber um evento com event.severity
= "Malicious", ele vai atribuir gravidade crítica.
Regras do conector
Lista de permissões/lista de proibições
O conector não é compatível com listas de permissões/proibições.
Suporte a proxy
O conector é compatível com proxy.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.