Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Identifizieren von Amazon S3 S3-Anfragen mithilfe von CloudTrail
In Amazon S3 können Sie Anfragen anhand eines AWS CloudTrail Ereignisprotokolls identifizieren. AWS CloudTrail ist die bevorzugte Methode zur Identifizierung von Amazon S3 S3-Anfragen. Wenn Sie jedoch Amazon S3 S3-Serverzugriffsprotokolle verwenden, finden Sie weitere Informationen unterVerwenden von Amazon-S3-Serverzugriffsprotokollen zur Identifizierung von Anforderungen.
Themen
Identifizieren von Anfragen an Amazon S3 in einem CloudTrail Protokoll
Nachdem Sie die Bereitstellung von Ereignissen CloudTrail an einen Bucket eingerichtet haben, sollten Sie auf der Amazon S3 S3-Konsole sehen, dass Objekte an Ihren Ziel-Bucket gesendet werden. Diese sind folgendermaßen formatiert:
s3://
amzn-s3-demo-bucket1
/AWSLogs/111122223333
/CloudTrail/Region
/yyyy
/mm
/dd
Von CloudTrail protokollierte Ereignisse werden komprimiert gespeichert gzipped JSONObjekte in Ihrem S3-Bucket. Um Anfragen effizient zu finden, sollten Sie einen Dienst wie Amazon Athena verwenden, um die CloudTrail Protokolle zu indizieren und abzufragen.
Weitere Informationen zu CloudTrail und Athena finden Sie unter Erstellen der Tabelle für AWS CloudTrail Protokolle in Athena mithilfe der Partitionsprojektion im Amazon Athena Athena-Benutzerhandbuch.
Identifizieren von Amazon S3 Signature Version 2-Anfragen mithilfe von CloudTrail
Sie können ein CloudTrail Ereignisprotokoll verwenden, um zu ermitteln, welche API Signaturversion zum Signieren einer Anfrage in Amazon S3 verwendet wurde. Diese Funktion ist wichtig, weil die Unterstützung für Signature Version 2 deaktiviert wird (veraltet). Danach akzeptiert Amazon S3 keine Anforderungen mit Signature Version 2 mehr, alle Anforderungen müssen also mit Signature Version 4 signiert werden.
Wir empfehlen dringend, dass Sie es verwenden CloudTrail , um festzustellen, ob in einem Ihrer Workflows Signature Version 2-Signaturen verwendet werden. Korrigieren Sie diese Workflows, indem Sie die betreffenden Bibliotheken und den Code so aktualisieren, dass mittels Signature Version 4 signiert wird. Dadurch können Beeinträchtigungen der geschäftlichen Prozesse werden.
Weitere Informationen finden Sie unter Ankündigung: AWS CloudTrail Für Amazon S3 werden neue Felder für erweiterte Sicherheitsüberprüfungen hinzugefügt
Anmerkung
CloudTrail Ereignisse für Amazon S3 enthalten die Signaturversion in den Anforderungsdetails unter dem Schlüsselnamen 'additionalEventData
. Um die Signaturversion von Anfragen für Objekte in Amazon S3 wieGET
, PUT
und DELETE
Anfragen zu finden, müssen Sie CloudTrail Datenereignisse aktivieren. (Diese Option ist standardmäßig deaktiviert.)
AWS CloudTrail ist die bevorzugte Methode zur Identifizierung von Signature Version 2-Anfragen. Wenn Sie Zugriffsprotokolle von Amazon S3 Server verwenden, lesen Sie Identifizieren von Signature-Version-2-Anforderungen mittels Amazon-S3-Zugriffsprotokollen.
Themen
Athena-Abfragebeispiele zum Identifizieren von Anforderungen zur Amazon S3 Signature Version 2
Beispiel – Wählen Sie alle Signature-Version-2-Ereignisse aus und drucken Sie nur EventTime
, S3_Action
, Request_Parameters
, Region
, SourceIP
und UserAgent
Ersetzen Sie in der folgenden Athena-Abfrage
mit Ihren Athena-Daten und erhöhen oder entfernen Sie das Limit nach Bedarf. s3_cloudtrail_events_db.cloudtrail_table
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;
Beispiel – Alle Anforderer auswählen, die Signature Version 2-Datenverkehr senden
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
Partitionieren von Signature Version 2-Daten
Wenn Sie über eine große Datenmenge verfügen, die abgefragt werden muss, können Sie Kosten und Laufzeit für Athena reduzieren, indem Sie eine partitionierte Tabelle erstellen.
Erstellen Sie zu diesem Zweck folgendermaßen eine neue Tabelle mit Partitionen.
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
/';
Erstellen Sie dann die einzelnen Partitionen. Sie können keine Resultate aus noch nicht erstellten Daten ermitteln.
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/';
Anschließend können Sie die Anforderung basierend auf diesen Partitionen erstellen und müssen nicht mehr den gesamten Bucket laden.
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
Identifizieren des Zugriffs auf S3-Objekte mithilfe von CloudTrail
Sie können Ihre AWS CloudTrail Ereignisprotokolle verwenden, um Amazon S3 S3-Objektzugriffsanforderungen für Datenereignisse wie GetObject
DeleteObject
PutObject
, und zu identifizieren und zusätzliche Informationen zu diesen Anfragen zu erhalten.
Das folgende Beispiel zeigt, wie alle PUT
Objektanforderungen für Amazon S3 aus einem AWS CloudTrail Ereignisprotokoll abgerufen werden.
Athena-Abfragebeispiele zur Identifizierung von Amazon-S3-Objektzugriffsanfragen
Ersetzen Sie in den folgenden Athena-Abfragebeispielen
mit Ihren Athena-Daten und ändern Sie den Datumsbereich nach Bedarf. s3_cloudtrail_events_db.cloudtrail_table
Beispiel – Wählen Sie alle Ereignisse aus, für die PUT
-Objektzugriffsanforderungen vorliegen, und drucken Sie nur EventTime
, EventSource
, SourceIP
, UserAgent
, BucketName
, object
und 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
'
Beispiel – Wählen Sie alle Ereignisse aus, für die GET
-Objektzugriffsanforderungen vorliegen, und drucken Sie nur EventTime
, EventSource
, SourceIP
, UserAgent
, BucketName
, object
und 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
'
Beispiel – Wählen Sie alle anonymen Anforderungsereignisse für einen Bucket in einem bestimmten Zeitraum aus und drucken Sie nur EventTime
, EventName
, EventSource
, SourceIP
, UserAgent
, BucketName
, UserARN
und 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
'
Beispiel — Identifizieren Sie alle Anfragen, ACL für die eine Autorisierung erforderlich war
Das folgende Amazon Athena Athena-Abfragebeispiel zeigt, wie Sie alle Anfragen an Ihre S3-Buckets identifizieren können, für die eine Zugriffskontrollliste (ACL) für die Autorisierung erforderlich war. Wenn ACL für die Anfrage eine Autorisierung erforderlich war, ist der aclRequired
Wert inadditionalEventData
. Yes
Wenn keine erforderlich ACLs waren, aclRequired
ist er nicht vorhanden. Sie können diese Informationen verwenden, um diese ACL Berechtigungen auf die entsprechenden Bucket-Richtlinien zu migrieren. Nachdem Sie diese Bucket-Richtlinien erstellt haben, können Sie sie ACLs für diese Buckets deaktivieren. Weitere Informationen zur Deaktivierung ACLs finden Sie unter. Voraussetzungen für die Deaktivierung ACLs
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'
Anmerkung
-
Diese Abfragebeispiele können auch für die Sicherheitsüberwachung nützlich sein. Sie können die Ergebnisse auf
PutObject
- oderGetObject
-Aufrufe von unerwarteten oder nicht autorisierten IP-Adressen oder Anforderern und zum Identifizieren anonymer Anforderungen an Ihre Buckets prüfen. -
Diese Abfrage ruft nur Informationen von der Zeit ab, zu der die Protokollierung aktiviert wurde.
Wenn Sie Amazon-S3-Server-Zugriffsprotokolle verwenden, lesen Sie Identifizieren von Objektzugriffsanforderungen mittels Amazon-S3-Zugriffsprotokollen.