Analisar os logs de acesso ao bucket com o Amazon Athena no Lightsail - Amazon Lightsail

Analisar os logs de acesso ao bucket com o Amazon Athena no Lightsail

Neste guia, mostraremos como identificar solicitações para um bucket usando logs de acesso. Para obter mais informações, consulte Bucket access logs.

Índice

Consultar logs de acesso para solicitações usando o Amazon Athena

Você pode usar o Amazon Athena para consultar e identificar solicitações para um bucket em logs de acesso.

O Lightsail armazena logs de acesso como objetos em um bucket do Lightsail. Muitas vezes, é mais fácil usar uma ferramenta capaz de analisar os logs. O Athena suporta a análise de objetos e pode ser usado para consultar logs de acesso.

Exemplo

O exemplo a seguir mostra como você pode consultar os logs de acesso do servidor do bucket no Amazon Athena.

nota

Para especificar uma localização do bucket em uma consulta do Athena, é necessário formatar o nome do bucket de destino e o prefixo de destino onde os logs são entregues como um URI do S3, da seguinte forma: s3://amzn-s3-demo-bucket1-logs/prefix/

  1. Abra o console do Athena em https://console.aws.amazon.com/athena/.

  2. No Editor de consultas, execute um comando semelhante ao seguinte.

    create database bucket_access_logs_db
    nota

    É uma prática recomendada criar o banco de dados na mesma Região da AWS em que o bucket do S3 está.

  3. No Editor de consultas, execute um comando semelhante ao seguinte para criar um esquema de tabela no banco de dados criado na etapa 2. Os valores dos tipo de dados STRING e BIGINT são propriedades do log de acesso. É possível consultar essas propriedades no Athena. Para LOCATION, insira o bucket e o caminho do prefixo conforme indicado anteriormente.

    CREATE EXTERNAL TABLE `s3_access_logs_db.amzn-s3-demo-bucket_logs`( `bucketowner` STRING, `bucket_name` STRING, `requestdatetime` STRING, `remoteip` STRING, `requester` STRING, `requestid` STRING, `operation` STRING, `key` STRING, `request_uri` STRING, `httpstatus` STRING, `errorcode` STRING, `bytessent` BIGINT, `objectsize` BIGINT, `totaltime` STRING, `turnaroundtime` STRING, `referrer` STRING, `useragent` STRING, `versionid` STRING, `hostid` STRING, `sigv` STRING, `ciphersuite` STRING, `authtype` STRING, `endpoint` STRING, `tlsversion` STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket1-logs/prefix/'
  4. No painel de navegação, em Database (Banco de dados), escolha o banco de dados.

  5. Em Tables (Tabelas), selecione Preview table (Visualizar tabela) ao lado do nome da tabela.

    No painel Results (Resultados), você deve ver dados dos logs de acesso ao servidor, como bucketowner, bucket, requestdatetime e assim por diante. Isso significa que você criou a tabela do Athena com êxito. Agora você pode consultar os logs de acesso ao servidor do bucket.

Exemplo – Mostrar quem excluiu um objeto e quando (carimbo de data/hora, endereço IP e usuário do IAM)

SELECT RequestDateTime, RemoteIP, Requester, Key FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';

Exemplo – Mostrar todas as operações que foram realizadas por um usuário do IAM

SELECT * FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE requester='arn:aws:iam::123456789123:user/user_name';

Exemplo – Mostrar todas as operações que foram realizadas em um objeto em um determinado período de tempo

SELECT * FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE Key='prefix/images/picture.jpg' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-02-18:07:00:00','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2017-02-18:08:00:00','yyyy-MM-dd:HH:mm:ss');

Exemplo – Mostrar a quantidade de dados transferidos por um endereço IP específico em um determinado período de tempo

SELECT SUM(bytessent) AS uploadTotal, SUM(objectsize) AS downloadTotal, SUM(bytessent + objectsize) AS Total FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE RemoteIP='1.2.3.4' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-06-01','yyyy-MM-dd') AND parse_datetime('2017-07-01','yyyy-MM-dd');

Identificar solicitações de acesso ao objeto usando logs de acesso do Amazon S3

É possível usar consultas em logs de acesso para identificar solicitações de acesso ao objeto para operações como GET, PUT e DELETE, e descobrir mais informações sobre essas solicitações.

O seguinte exemplo de consulta do Amazon Athena mostra como obter todas as solicitações de objeto PUT para um bucket com base no log de acesso ao servidor.

Exemplo – Mostrar todos os solicitantes que estão enviando solicitações de objeto PUT em um determinado período

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db WHERE Operation='REST.PUT.OBJECT' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

O exemplo de consulta do Amazon Athena a seguir mostra como obter todas as solicitações de objeto GET para o Amazon S3 a partir do log de acesso ao servidor.

Exemplo – Mostrar todos os solicitantes que estão enviando solicitações de objeto GET em um determinado período

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db WHERE Operation='REST.GET.OBJECT' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

O exemplo de consulta do Amazon Athena a seguir mostra como obter todas as solicitações anônimas ao seu bucket do S3 do log de acesso ao servidor.

Exemplo – Mostrar todos os solicitantes anônimos que estão fazendo solicitações a um bucket em um determinado período

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE Requester IS NULL AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')
nota
  • É possível modificar o intervalo de datas para atender às suas necessidades.

  • Esses exemplos de consulta também podem ser úteis para o monitoramento de segurança. Você pode ver os resultados de chamadas PutObject ou GetObject de solicitantes/endereços IP inesperados ou não autorizados e identificar solicitações anônimas ao seu bucket.

  • Essa consulta recupera somente informações do momento no qual o registro estava habilitado.