Coletar registros de hosts do AWS EC2
Este documento explica como integrar os logs de hosts do AWS EC2 ao Google Security Operations para monitoramento e análise. A integração envolve analisar e mapear os logs do host do EC2 para o modelo de dados unificado (UDM, na sigla em inglês), realizar a transformação de dados e criar relações entre hosts e instâncias do EC2. Os registros fornecem informações valiosas sobre as instâncias, as propriedades do host, os tipos de instância e as métricas de desempenho que podem ser usadas para monitoramento de segurança, auditoria e compliance.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você tem acesso privilegiado à AWS.
Configurar o AWS IAM e o S3
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Criar um bucket.
- Salve o Nome e a Região do bucket para uso futuro.
- 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 futuro.
- 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 a política AmazonS3FullAccess.
- Clique em Próxima.
- Clique em Adicionar permissões
Configurar o CloudTrail para o AWS KMS
- Faça login no Console de Gerenciamento da AWS.
- Na barra de pesquisa, digite e selecione CloudTrail na lista de serviços.
- Clique em Criar trilha.
- Informe o nome do percurso, por exemplo,
EC2-Activity-Trail
. - Marque a caixa de seleção Ativar para todas as contas na minha organização.
- Digite o URI do bucket do S3 criado anteriormente (o formato deve ser
s3://your-log-bucket-name/
) ou crie um novo bucket do S3. - Se o SSE-KMS estiver ativado, forneça um nome para o alias do AWS KMS ou escolha uma chave do AWS KMS.
- Deixe as outras configurações como padrão.
- Clique em Próxima.
- Selecione Eventos de gerenciamento e Eventos de dados em Tipos de evento para capturar a atividade do host do EC2.
- Clique em Próxima.
- Revise as configurações em Revisar e criar.
- Clique em Criar trilha.
- Opcional: se você criou um bucket, siga este processo:
- Acesse S3.
- Identifique e selecione o bucket de registros recém-criado.
- Selecione a pasta AWSLogs.
- Clique em Copiar URI do S3 e salve.
Configurar um feed no Google SecOps para processar hosts do EC2 da AWS
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed, por exemplo, AWS EC2 Hosts Logs.
- Selecione Amazon S3 como o Tipo de origem.
- Selecione AWS EC2 Hosts como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
- Região: a região em que o bucket do Amazon S3 está localizado.
- URI do S3: o URI do bucket.
s3://your-log-bucket-name/
- Substitua
your-log-bucket-name
pelo nome real do bucket.
- Substitua
- O URI é: selecione Diretório ou Diretório que inclui subdiretórios.
Opções de exclusão de origem: selecione a opção de exclusão de acordo com sua preferência.
ID da chave de acesso: a chave de acesso do usuário com acesso ao bucket do S3.
Chave de acesso secreta: a chave secreta do usuário com acesso ao bucket do S3.
Namespace do recurso: o namespace do recurso.
Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
Clique em Próxima.
Revise a configuração do novo feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
AllocationTime |
entity.metadata.creation_timestamp |
O campo AllocationTime é analisado como um carimbo de data/hora e mapeado para o campo creation_timestamp . O analisador tenta vários formatos (aaaa-MM-dd HH:mm:ss, RFC 3339, UNIX, ISO8601). |
AllowsMultipleInstanceTypes |
entity.entity.asset.attribute.labels.value |
O valor de AllowsMultipleInstanceTypes do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como allows_multiple_instance_types . |
AutoPlacement |
entity.entity.asset.attribute.labels.value |
O valor de AutoPlacement do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como auto_placement . |
AvailabilityZone |
entity.entity.asset.attribute.cloud.availability_zone |
O campo AvailabilityZone é mapeado diretamente para o campo availability_zone . |
AvailabilityZoneID |
entity.entity.asset.attribute.labels.value |
O valor de AvailabilityZoneID do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como availability_zone_id . |
AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity |
entity.entity.asset.attribute.labels.value |
O valor de AvailableCapacity.AvailableInstanceCapacity.AvailableCapacity (ou AvailableCapacity.Instance.Available após a renomeação) é convertido em uma string e usado como o valor de um rótulo. A chave está definida como available_instance_capacity_available_capacity . |
AvailableCapacity.AvailableInstanceCapacity.InstanceType |
entity.entity.asset.attribute.labels.value |
O valor de AvailableCapacity.AvailableInstanceCapacity.InstanceType (ou AvailableCapacity.Instance.Type após a renomeação) é usado como o valor de um rótulo. A chave está definida como available_instance_capacity_instance_type . |
AvailableCapacity.AvailableInstanceCapacity.TotalCapacity |
entity.entity.asset.attribute.labels.value |
O valor de AvailableCapacity.AvailableInstanceCapacity.TotalCapacity (ou AvailableCapacity.Instance.Total após a renomeação) é convertido em uma string e usado como o valor de um rótulo. A chave está definida como total_capacity . |
AvailableCapacity.AvailableVCpus |
entity.entity.asset.attribute.labels.value |
O valor de AvailableCapacity.AvailableVCpus (ou AvailableCapacity.VCPUs após a renomeação) é convertido em uma string e usado como o valor de um rótulo. A chave está definida como available_v_cpus . |
ClientToken |
entity.entity.asset.attribute.labels.value |
O valor de ClientToken do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como client_token . |
HostID |
entity.metadata.product_entity_id |
O campo HostID (ou ID após a renomeação) é mapeado diretamente para o campo product_entity_id . |
HostID |
entity.entity.asset.asset_id |
O campo HostID (ou ID após a renomeação) é mapeado diretamente para o campo asset_id . |
HostMaintenance |
entity.entity.asset.attribute.labels.value |
O valor de HostMaintenance (ou Maintenance após a renomeação) do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como host_maintenance . |
HostProperties.Cores |
entity.entity.asset.hardware.cpu_number_cores |
O valor de HostProperties.Cores é convertido em um número inteiro sem sinal e mapeado para cpu_number_cores . |
HostProperties.InstanceFamily |
entity.entity.asset.attribute.labels.value |
O valor de HostProperties.InstanceFamily do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como host_properties_instance_family . |
HostProperties.InstanceType |
entity.entity.asset.attribute.labels.value |
O valor de HostProperties.InstanceType do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como host_properties_instance_type . |
HostProperties.Sockets |
entity.entity.asset.attribute.labels.value |
O valor de HostProperties.Sockets é convertido em uma string e usado como o valor de um rótulo. A chave está definida como host_properties_sockets . |
HostProperties.TotalVCpus |
entity.entity.asset.attribute.labels.value |
O valor de HostProperties.TotalVCpus (ou HostProperties.TotalVCPUs após a renomeação) é convertido em uma string e usado como o valor de um rótulo. A chave está definida como host_properties_total_v_cpus . |
HostRecovery |
entity.entity.asset.attribute.labels.value |
O valor de HostRecovery (ou Recovery após a renomeação) do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como host_recovery . |
HostReservationID |
entity.entity.asset.attribute.labels.value |
O valor de HostReservationID (ou ReservationID após a renomeação) do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como host_reservation_id . |
MemberOfServiceLinkedResourceGroup |
entity.entity.asset.attribute.labels.value |
O valor de MemberOfServiceLinkedResourceGroup é convertido em uma string e usado como o valor de um rótulo. A chave está definida como member_of_service_linked_resource_group . |
OwnerID |
entity.entity.asset.attribute.labels.value |
O valor de OwnerID do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como owner_id . |
ReleaseTime |
entity.entity.asset.attribute.labels.value |
O valor de ReleaseTime do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como release_time . |
State |
entity.entity.asset.attribute.labels.value |
O valor de State do registro bruto é usado como o valor de um rótulo. A chave desse rótulo é definida como state . |
TagSet |
entity.entity.asset.attribute.labels |
A matriz TagSet é iterada, e o Key e o Value de cada tag são usados como a chave e o valor de um identificador, respectivamente. O valor AMAZON_WEB_SERVICES é atribuído a esse campo pelo analisador. O collection_time do registro bruto é mapeado para o campo collected_timestamp . O valor ASSET é atribuído a esse campo pelo analisador. O valor AWS EC2 HOSTS é atribuído a esse campo pelo analisador. O valor AWS é atribuído a esse campo pelo analisador. As relações são derivadas dos campos Instances e OutpostArn , mas esses campos não são mapeados diretamente para o objeto IDM. A lógica do analisador cria objetos de relação com base nesses campos e os mescla na matriz relations . |
collection_time |
entity.metadata.collected_timestamp |
O collection_time do registro é usado como o collected_timestamp do evento. |
Alterações
2024-01-31
- Adição de suporte ao novo esquema.
2023-12-14
- Parser recém-criado.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.