Usar logs de acesso ao servidor do Amazon S3 para identificar solicitações
Você pode identificar solicitações do Amazon S3 usando os logs de acesso ao servidor do Amazon S3.
nota
-
Para identificar as solicitações do Amazon S3, recomendamos que você use eventos de dados do AWS CloudTrail em vez de logs de acesso ao servidor do Amazon S3. Os eventos de dados do CloudTrail são mais fáceis de configurar e contêm mais informações. Para obter mais informações, consulte Identificar solicitações do Amazon S3 usando o CloudTrail.
-
Dependendo de quantas solicitações de acesso você receber, a análise dos logs poderá exigir mais recursos ou tempo do que o uso dos eventos de dados do CloudTrail.
Tópicos
Consultar logs de acesso para solicitações usando o Amazon Athena
Você pode identificar solicitações do Amazon S3 com logs de acesso do Amazon S3 usando o Amazon Athena.
O Amazon S3 armazena logs de acesso ao servidor como objetos em um bucket do S3. Muitas vezes, é mais fácil usar uma ferramenta que possa analisar os logs no Amazon S3. O Athena oferece suporte à análise de objetos do S3 e pode ser usado para consultar logs de acesso do Amazon S3.
exemplo
O exemplo a seguir mostra como você pode consultar os logs de acesso ao servidor do Amazon S3 no Amazon Athena. Substitua os
utilizados nos exemplos a seguir por suas próprias informações.user input placeholders
nota
Para especificar um local do Amazon S3 em uma consulta do Athena, é necessário fornecer um URI do S3 para o bucket ao qual os logs são entregues. Esse URI deve incluir o nome e o prefixo do bucket no seguinte formato: 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. Substitua
pelo nome que você deseja atribuir ao banco de dados.s3_access_logs_db
CREATE DATABASE
s3_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 Query Editor, execute um comando semelhante ao seguinte para criar um esquema de tabela no banco de dados criado na etapa 2. Substitua
pelo nome que você deseja atribuir à tabela. Os valores dos tipo de dadoss3_access_logs_db.mybucket_logs
STRING
eBIGINT
são propriedades do log de acesso. É possível consultar essas propriedades no Athena. ParaLOCATION
, insira o bucket do S3 e o caminho do prefixo conforme indicado anteriormente.CREATE EXTERNAL TABLE `
s3_access_logs_db.mybucket_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, `accesspointarn` STRING, `aclrequired` 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 Amazon S3.
exemplo : Mostre quem excluiu um objeto e quando (timestamp, endereço IP e usuário IAM)
SELECT requestdatetime, remoteip, requester, key FROM
s3_access_logs_db.mybucket_logs
WHERE key = 'images/picture.jpg
' AND operation like '%DELETE%';
exemplo : Mostre todas as operações que foram realizadas por um usuário do IAM
SELECT * FROM
s3_access_logs_db.mybucket_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
SELECT * FROM
s3_access_logs_db.mybucket_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 determinado período
SELECT coalesce(SUM(bytessent), 0) AS bytessenttotal FROM
s3_access_logs_db.mybucket_logs
WHERE remoteip='192.0.2.1' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2022-06-01
','yyyy-MM-dd') AND parse_datetime('2022-07-01
','yyyy-MM-dd');
nota
Para reduzir o tempo de retenção dos logs, você pode criar uma configuração da funcionalidade Ciclo de Vida do S3 para o bucket de logs de acesso ao servidor. Crie regras de configuração de ciclo de vida para remover os arquivos de log periodicamente. Fazer isso reduz a quantidade de dados que o Athena analisa para cada consulta. Para obter mais informações, consulte Definir uma configuração de ciclo de vida em um bucket.
Identificar solicitações do Signature Version 2 usando logs de acesso do Amazon S3
O suporte do Amazon S3 para o Signature versão 2 será desativado (defasado). Depois disso, o Amazon S3 não aceitará mais solicitações que usam o Signature versão 2 e todas as solicitações deverão usar assinaturas do Signature versão 4. É possível identificar solicitações de acesso do Signature Version 2 usando os logs de acesso do Amazon S3.
nota
Para identificar as solicitações do Signature Version 2, recomendamos que você use eventos de dados do AWS CloudTrail em vez de logs de acesso ao servidor do Amazon S3. Os eventos de dados do CloudTrail são mais fáceis de configurar e contêm mais informações do que os logs de acesso ao servidor. Para obter mais informações, consulte Identificar solicitações de Signature Version 2 do Amazon S3 usando o CloudTrail.
exemplo : mostrar todos os solicitantes que estão enviando tráfego do Signature versão 2
SELECT requester, sigv, Count(sigv) as sigcount FROM
s3_access_logs_db.mybucket_logs
GROUP BY requester, sigv;
Identificar solicitações de acesso a objetos usando logs de acesso do Amazon S3
É possível usar consultas em logs de acesso ao servidor do Amazon S3 para identificar solicitações de acesso a objetos do Amazon S3, para operações como GET
, PUT
e DELETE
, e descobrir mais informações sobre essas solicitações.
O exemplo de consulta do Amazon Athena a seguir mostra como obter todas as solicitações PUT
de objetos para o Amazon S3 de um log de acesso ao servidor.
exemplo : Mostrar todos os solicitantes que estão enviando solicitações PUT
de objetos em determinado período
SELECT bucket_name, 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 GET
de objetos para o Amazon S3 do log de acesso ao servidor.
exemplo : Mostrar todos os solicitantes que estão enviando solicitações GET
de objetos em determinado período
SELECT bucket_name, 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 determinado período
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime FROM
s3_access_logs_db.mybucket_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')
A consulta do Amazon Athena a seguir mostra como identificar todas as solicitações feitas aos seus buckets do S3 que exigiram uma lista de controle de acesso (ACL) para autorização. Você pode usar essas informações para migrar essas permissões de ACL para as políticas de bucket apropriadas e desativar as ACLs. Depois de criar essas políticas de bucket, você pode desativar as ACLs para esses buckets. Para obter mais informações sobre como desativar as ACLs, consulte Pré-requisitos para desabilitar ACLs.
exemplo : Identifique todas as solicitações que exigiram uma ACL para autorização
SELECT bucket_name, requester, key, operation, aclrequired, requestdatetime FROM
s3_access_logs_db
WHERE aclrequired = 'Yes' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2022-05-10:00:00:00
','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2022-08-10:00:00:00'
,'yyyy-MM-dd:HH:mm:ss')
nota
-
É possível modificar o intervalo de datas conforme necessário 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 ou endereços IP inesperados ou não autorizados e identificar solicitações anônimas aos seus buckets. -
Essa consulta recupera somente informações do momento no qual o registro estava habilitado.
-
Se você estiver usando logs do AWS CloudTrail, consulte Identificar o acesso a objetos do S3 usando o CloudTrail.