Coletar registros do AWS Elastic MapReduce
Neste documento, explicamos como ingerir registros do AWS Elastic MapReduce (EMR) no Google Security Operations. O AWS EMR é uma plataforma de Big Data nativa da nuvem que processa grandes quantidades de dados rapidamente. Ao integrar os registros do EMR ao Google SecOps, você pode analisar a atividade do cluster e detectar possíveis ameaças à segurança.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps
- Acesso privilegiado à AWS
Configurar o bucket do Amazon S3
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket
- Salve o Nome e a Região do bucket para uso posterior.
- Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como o Caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso posterior.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise e selecione as políticas AmazonS3FullAccess e CloudWatchLogsFullAccess.
- Clique em Próxima.
- Clique em Adicionar permissões
Como configurar o AWS EMR para encaminhar registros
- Faça login no Console de Gerenciamento da AWS.
- Na barra de pesquisa, digite EMR e selecione Amazon EMR na lista de serviços.
- Clique em Clusters.
- Encontre e selecione o cluster do EMR em que você quer ativar o registro em registros.
- Clique em Editar na página Detalhes do cluster.
- Na tela Editar cluster, acesse a seção Logging.
- Selecione Ativar a geração de registros.
- Especifique o bucket do S3 em que os registros serão armazenados.
- Especifique o URI do S3 no formato
s3://your-bucket-name/
. Isso vai armazenar todos os registros do EMR na raiz do bucket. - Selecione os seguintes tipos de registro:
Step logs
Application logs
YARN logs
System logs
HDFS Logs
(se você estiver usando o Hadoop)
- Clique em Salvar.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds > Adicionar novo
- Central de conteúdo > Pacotes de conteúdo > Começar
Como configurar o feed do AWS EMR
- Clique no pacote Amazon Cloud Platform.
- Localize o tipo de registro AWS EMR.
Especifique os valores nos campos a seguir.
- Tipo de origem: Amazon SQS V2
- Nome da fila: o nome da fila do SQS de onde ler.
- URI do S3: o URI do bucket.
s3://your-log-bucket-name/
- Substitua
your-log-bucket-name
pelo nome real do seu bucket do S3.
- Substitua
Opções de exclusão de origem: selecione a opção de exclusão de acordo com suas preferências de ingestão.
Idade máxima do arquivo: inclui arquivos modificados no último número de dias. O padrão é de 180 dias.
ID da chave de acesso à fila do SQS: uma chave de acesso à conta que é uma string alfanumérica de 20 caracteres.
Chave de acesso secreta da fila do SQS: uma chave de acesso da conta que é uma string alfanumérica de 40 caracteres.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Clique em Criar feed.
Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
Tabela de mapeamento da UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
app_id |
additional.fields[].key |
O valor "APP" é atribuído pelo analisador. |
app_id |
additional.fields[].value.string_value |
Mapeado diretamente do campo APP no registro bruto. |
app_name |
additional.fields[].key |
O valor "APPNAME" é atribuído pelo analisador. |
app_name |
additional.fields[].value.string_value |
Mapeado diretamente do campo APPNAME no registro bruto. |
blockid |
additional.fields[].key |
O valor "blockid" é atribuído pelo analisador. |
blockid |
additional.fields[].value.string_value |
Mapeado diretamente do campo blockid no registro bruto. |
bytes |
network.received_bytes |
Mapeado diretamente do campo bytes no registro bruto e convertido em um número inteiro sem sinal. |
cliID |
additional.fields[].key |
O valor "cliID" é atribuído pelo analisador. |
cliID |
additional.fields[].value.string_value |
Mapeado diretamente do campo cliID no registro bruto. |
cmd |
target.process.command_line |
Mapeado diretamente do campo cmd no registro bruto. |
comp_name |
additional.fields[].key |
O valor "COMP" é atribuído pelo analisador. |
comp_name |
additional.fields[].value.string_value |
Mapeado diretamente do campo COMP no registro bruto. |
configuration_version |
additional.fields[].key |
O valor "configuration_version" é atribuído pelo analisador. |
configuration_version |
additional.fields[].value.string_value |
Mapeado diretamente do campo configuration_version no registro bruto e convertido em uma string. |
containerID |
additional.fields[].key |
O valor "containerID" é atribuído pelo analisador. |
containerID |
additional.fields[].value.string_value |
Mapeado diretamente do campo CONTAINERID no registro bruto. |
description |
security_result.description |
Mapeado diretamente do campo description no registro bruto. |
dfs.FSNamesystem.* |
additional.fields[].key |
A chave é gerada concatenando "dfs.FSNamesystem." com a chave dos dados JSON. |
dfs.FSNamesystem.* |
additional.fields[].value.string_value |
O valor é mapeado diretamente do valor correspondente no objeto JSON dfs.FSNamesystem e convertido em uma string. |
duration |
additional.fields[].key |
O valor "duration" é atribuído pelo analisador. |
duration |
additional.fields[].value.string_value |
Mapeado diretamente do campo duration no registro bruto. |
duration |
network.session_duration.seconds |
Mapeado diretamente do campo duration no registro bruto e convertido em um número inteiro. |
environment |
additional.fields[].key |
O valor "environment" é atribuído pelo analisador. |
environment |
additional.fields[].value.string_value |
Mapeado diretamente do campo environment no registro bruto. Extraído do campo ip_port usando grok e manipulação de strings. Extraído do campo ip_port usando grok e manipulação de strings, convertido em um número inteiro. |
event_type |
metadata.event_type |
Determinado pela lógica do analisador com base na presença de informações principal e target . Pode ser NETWORK_CONNECTION , USER_RESOURCE_ACCESS , STATUS_UPDATE ou GENERIC_EVENT . |
file_path |
target.file.full_path |
Mapeado diretamente do campo file_path no registro bruto. |
host |
principal.hostname |
Mapeado diretamente do campo host no registro bruto. |
host |
target.hostname |
Mapeado diretamente do campo host no registro bruto. |
host_ip |
principal.ip |
Mapeado diretamente do campo host_ip no registro bruto. |
host_port |
principal.port |
Mapeado diretamente do campo host_port no registro bruto e convertido em um número inteiro. |
http_url |
target.url |
Mapeado diretamente do campo http_url no registro bruto. |
index |
additional.fields[].key |
O valor "index" é atribuído pelo analisador. |
index |
additional.fields[].value.string_value |
Mapeado diretamente do campo index no registro bruto. |
kind |
metadata.product_event_type |
Mapeado diretamente do campo kind no registro bruto. O valor "AWS_EMR" é atribuído pelo analisador. O valor "AWS EMR" é atribuído pelo analisador. O valor "AMAZON" é atribuído pelo analisador. |
offset |
additional.fields[].key |
O valor "offset" é atribuído pelo analisador. |
offset |
additional.fields[].value.string_value |
Mapeado diretamente do campo offset no registro bruto. |
op |
metadata.product_event_type |
Mapeado diretamente do campo op ou OPERATION no registro bruto. |
proto |
network.application_protocol |
Extraído do campo http_url usando grok e convertido para letras maiúsculas. |
puppet_version |
additional.fields[].key |
O valor "puppet_version" é atribuído pelo analisador. |
puppet_version |
additional.fields[].value.string_value |
Mapeado diretamente do campo puppet_version no registro bruto. |
queue_name |
additional.fields[].key |
O valor "queue_name" é atribuído pelo analisador. |
queue_name |
additional.fields[].value.string_value |
Mapeado diretamente do campo queue_name no registro bruto. |
report_format |
additional.fields[].key |
O valor "report_format" é atribuído pelo analisador. |
report_format |
additional.fields[].value.string_value |
Mapeado diretamente do campo report_format no registro bruto e convertido em uma string. |
resource |
additional.fields[].key |
O valor "resource" é atribuído pelo analisador. |
resource |
additional.fields[].value.string_value |
Mapeado diretamente do campo resource no registro bruto. |
result |
security_result.action_details |
Mapeado diretamente do campo RESULT no registro bruto. |
security_id |
additional.fields[].key |
O valor "security_id" é atribuído pelo analisador. |
security_id |
additional.fields[].value.string_value |
Mapeado diretamente do campo security_id no registro bruto. |
severity |
security_result.severity |
Mapeado do campo severity no registro bruto. INFO é mapeado para INFORMATIONAL , e WARN é mapeado para MEDIUM . |
srvID |
additional.fields[].key |
O valor "srvID" é atribuído pelo analisador. |
srvID |
additional.fields[].value.string_value |
Mapeado diretamente do campo srvID no registro bruto. |
status |
additional.fields[].key |
O valor "status" é atribuído pelo analisador. |
status |
additional.fields[].value.string_value |
Mapeado diretamente do campo status no registro bruto. |
summary |
security_result.summary |
Mapeado diretamente do campo summary no registro bruto. |
target_app |
target.application |
Mapeado diretamente do campo TARGET no registro bruto. |
target_ip |
target.ip |
Mapeado diretamente do campo target_ip ou IP no registro bruto. |
target_port |
target.port |
Mapeado diretamente do campo target_port no registro bruto e convertido em um número inteiro. |
timestamp |
metadata.event_timestamp |
Mapeado diretamente do campo timestamp no registro bruto, analisado como um carimbo de data/hora ISO8601. |
timestamp |
event.timestamp |
Mapeado diretamente do campo timestamp no registro bruto, analisado como um carimbo de data/hora ISO8601. |
trade_date |
additional.fields[].key |
O valor "trade_date" é atribuído pelo analisador. |
trade_date |
additional.fields[].value.string_value |
Mapeado diretamente do campo trade_date no registro bruto. |
transaction_uuid |
additional.fields[].key |
O valor "transaction_uuid" é atribuído pelo analisador. |
transaction_uuid |
additional.fields[].value.string_value |
Mapeado diretamente do campo transaction_uuid no registro bruto. |
type |
additional.fields[].key |
O valor "type" é atribuído pelo analisador. |
type |
additional.fields[].value.string_value |
Mapeado diretamente do campo type no registro bruto. |
user |
target.user.userid |
Mapeado diretamente do campo USER ou ugi no registro bruto. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.