Coletar registros de hosts do AWS EC2

Compatível com:

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

  1. Crie um bucket do Amazon S3 seguindo este guia do usuário: Criar um bucket.
  2. Salve o Nome e a Região do bucket para uso futuro.
  3. Crie um usuário seguindo este guia: Como criar um usuário do IAM.
  4. Selecione o Usuário criado.
  5. Selecione a guia Credenciais de segurança.
  6. Clique em Criar chave de acesso na seção Chaves de acesso.
  7. Selecione Serviço de terceiros como o caso de uso.
  8. Clique em Próxima.
  9. Opcional: adicione uma tag de descrição.
  10. Clique em Criar chave de acesso.
  11. Clique em Fazer o download do arquivo CSV para salvar a chave de acesso e a chave de acesso secreta para uso futuro.
  12. Clique em Concluído.
  13. Selecione a guia Permissões.
  14. Clique em Adicionar permissões na seção Políticas de permissões.
  15. Selecione Adicionar permissões.
  16. Selecione Anexar políticas diretamente.
  17. Pesquise e selecione a política AmazonS3FullAccess.
  18. Clique em Próxima.
  19. Clique em Adicionar permissões

Configurar o CloudTrail para o AWS KMS

  1. Faça login no Console de Gerenciamento da AWS.
  2. Na barra de pesquisa, digite e selecione CloudTrail na lista de serviços.
  3. Clique em Criar trilha.
  4. Informe o nome do percurso, por exemplo, EC2-Activity-Trail.
  5. Marque a caixa de seleção Ativar para todas as contas na minha organização.
  6. 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.
  7. Se o SSE-KMS estiver ativado, forneça um nome para o alias do AWS KMS ou escolha uma chave do AWS KMS.
  8. Deixe as outras configurações como padrão.
  9. Clique em Próxima.
  10. Selecione Eventos de gerenciamento e Eventos de dados em Tipos de evento para capturar a atividade do host do EC2.
  11. Clique em Próxima.
  12. Revise as configurações em Revisar e criar.
  13. Clique em Criar trilha.
  14. 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

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo.
  3. No campo Nome do feed, insira um nome para o feed, por exemplo, AWS EC2 Hosts Logs.
  4. Selecione Amazon S3 como o Tipo de origem.
  5. Selecione AWS EC2 Hosts como o Tipo de registro.
  6. Clique em Próxima.
  7. 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.
    • 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.

  8. Clique em Próxima.

  9. 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.