

# Identificar solicitações do Amazon S3 usando o CloudTrail
<a name="cloudtrail-request-identification"></a>

No Amazon S3, você pode identificar solicitações usando um log de eventos do AWS CloudTrail. O AWS CloudTrail é a maneira preferida de identificar solicitações do Amazon S3, mas se você estiver usando logs de acesso ao servidor do Amazon S3, consulte [Usar logs de acesso ao servidor do Amazon S3 para identificar solicitações](using-s3-access-logs-to-identify-requests.md).

**Topics**
+ [Identificar solicitações feitas ao Amazon S3 em um log do CloudTrail](#identify-S3-requests-using-in-CTlog)
+ [Identificar solicitações de Signature Version 2 do Amazon S3 usando o CloudTrail](#cloudtrail-identification-sigv2-requests)
+ [Identificar o acesso a objetos do S3 usando o CloudTrail](#cloudtrail-identification-object-access)

## Identificar solicitações feitas ao Amazon S3 em um log do CloudTrail
<a name="identify-S3-requests-using-in-CTlog"></a>

Após configurar o CloudTrail para entregar eventos a um bucket, você deve começar a ver objetos irem para seu bucket de destino no console do Amazon S3. Eles são formatados da seguinte maneira: 

`s3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/Region/yyyy/mm/dd` 

Eventos registrados pelo CloudTrail são armazenados como objetos JSON compactados no formato gzipped no bucket do S3. Para encontrar solicitações com eficiência, você deve usar um serviço como o Amazon Athena para indexar e consultar os logs do CloudTrail. 

*Para obter mais informações sobre o CloudTrail e o Athena, consulte [Criar a tabela de logs do AWS CloudTrail no Athena usando projeção de partições](https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html#create-cloudtrail-table-partition-projection) no Guia do usuário do Amazon Athena*.

## Identificar solicitações de Signature Version 2 do Amazon S3 usando o CloudTrail
<a name="cloudtrail-identification-sigv2-requests"></a>

Você pode usar um log de eventos do CloudTrail para identificar qual versão de assinatura de API foi usada para assinar uma solicitação no Amazon S3. Esse recurso é importante, pois o suporte ao Signature versão 2 será desativado (suspenso). 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*. 

É *altamente* recomendável que você use o CloudTrail para ajudar a determinar se algum dos seus fluxos de trabalho está usando o Signature versão 2. Corrija-os atualizando suas bibliotecas e o código para usar o Signature versão 4 para evitar qualquer impacto em seus negócios. 

Para obter mais informações, consulte [Anúncio: AWS CloudTrail para Amazon S3 adiciona novos campos para auditoria de segurança aprimorada](https://forums.aws.amazon.com/ann.jspa?annID=6551) no AWS re:Post.

**nota**  
Os eventos do CloudTrail para o Amazon S3 incluem a versão da assinatura nos detalhes da solicitação sob o nome de chave de `additionalEventData`. Para encontrar a versão da assinatura em solicitações feitas para objetos no Amazon S3, como `GET`, `PUT` e `DELETE`, você deve habilitar os eventos de dados do CloudTrail. (Esse recurso está desativado por padrão.)

AWS CloudTrailO é o método preferencial para identificar solicitações do Signature versão 2. Se você estiver usando logs de acesso ao servidor do Amazon S3, consulte [Identificar solicitações do Signature Version 2 usando logs de acesso do Amazon S3](using-s3-access-logs-to-identify-requests.md#using-s3-access-logs-to-identify-sigv2-requests).

**Topics**
+ [Exemplos de consulta do Athena para identificar solicitações do Amazon S3 Signature versão 2](#ct-examples-identify-sigv2-requests)
+ [Particionar dados do Signature versão 2](#partitioning-sigv2-data)

### Exemplos de consulta do Athena para identificar solicitações do Amazon S3 Signature versão 2
<a name="ct-examples-identify-sigv2-requests"></a>

**Example : Selecione todos os eventos do Signature Version 2 e imprima somente `EventTime`, `S3_Action`, `Request_Parameters`, `Region`, `SourceIP` e `UserAgent`**  
Na consulta do Athena a seguir, substitua *`s3_cloudtrail_events_db.cloudtrail_table`* pelos seus detalhes do Athena e aumente ou remova o limite, conforme necessário.   

```
SELECT EventTime, EventName as S3_Action, requestParameters as Request_Parameters, awsregion as AWS_Region, sourceipaddress as Source_IP, useragent as User_Agent
FROM s3_cloudtrail_events_db.cloudtrail_table
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
LIMIT 10;
```

**Example : Selecione todos os solicitantes que estão enviando tráfego do Signature versão 2**  
   

```
SELECT useridentity.arn, Count(requestid) as RequestCount
FROM s3_cloudtrail_events_db.cloudtrail_table
WHERE eventsource='s3.amazonaws.com'
    and json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
Group by useridentity.arn
```

### Particionar dados do Signature versão 2
<a name="partitioning-sigv2-data"></a>

Se você tiver uma grande quantidade de dados para consultar, poderá reduzir os custos e o tempo de execução do Athena criando uma tabela particionada. 

Para fazer isso, crie uma tabela com partições conforme indicado a seguir.

```
   CREATE EXTERNAL TABLE s3_cloudtrail_events_db.cloudtrail_table_partitioned(
        eventversion STRING,
        userIdentity STRUCT<
            type:STRING,
            principalid:STRING,
            arn:STRING,
            accountid:STRING,
            invokedby:STRING,
            accesskeyid:STRING,
            userName:STRING,
         sessioncontext:STRUCT<
                    attributes:STRUCT< 
                    mfaauthenticated:STRING,
                    creationdate:STRING>,
                    sessionIssuer:STRUCT<
                    type:STRING,
                    principalId:STRING,
                    arn:STRING,
                    accountId:STRING,
                    userName:STRING>
                >
             >,
        eventTime STRING,
        eventSource STRING,
        eventName STRING,
        awsRegion STRING,
        sourceIpAddress STRING,
        userAgent STRING,
        errorCode STRING,
        errorMessage STRING,
        requestParameters STRING,
        responseElements STRING,
        additionalEventData STRING,
        requestId STRING,
        eventId STRING,
        resources ARRAY<STRUCT<ARN:STRING,accountId: STRING,type:STRING>>, 
        eventType STRING,
        apiVersion STRING,
        readOnly STRING,
        recipientAccountId STRING,
        serviceEventDetails STRING,
        sharedEventID STRING,
        vpcEndpointId STRING
    )   
    PARTITIONED BY (region string, year string, month string, day string)
    ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
    STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
    OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/';
```

Em seguida, crie as partições individualmente. Não é possível obter resultados de datas que não foram criadas. 

```
ALTER TABLE s3_cloudtrail_events_db.cloudtrail_table_partitioned ADD
    PARTITION (region= 'us-east-1', year= '2019', month= '02', day= '19') LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/us-east-1/2019/02/19/'
    PARTITION (region= 'us-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/us-west-1/2019/02/19/'
    PARTITION (region= 'us-west-2', year= '2019', month= '02', day= '19') LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/us-west-2/2019/02/19/'
    PARTITION (region= 'ap-southeast-1', year= '2019', month= '02', day= '19') LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/ap-southeast-1/2019/02/19/'
    PARTITION (region= 'ap-southeast-2', year= '2019', month= '02', day= '19') LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/ap-southeast-2/2019/02/19/'
    PARTITION (region= 'ap-northeast-1', year= '2019', month= '02', day= '19') LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/ap-northeast-1/2019/02/19/'
    PARTITION (region= 'eu-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/eu-west-1/2019/02/19/'
    PARTITION (region= 'sa-east-1', year= '2019', month= '02', day= '19') LOCATION 's3://amzn-s3-demo-bucket1/AWSLogs/111122223333/CloudTrail/sa-east-1/2019/02/19/';
```

Você pode, então, fazer a solicitação com base nessas partições e não é preciso carregar todo o bucket. 

```
SELECT useridentity.arn,
Count(requestid) AS RequestCount
FROM s3_cloudtrail_events_db.cloudtrail_table_partitioned
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
AND region='us-east-1'
AND year='2019'
AND month='02'
AND day='19'
Group by useridentity.arn
```

## Identificar o acesso a objetos do S3 usando o CloudTrail
<a name="cloudtrail-identification-object-access"></a>

Você pode usar seus logs de eventos do AWS CloudTrail para identificar solicitações de acesso a objetos do Amazon S3 para eventos de dados como `GetObject`, `DeleteObject` e `PutObject` e descobrir informações adicionais sobre essas solicitações.

**nota**  
Se você estiver registrando atividades de dados em log com o AWS CloudTrail, o registro de um evento de dados `DeleteObjects` do Amazon S3 inclui o evento `DeleteObjects` e um evento `DeleteObject` para cada objeto excluído como parte dessa operação. Você pode omitir a visibilidade adicional sobre objetos excluídos do registro de eventos. Para ter mais informações, consulte [AWS CLI examples for filtering data events](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/filtering-data-events.html#filtering-data-events-deleteobjects) no *Guia do usuário do AWS CloudTrail*.

O exemplo a seguir mostra como obter todas as solicitações `PUT` de objetos para o Amazon S3 de um log de eventos do AWS CloudTrail. 

**Topics**
+ [Exemplos de consulta do Athena para identificar solicitações de acesso a objetos do Amazon S3](#ct-examples-identify-object-access-requests)

### Exemplos de consulta do Athena para identificar solicitações de acesso a objetos do Amazon S3
<a name="ct-examples-identify-object-access-requests"></a>

Nos exemplos de consultas do Athena a seguir, substitua *`s3_cloudtrail_events_db.cloudtrail_table`* pelos seus detalhes do Athena e modifique o intervalo de datas, conforme necessário. 

**Example : Selecione todos os eventos que tenham solicitações `PUT` de acesso a objetos e imprima somente `EventTime`, `EventSource`, `SourceIP`, `UserAgent`, `BucketName`, `object` e `UserARN`**  

```
SELECT
  eventTime, 
  eventName, 
  eventSource, 
  sourceIpAddress, 
  userAgent, 
  json_extract_scalar(requestParameters, '$.bucketName') as bucketName, 
  json_extract_scalar(requestParameters, '$.key') as object,
  userIdentity.arn as userArn
FROM
  s3_cloudtrail_events_db.cloudtrail_table
WHERE
  eventName = 'PutObject'
  AND eventTime BETWEEN '2019-07-05T00:00:00Z' and '2019-07-06T00:00:00Z'
```

**Example : Selecione todos os eventos que tenham solicitações `GET` de acesso a objetos e imprima somente `EventTime`, `EventSource`, `SourceIP`, `UserAgent`, `BucketName`, `object` e `UserARN`**  

```
SELECT
  eventTime, 
  eventName, 
  eventSource, 
  sourceIpAddress, 
  userAgent, 
  json_extract_scalar(requestParameters, '$.bucketName') as bucketName, 
  json_extract_scalar(requestParameters, '$.key') as object,
  userIdentity.arn as userArn
FROM
  s3_cloudtrail_events_db.cloudtrail_table
WHERE
  eventName = 'GetObject'
  AND eventTime BETWEEN '2019-07-05T00:00:00Z' and '2019-07-06T00:00:00Z'
```

**Example : Selecione todos os eventos de solicitante anônimo em um bucket em determinado período e imprima somente `EventTime`, `EventName`, `EventSource`, `SourceIP`, `UserAgent`, `BucketName`, `UserARN` e `AccountID`**  

```
SELECT
  eventTime, 
  eventName, 
  eventSource, 
  sourceIpAddress, 
  userAgent, 
  json_extract_scalar(requestParameters, '$.bucketName') as bucketName, 
  userIdentity.arn as userArn,
  userIdentity.accountId
FROM
  s3_cloudtrail_events_db.cloudtrail_table
WHERE
  userIdentity.accountId = 'anonymous'
  AND eventTime BETWEEN '2019-07-05T00:00:00Z' and '2019-07-06T00:00:00Z'
```

**Example : Identifique todas as solicitações que exigiram uma ACL para autorização**  
 O exemplo de 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. Se a solicitação exigiu uma ACL para autorização, o valor de `aclRequired` em `additionalEventData` é `Yes`. Se nenhuma ACL foi necessária, `aclRequired` não está presente. Você pode usar essas informações para migrar essas permissões de ACL para as políticas de bucket apropriadas. 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](object-ownership-migrating-acls-prerequisites.md).  

```
SELECT
  eventTime, 
  eventName, 
  eventSource, 
  sourceIpAddress, 
  userAgent, 
  userIdentity.arn as userArn,
  json_extract_scalar(requestParameters, '$.bucketName') as bucketName,
  json_extract_scalar(requestParameters, '$.key') as object,
  json_extract_scalar(additionalEventData, '$.aclRequired') as aclRequired
FROM 
  s3_cloudtrail_events_db.cloudtrail_table
WHERE
  json_extract_scalar(additionalEventData, '$.aclRequired') = 'Yes'
  AND eventTime BETWEEN '2022-05-10T00:00:00Z' and '2022-08-10T00:00:00Z'
```

**nota**  
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 de acesso ao servidor do Amazon S3, consulte [Identificar solicitações de acesso a objetos usando logs de acesso do Amazon S3](using-s3-access-logs-to-identify-requests.md#using-s3-access-logs-to-identify-objects-access).