Usar logs de acesso ao servidor do Amazon S3 para identificar solicitações - Amazon Simple Storage Service

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

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 user input placeholders utilizados nos exemplos a seguir por suas próprias informações.

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://DOC-EXAMPLE-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. Substitua s3_access_logs_db pelo nome que você deseja atribuir ao banco de dados.

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

  3. No Query Editor, execute um comando semelhante ao seguinte para criar um esquema de tabela no banco de dados criado na etapa 2. Substitua s3_access_logs_db.mybucket_logs pelo nome que você deseja atribuir à tabela. 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 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://DOC-EXAMPLE-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 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 ter mais informações, consulte Definir a configuração do 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 ter 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 ou GetObject 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.