

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo dei log degli accessi al server Amazon S3 per identificare le richieste
<a name="using-s3-access-logs-to-identify-requests"></a>

Puoi identificare le richieste Amazon S3 con i log degli accessi al server Amazon S3. 

**Nota**  
Per identificare le richieste Amazon S3, ti consigliamo di utilizzare eventi AWS CloudTrail relativi ai dati anziché i log di accesso al server Amazon S3. CloudTrail gli eventi relativi ai dati sono più facili da configurare e contengono più informazioni. Per ulteriori informazioni, consulta [Identificazione delle richieste Amazon S3 tramite CloudTrail](cloudtrail-request-identification.md).
A seconda del numero di richieste di accesso ricevute, l'analisi dei log potrebbe richiedere più risorse o tempo rispetto all'utilizzo degli eventi relativi ai CloudTrail dati.

**Topics**
+ [Esecuzione di query sui log degli accessi per le richieste tramite Amazon Athena](#querying-s3-access-logs-for-requests)
+ [Identificazione delle richieste di Signature versione 2 tramite i log degli accessi ad Amazon S3](#using-s3-access-logs-to-identify-sigv2-requests)
+ [Identificazione delle richieste di accesso agli oggetti tramite i log degli accessi Amazon S3](#using-s3-access-logs-to-identify-objects-access)

## Esecuzione di query sui log degli accessi per le richieste tramite Amazon Athena
<a name="querying-s3-access-logs-for-requests"></a>

Puoi identificare le richieste ad Amazon S3 con i log degli accessi ad Amazon S3 utilizzando Amazon Athena. 

Amazon S3 archivia i log degli accessi al server come oggetti in un bucket S3. Spesso è più facile utilizzare uno strumento in grado di analizzare i log in Amazon S3. Athena supporta l'analisi di oggetti S3 e può essere utilizzato per eseguire query sui log degli accessi Amazon S3.

**Example**  
L'esempio seguente mostra come eseguire query sui log degli accessi al server Amazon S3 in Amazon Athena. Sostituisci `{{user input placeholders}}` che trovi nei seguenti esempi con le tue informazioni.  
Per specificare una posizione Amazon S3 in una query Athena, devi fornire un URI S3 per il bucket in cui vengono distribuiti i log. Questo URI deve includere il nome e il prefisso del bucket nel seguente formato: `s3://{{{{amzn-s3-demo-bucket1}}-logs/prefix}}/` 

1. Apri la console Athena all'indirizzo [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Nel Query Editor esegui un comando simile al seguente. Sostituisci `{{s3_access_logs_db}}` con il nome che desideri assegnare al database. 

   ```
   CREATE DATABASE {{s3_access_logs_db}}
   ```
**Nota**  
È consigliabile creare il database nello stesso Regione AWS del bucket S3. 

1. Nel Query Editor eseguire un comando simile al seguente per creare uno schema di tabella nel database creato nella fase 2. Sostituisci `{{s3_access_logs_db.mybucket_logs}}` con il nome che desideri assegnare alla tabella. I valori dei tipi di dati `STRING` e `BIGINT` sono le proprietà del log di accesso. È possibile eseguire query su queste proprietà in Athena. Per `LOCATION`, immettere il percorso del prefisso e il bucket S3 come indicato in precedenza.

------
#### [ Date-based partitioning ]

   ```
   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,
    `sourceregion` STRING)
    PARTITIONED BY (
      `timestamp` 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://bucket-name/prefix-name/account-id/region/source-bucket-name/'
    TBLPROPERTIES (
     'projection.enabled'='true', 
     'projection.timestamp.format'='yyyy/MM/dd', 
     'projection.timestamp.interval'='1', 
     'projection.timestamp.interval.unit'='DAYS', 
     'projection.timestamp.range'='2024/01/01,NOW', 
     'projection.timestamp.type'='date', 
     'storage.location.template'='s3://bucket-name/prefix-name/account-id/region/source-bucket-name/${timestamp}')
   ```

------
#### [ Non-date-based partitioning ]

   ```
   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,
     `sourceregion` 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/}}'
   ```

------

1. Nel riquadro di navigazione, in **Database**, scegliere il database.

1. In **Tables (Tabelle)**, scegliere **Preview table (Anteprima tabella)** accanto al nome della tabella.

   Nel pannello **Results (Risultati)**, dovrebbero essere visualizzati i dati dai log di accesso al server, come `bucketowner`, `bucket`, `requestdatetime` e così via. Questo indica che la tabella Athena è stata creata correttamente. È ora possibile eseguire query sui log degli accessi al server Amazon S3.

**Example - Visualizza chi ha eliminato un oggetto e quando (timestamp, indirizzo IP e utente IAM)**  

```
SELECT requestdatetime, remoteip, requester, key 
FROM {{s3_access_logs_db.mybucket_logs}} 
WHERE key = '{{images/picture.jpg}}' AND operation like '%DELETE%';
```

**Example - Visualizza tutte le operazioni eseguite da un utente IAM**  

```
SELECT * 
FROM {{s3_access_logs_db.mybucket_logs}} 
WHERE requester='arn:aws:iam::{{123456789123}}:user/{{user_name}}';
```

**Example - Visualizza tutte le operazioni eseguite su un oggetto in un periodo di tempo specifico**  

```
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');
```

**Example : visualizza la quantità di dati trasferiti da un indirizzo IP specifico in un determinato periodo di tempo**  

```
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');
```

**Example — Trova IDs la richiesta di errori HTTP 5xx in un periodo di tempo specifico**  

```
SELECT requestdatetime, key, httpstatus, errorcode, requestid, hostid 
FROM {{s3_access_logs_db.mybucket_logs}}
WHERE httpstatus like '5%' AND timestamp
BETWEEN '2024/01/29'
AND '2024/01/30'
```

**Nota**  
Per ridurre il periodo di conservazione dei log, puoi creare una configurazione del ciclo di vita S3 per il bucket dei log degli accessi al server. Crea regole di configurazione del ciclo di vita per rimuovere i file di log periodicamente. In questo modo, si riduce la quantità di dati analizzati da Athena per ogni query. Per ulteriori informazioni, consulta [Impostazione di una configurazione del ciclo di vita S3 in un bucket](how-to-set-lifecycle-configuration-intro.md).

## Identificazione delle richieste di Signature versione 2 tramite i log degli accessi ad Amazon S3
<a name="using-s3-access-logs-to-identify-sigv2-requests"></a>

Il supporto di Amazon S3 per Signature Version 2 sta per essere disattivato in quanto obsoleto. Dopo, Amazon S3 non accetterà più le richieste che usano Signature Version 2 e tutte le richieste dovranno usare la firma *Signature Version 4*. Puoi identificare le richieste di accesso a Signature versione 2 utilizzando i log degli accessi ad Amazon S3. 

**Nota**  
Per identificare le richieste Signature versione 2, ti consigliamo di utilizzare gli eventi AWS CloudTrail relativi ai dati anziché i log di accesso al server Amazon S3. CloudTrail gli eventi di dati sono più facili da configurare e contengono più informazioni rispetto ai log di accesso al server. Per ulteriori informazioni, consulta [Identificazione delle richieste Amazon S3 Signature versione 2 mediante CloudTrail](cloudtrail-request-identification.md#cloudtrail-identification-sigv2-requests).

**Example - Visualizza tutti i richiedenti che inviano traffico Signature versione 2**  

```
SELECT requester, sigv, Count(sigv) as sigcount 
FROM {{s3_access_logs_db.mybucket_logs}}
GROUP BY requester, sigv;
```

## Identificazione delle richieste di accesso agli oggetti tramite i log degli accessi Amazon S3
<a name="using-s3-access-logs-to-identify-objects-access"></a>

Puoi utilizzare query sui log degli accessi al server Amazon S3 per identificare le richieste di accesso a oggetti Amazon S3, per operazioni come `GET`, `PUT` e `DELETE`, e ottenere ulteriori informazioni su queste richieste.

L'esempio di query Amazon Athena seguente mostra come ottenere tutte le richieste di oggetti `PUT` per Amazon S3 da un log degli accessi al server. 

**Example : visualizza tutti i richiedenti che inviano richieste `PUT` di oggetti in un determinato periodo**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM {{s3_access_logs_db.mybucket_logs}}
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')
```

L'esempio di query Amazon Athena seguente mostra come ottenere tutte le richieste `GET` di oggetti per Amazon S3 dal log degli accessi al server. 

**Example : visualizza tutti i richiedenti che inviano richieste `GET` di oggetti in un determinato periodo**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM {{s3_access_logs_db.mybucket_logs}}
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')
```

L'esempio di query Amazon Athena seguente mostra come ottenere tutte le richieste anonime ai bucket S3 dal log degli accessi al server. 

**Example : visualizza tutti i richiedenti anonimi che effettuano richieste a un bucket in un determinato periodo**  

```
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')
```

La seguente query Amazon Athena mostra come identificare tutte le richieste ai bucket S3 che richiedono una lista di controllo degli accessi (ACL) per l'autorizzazione. È possibile utilizzare queste informazioni per migrare tali autorizzazioni ACL alle policy bucket appropriate e disabilitarle. ACLs Dopo aver creato queste politiche per i bucket, puoi disabilitarle. ACLs Per ulteriori informazioni sulla disabilitazione ACLs, consulta. [Prerequisiti per la disabilitazione ACLs](object-ownership-migrating-acls-prerequisites.md) 

**Example : identifica tutte le richieste che richiedono una ACL per l'autorizzazione**  

```
SELECT bucket_name, requester, key, operation, aclrequired, requestdatetime
FROM {{s3_access_logs_db.mybucket_logs}}
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**  
È possibile modificare l'intervallo di data in base alle esigenze.
Questi esempi di query possono essere utili anche per il monitoraggio della sicurezza. Puoi rivedere i risultati per le chiamate `PutObject` o `GetObject` da indirizzi IP o richiedenti imprevisti o non autorizzati e per l'identificazione di eventuali richieste anonime ai bucket.
La query recupera solo le informazioni a partire dall'orario in cui è stata abilitata la registrazione. 
Se si utilizzano i AWS CloudTrail log, vedere. [Identificazione dell'accesso agli oggetti S3 utilizzando CloudTrail](cloudtrail-request-identification.md#cloudtrail-identification-object-access) 