Identificazione delle richieste Amazon S3 tramite CloudTrail - Amazon Simple Storage Service

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

Identificazione delle richieste Amazon S3 tramite CloudTrail

In Amazon S3, puoi identificare le richieste utilizzando un registro AWS CloudTrail eventi. AWS CloudTrail è il metodo preferito per identificare le richieste Amazon S3, ma se utilizzi i log di accesso al server Amazon S3, consulta. Utilizzo dei log degli accessi al server Amazon S3 per identificare le richieste

Identificazione delle richieste effettuate ad Amazon S3 in un registro CloudTrail

Dopo aver configurato l' CloudTrail invio di eventi a un bucket, dovresti iniziare a vedere gli oggetti andare al bucket di destinazione sulla console Amazon S3. Questi sono formattati come riportato di seguito:

s3://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/CloudTrail/Region/yyyy/mm/dd

Gli eventi registrati da CloudTrail vengono archiviati come oggetti gzipped JSON compressi nel bucket S3. Per trovare in modo efficiente le richieste, è necessario utilizzare un servizio come Amazon Athena per indicizzare e interrogare i CloudTrail log.

Per ulteriori informazioni su CloudTrail e Athena, consulta Creazione della tabella per i AWS CloudTrail log in Athena utilizzando la proiezione delle partizioni nella Amazon Athena User Guide.

Identificazione delle richieste Amazon S3 Signature versione 2 mediante CloudTrail

Puoi utilizzare un registro CloudTrail eventi per identificare quale versione di firma API è stata utilizzata per firmare una richiesta in Amazon S3. Questa possibilità è importante perché il supporto di Signature Version 2 sta per essere disattivato perché 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.

Ti consigliamo vivamente di CloudTrail utilizzarlo per determinare se alcuni dei tuoi flussi di lavoro utilizzano la firma Signature versione 2. Nel caso, correggili aggiornando le librerie e il codice in modo che utilizzino invece Signature Version 4 per evitare qualsiasi impatto sul business.

Per ulteriori informazioni, consulta Annuncio: AWS CloudTrail per Amazon S3 aggiunge nuovi campi per un controllo di sicurezza avanzato. AWS re:Post

Nota

CloudTrail gli eventi per Amazon S3 includono la versione della firma nei dettagli della richiesta con il nome chiave di '. additionalEventData Per trovare la versione della firma sulle richieste effettuate per oggetti in Amazon S3 comeGET, e sulle DELETE richiestePUT, devi abilitare gli eventi relativi ai CloudTrail dati. (Questa funzionalità è disattivata per impostazione predefinita).

AWS CloudTrail è il metodo preferito per identificare le richieste Signature Version 2. Se utilizzi i log degli accessi del server Amazon S3, consulta Identificazione delle richieste di Signature versione 2 tramite i log degli accessi ad Amazon S3.

Esempi di query Athena per l'identificazione di richieste Amazon S3 Signature versione 2

Esempio : seleziona tutti gli eventi Signature Version 2 e stampa solo EventTime, S3_Action, Request_Parameters, Region, SourceIP e UserAgent

Nella query Athena seguente sostituisci s3_cloudtrail_events_db.cloudtrail_table con i dettagli Athena e aumenta o rimuovi il limite in base alle necessità.

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;
Esempio - Selezionare tutti i richiedenti che inviano traffico di tipo Signature versione 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

Partizionamento dei dati di Signature versione 2

Se è necessario eseguire query su una grande quantità di dati, è possibile ridurre i costi e i tempi di esecuzione di Athena creando una tabella partizionata.

Per farlo, creare una nuova tabella con partizioni nel modo seguente.

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://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/';

Quindi creare le partizioni individualmente. Non è possibile ottenere risultati da date che non sono state create.

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

È quindi possibile effettuare la richiesta sulla base di queste partizioni e non è necessario caricare l'intero 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

Identificazione dell'accesso agli oggetti S3 utilizzando CloudTrail

Puoi utilizzare i registri AWS CloudTrail degli eventi per identificare le richieste di accesso agli oggetti Amazon S3 per eventi ai dati GetObject comeDeleteObject, PutObject e, e scoprire ulteriori informazioni su tali richieste.

L'esempio seguente mostra come ottenere tutte le richieste di PUT oggetti per Amazon S3 da un registro AWS CloudTrail eventi.

Esempi di query Athena per l'identificazione di richieste di accesso agli oggetti Amazon S3

Negli esempi di query Athena seguenti sostituisci s3_cloudtrail_events_db.cloudtrail_table con i dettagli Athena e modifica l'intervallo della data in base alle necessità.

Esempio : seleziona tutti gli eventi con richieste PUT di accesso agli oggetti e stampa solo 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'
Esempio : seleziona tutti gli eventi con richieste GET di accesso agli oggetti e stampa solo 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'
Esempio : seleziona tutti gli eventi anonimi del richiedente per un bucket in un determinato periodo e stampa solo 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'
Esempio : identifica tutte le richieste che richiedono una ACL per l'autorizzazione

L'esempio di query Amazon Athena seguente mostra come identificare tutte le richieste relative ai bucket S3 che richiedono una lista di controllo degli accessi (ACL) per l'autorizzazione. Se la richiesta richiede una ACL per l'autorizzazione, il valore aclRequired in additionalEventData è Yes. Se non sono richieste ACL, aclRequired non è presente. È possibile utilizzare queste informazioni per eseguire la migrazione delle autorizzazioni ACL alle policy di bucket appropriate. Dopo aver creato queste policy di bucket, puoi disabilitare le ACL per questi bucket. Per ulteriori informazioni sulla disabilitazione delle ACL, consulta Prerequisiti per la disabilitazione delle ACL.

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
  • 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 utilizzi i log di accesso al server Amazon S3, consulta Identificazione delle richieste di accesso agli oggetti tramite i log degli accessi Amazon S3.