Engenharia

Obter logs do AWS S3 usando o Filebeat e o Elastic Stack

Os logs de vários serviços diferentes da AWS podem ser armazenados em buckets do S3, como logs de acesso ao servidor do S3, logs de acesso do ELB, logs do CloudWatch e logs de fluxo do VPC. Os logs de acesso ao servidor do S3, por exemplo, fornecem registros detalhados das solicitações feitas em um bucket. Essas são informações muito úteis, mas, infelizmente, a AWS cria vários arquivos .txt para várias operações, tornando difícil ver exatamente quais operações são registradas nos arquivos de log sem abrir cada arquivo .txt separadamente. Além disso, os logs de acesso ao servidor do S3 são gravados em um formato complexo e, para os usuários, fica muito difícil abrir o arquivo .txt e encontrar as informações necessárias.

Felizmente, todos os seus logs da AWS podem ser facilmente indexados, analisados e visualizados com o Elastic Stack, permitindo que você utilize todos os importantes dados contidos neles. Neste post do blog, veremos como isso é fácil.

Introdução

No Filebeat 7.4, a entrada s3 se tornou uma opção para os usuários, permitindo que eles recuperem eventos de arquivos em um bucket do S3, com cada linha de cada arquivo se tornando um evento separado. Juntamente com a entrada s3, também incluímos dois novos conjuntos de arquivos para o módulo da AWS do Filebeat: o conjunto de arquivos s3access e o conjunto de arquivos elb (novo na versão 7.5). Com eles, os usuários podem coletar logs de diferentes buckets do S3 e, em seguida, visualizá-los e analisá-los em um local centralizado sem precisar baixar ou abrir manualmente cada arquivo.

Para evitar uma demora significativa na sondagem de todos os arquivos de log de cada bucket do S3, decidimos combinar a notificação e a sondagem: use o Amazon Simple Queue Service (SQS) para notificação do Amazon S3 quando um novo objeto do S3 for criado. A entrada s3 do Filebeat verifica se há novas mensagens no SQS relacionadas ao novo objeto criado no S3 e usa as informações dessas mensagens para recuperar logs dos buckets do S3. Com essa configuração, não é necessário fazer uma sondagem periódica de cada bucket do S3. Em vez disso, a entrada s3 do Filebeat garante a coleta de dados dos buckets do S3 quase em tempo real, com velocidade e confiabilidade.

Configuração de notificações de eventos do S3 usando o SQS

Seguindo estas quatro etapas, os usuários podem adicionar uma configuração de notificação em um bucket, solicitando que o AWS S3 publique eventos do tipo s3:ObjectCreated:* em uma fila do AWS SQS. Para obter mais detalhes, consulte Walkthrough: Configure a bucket for notifications (Passo a passo: configurar um bucket para notificações).

Etapa 1: criar uma fila do SQS e um bucket do S3

Crie uma fila do SQS e um bucket do S3 na mesma região da AWS usando o console do Amazon SQS.

Etapa 2: configurar uma fila do SQS

Substitua a política de acesso anexada à fila pela seguinte política da fila:

{
 "Version": "2012-10-17",
 "Id": "example-ID",
 "Statement": [
  {
   "Sid": "example-statement-ID",
   "Effect": "Allow",
   "Principal": {
    "AWS":"*"  
   },
   "Action": [
    "SQS:SendMessage"
   ],
   "Resource": "",
   "Condition": {
      "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:" }
   }
  }
 ]
}

Altere e para corresponderem ao seu ARN da fila do SQS e ao nome do bucket do S3.

Etapa 3: configurar o bucket do S3

Usando o console do Amazon S3, adicione uma configuração de notificação solicitando que o Amazon S3 publique eventos do tipo s3:ObjectCreated:* na sua fila do Amazon SQS.

Configuração do bucket do S3

Etapa 4: testar a configuração do S3-SQS

Carregue um objeto no bucket do S3 e verifique a notificação do evento no console do Amazon SQS.

Uso da entrada s3 do Filebeat

Ao habilitar o Filebeat com entrada s3, os usuários poderão coletar logs de buckets do AWS S3. Cada linha em cada arquivo de log se tornará um evento separado e será armazenada na saída do Filebeat configurada, como o Elasticsearch. Usando apenas a entrada s3, as mensagens de log serão armazenadas no campo message em cada evento, sem análise.

Durante o processamento de um objeto do S3 referenciado por uma mensagem do SQS, se metade do tempo limite de visibilidade configurado se passar e o processamento ainda estiver em andamento, o tempo limite de visibilidade dessa mensagem do SQS será redefinido para garantir que a mensagem não volte para a fila no meio do processamento. Se ocorrerem erros durante o processamento do objeto do S3, o processo será interrompido, e a mensagem do SQS retornará à fila.

Etapa 0: criar uma política de IAM

Uma política de IAM é uma entidade que define as permissões para um objeto dentro do seu ambiente da AWS. É necessário criar uma política de IAM customizada para o Filebeat com permissões específicas. Veja mais detalhes em Criação de políticas de IAM. Esta é uma lista das permissões necessárias para acessar o SQS e o S3:
  • s3:GetObject 
  • sqs:ReceiveMessage 
  • sqs:ChangeMessageVisibility 
  • sqs:DeleteMessage

Etapa 1: instalar o Filebeat

Para baixar e instalar o Filebeat, existem comandos diferentes que funcionam para sistemas diferentes. Por exemplo, com Mac:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.5.1-darwin-x86_64.tar.gz

Para obter mais detalhes, consulte Install Filebeat (Instalar o Filebeat).

Etapa 2: configurar a entrada s3

Aqui está um exemplo de habilitação da entrada s3 no arquivo filebeat.yml:

filebeat.inputs:
- type: s3
  queue_url: https://sqs.us-east-1.amazonaws.com/1234/test-fb-ks
  visibility_timeout: 300s
  credential_profile_name: elastic-beats

Com essa configuração, o Filebeat irá para a fila test-fb-ks do AWS SQS para ler as mensagens de notificação. Das mensagens, o Filebeat obterá informações sobre objetos do S3 específicos e as usará para ler os objetos linha por linha. visibility_timeout é o tempo (em segundos) durante o qual as mensagens recebidas serão ocultadas das solicitações de recuperação subsequentes após serem recuperadas por uma solicitação ReceiveMessage. Por padrão, o visibility_timeout é de 300 segundos. O mínimo é 0 segundos e o máximo é 12 horas. Para fazer chamadas à API da AWS, a entrada s3 requer credenciais da AWS em sua configuração. No exemplo acima, o nome do perfil elastic-beats é fornecido para fazer chamadas à API da AWS. Para obter mais detalhes, consulte AWS Credentials Configuration (Configuração de credenciais da AWS).

Etapa 3: iniciar o Filebeat

Para Mac e Linux:

sudo chown root filebeat.yml
sudo ./filebeat -e

Para obter mais detalhes, consulte Start Filebeat (Iniciar o Filebeat).

Coletar logs de acesso ao servidor do S3 usando o conjunto de arquivos s3access

No Filebeat 7.4, o conjunto de arquivos s3access foi adicionado para coletar logs de acesso ao servidor do S3 usando a entrada s3. Os logs de acesso ao servidor fornecem registros detalhados das solicitações feitas em um bucket, o que pode ser muito útil em auditorias de segurança e acesso. Por padrão, o logging de acesso ao servidor fica desabilitado. Para rastrear solicitações de acesso ao seu bucket, você pode habilitá-lo. Cada registro do log de acesso fornece detalhes sobre uma única solicitação de acesso, como o solicitante, o nome do bucket, a hora da solicitação, a ação da solicitação, o status da resposta e um código de erro, se relevante.

Etapa 1: habilitar o logging de acesso ao servidor

Em Properties (Propriedades) de um bucket do S3 específico, você pode habilitar o logging de acesso ao servidor selecionando Enable logging (Habilitar logging):

Enable logging (Habilitar logging)

Etapa 2: habilitar o módulo aws no Filebeat

Em uma configuração padrão do Filebeat, o módulo aws não fica habilitado. O seguinte comando habilita a configuração do módulo aws no diretório modules.d em sistemas MacOS e Linux:

sudo ./filebeat modules enable aws

Etapa 3: configurar o módulo aws

Por padrão, o conjunto de arquivos s3access fica desabilitado. Para habilitar o conjunto de arquivos s3access, consulte o arquivo aws.yml abaixo:

- module: aws
  s3access:
    enabled: true
    var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    var.credential_profile_name: fb-aws

Etapa 4: iniciar o Filebeat

Para Mac e Linux:

sudo chown root filebeat.yml
sudo ./filebeat -e

Para obter mais detalhes, consulte Start Filebeat (Iniciar o Filebeat).

Etapa 5: usar o dashboard do conjunto de arquivos s3access do Kibana

O conjunto de arquivos s3access inclui um dashboard predefinido, chamado [Filebeat AWS] S3 Server Access Log Overview (Visão geral do log de acesso ao servidor do [AWS] S3 [do Filebeat]). Ao executar o comando de configuração quando iniciar o Filebeat, você automaticamente configurará esses dashboards no Kibana.

Para Mac e Linux:

./filebeat setup --dashboards

Para obter mais informações sobre isso, consulte a documentação Set up the Kibana dashboards (Configurar os dashboards do Kibana).

Esse dashboard é uma visão geral dos logs de acesso ao servidor do AWS S3. Ele mostra as principais URLs com seu código de resposta, status do HTTP ao longo do tempo e todos os logs de erros.

Dashboard de logs de acesso ao servidor do AWS S3

O que vem a seguir

Com a entrada s3 do Filebeat, os usuários podem coletar facilmente logs dos serviços da AWS e enviá-los como eventos para o nosso Elasticsearch Service no Elastic Cloud ou para um cluster em execução fora da distribuição padrão. Para a versão 7.4, o conjunto de arquivos s3access está disponível para os usuários coletarem e analisarem os logs de acesso ao servidor do S3. Para a versão 7.5, o conjunto de arquivos elb está disponível para os usuários coletarem logs do balanceador de carga clássico, do balanceador de carga de aplicação e do balanceador de carga de rede. Em um futuro próximo, começaremos a adicionar mais conjuntos de arquivos para oferecer suporte a outros logs comumente usados, como os logs de fluxo do VPC, os logs do CloudWatch e os logs do Cloudtrail. Se tiver alguma dúvida ou feedback, fique à vontade para publicar no Beats Discuss forum (fórum de discussão dos Beats).