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/
-
Abra o console do Athena em https://console.aws.amazon.com/athena/
. -
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á.
-
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
eBIGINT
são propriedades do log de acesso. É possível consultar essas propriedades no Athena. ParaLOCATION
, 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/
' -
No painel de navegação, em Database (Banco de dados), escolha o banco de dados.
-
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
ouGetObject
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.