Utilizzo dei log degli accessi Amazon S3 per identificare le richieste - Amazon Simple Storage Service

Utilizzo dei log degli accessi Amazon S3 per identificare le richieste

Puoi identificare le richieste Amazon S3 con i log di accesso Amazon S3.

Nota
  • Si consiglia di utilizzare eventi di dati AWS CloudTrail anziché i log degli accessi Amazon S3. Gli eventi di dati CloudTrail sono più facili da configurare e contengono più informazioni. Per ulteriori informazioni, consulta Utilizzo di CloudTrail per identificare le richieste di Amazon S3.

  • A seconda del numero di richieste di accesso ricevute, potrebbero essere necessarie più risorse o più tempo per analizzare i log.

Esecuzione di query sui log di accesso Amazon S3 per le richieste tramite Amazon Athena

Puoi identificare le richieste ad Amazon S3 con i log degli accessi 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.

Esempio

L'esempio seguente mostra come eseguire query sui log degli accessi al server Amazon S3 in Amazon Athena.

Nota

Per specificare una posizione in Amazon S3 in una query Athena, devi formattare il nome del bucket di destinazione e il prefisso di destinazione in cui vengono recapitati i log come URI S3, in questo modo:s3://DOC-EXAMPLE-BUCKET1-logs/prefix/

  1. Aprire la console Athena all'indirizzo https://console.aws.amazon.com/athena/.

  2. Nel Query Editor emetti un comando simile al seguente.

    create database s3_access_logs_db
    Nota

    È una best practice creare il database nella stessa Regione AWS del bucket S3.

  3. Nel Query Editor eseguire un comando simile al seguente per creare uno schema di tabella nel database creato nella fase 2. 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.

    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) 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://awsexamplebucket1-logs/prefix/'
  4. Nel riquadro di navigazione, in Database, scegliere il database.

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

Esempio - 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%';
Esempio - 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';
Esempio - 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');
Esempio - Visualizza la quantità di dati trasferiti da un indirizzo IP specifico in un determinato periodo di tempo
SELECT SUM(bytessent) AS uploadTotal, SUM(objectsize) AS downloadTotal, SUM(bytessent + objectsize) AS Total FROM s3_access_logs_db.mybucket_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');
Nota

Per ridurre il periodo di conservazione del log, è possibile creare una policy del ciclo di vita Amazon S3 per il bucket dei log degli accessi al server. Configurare la policy 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 della configurazione del ciclo di vita in un bucket.

Identificazione delle richieste di Signature versione 2 tramite i log di accesso Amazon S3

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 Signature Version 2 utilizzando i log degli accessi Amazon S3.

Nota
Esempio - 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 di accesso Amazon S3

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 PUT per oggetti per Amazon S3 dal log degli accessi al server.

Esempio - Visualizza tutti i richiedenti che inviano richieste PUT per oggetti in un determinato periodo
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')

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

Esempio - Visualizza tutti i richiedenti che inviano richieste GET per oggetti in un determinato periodo
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')

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

Esempio - Visualizza tutti i richiedenti anonimi che effettuano richieste a un bucket in un determinato periodo
SELECT Bucket, 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')
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 chiamate PutObject o GetObject da indirizzi IP/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 utilizzi i log AWS CloudTrail Amazon S3, consulta Identificazione dell'accesso agli oggetti S3 tramite CloudTrail.