Verwenden von Amazon-S3-Serverzugriffsprotokollen zur Identifizierung von Anforderungen - Amazon Simple Storage Service

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.

Verwenden von Amazon-S3-Serverzugriffsprotokollen zur Identifizierung von Anforderungen

Sie können mittels Amazon-S3-Serverzugriffsprotokollen Amazon-S3-Anforderungen identifizieren.

Anmerkung
  • Um Amazon S3 S3-Anfragen zu identifizieren, empfehlen wir, AWS CloudTrail Datenereignisse anstelle von Amazon S3 S3-Serverzugriffsprotokollen zu verwenden. CloudTrail Datenereignisse sind einfacher einzurichten und enthalten mehr Informationen. Weitere Informationen finden Sie unter Identifizieren von Amazon S3 S3-Anfragen mit CloudTrail.

  • Je nachdem, wie viele Zugriffsanfragen Sie erhalten, erfordert die Analyse Ihrer Protokolle möglicherweise mehr Ressourcen oder Zeit als die Verwendung von CloudTrail Datenereignissen.

Abfragen von Zugriffsprotokollen für Anforderungen über Amazon Athena

Sie können Amazon-S3-Anforderungen mit Amazon-S3-Zugriffsprotokollen mithilfe von Amazon Athena identifizieren.

Amazon S3 speichert Server-Zugriffsprotokolle als Objekte in einem S3-Bucket. Es ist oft einfacher, ein Tool zu verwenden, mit dem die Protokolle in Amazon S3 analysiert werden können. Athena unterstützt die Analyse von S3-Objekten und kann zur Abfrage von Amazon-S3-Zugriffsprotokollen verwendet werden.

Beispiel

Das folgende Beispiel zeigt, wie Sie Amazon-S3-Server-Zugriffsprotokolle in Amazon Athena abfragen können. Ersetzen Sie die user input placeholders in den folgenden Beispielen durch eigene Daten.

Anmerkung

Zur Angabe eines Amazon-S3-Speicherorts in einer Athena-Abfrage müssen Sie einen S3-URI für den Ziel-Bucket bereitstellen, in dem Ihre Protokolle bereitgestellt werden. Dieser URI muss den Bucket-Namen und das Präfix im folgenden Format enthalten: s3://example-s3-bucket1-logs/prefix/

  1. Öffnen Sie die Athena-Konsole unter https://console.aws.amazon.com/athena/.

  2. Führen Sie im Abfrage-Editor einen Befehl wie den folgenden aus. Ersetzen Sie s3_access_logs_db durch den Namen, den Sie Ihrer Datenbank geben möchten.

    CREATE DATABASE s3_access_logs_db
    Anmerkung

    Es hat sich bewährt, die Datenbank in derselben Datenbank AWS-Region wie Ihren S3-Bucket zu erstellen.

  3. Führen Sie im Abfrage-Editor einen Befehl wie den folgenden aus, um in der in Schritt 2 erstellten Datenbank ein Tabellenschema zu erstellen. Ersetzen Sie s3_access_logs_db.mybucket_logs durch den Namen, den Sie Ihrer Tabelle geben möchten. Die Datentypwerte STRING und BIGINT sind die Zugriffsprotokolleigenschaften. Sie können diese Eigenschaften in Athena abfragen. Geben Sie für LOCATION wie oben erwähnt den Pfad von S3-Bucket und Präfix ein.

    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) 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://DOC-EXAMPLE-BUCKET1-logs/prefix/'
  4. Wählen Sie im Navigationsbereich unter Database (Datenbank) die Datenbank aus.

  5. Wählen Sie unter Tables (Tabellen)neben dem Namen der Tabelle Preview table (Tabellenvorschau) aus.

    Im Fensterbereich Results (Ergebnisse) sollten Daten aus den Server-Zugriffsprotokollen angezeigt werden, also bucketowner, bucket, requestdatetime usw. Dies bedeutet, dass die Athena-Tabelle erfolgreich erstellt wurde. Sie können jetzt die Amazon-S3-Server-Zugriffsprotokolle abfragen.

Beispiel – Anzeigen, wer ein Objekt um welche Uhrzeit (Zeitstempel, IP-Adresse und IAM-Benutzer) gelöscht hat
SELECT requestdatetime, remoteip, requester, key FROM s3_access_logs_db.mybucket_logs WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
Beispiel – Anzeigen aller Vorgänge, die von einem IAM-Benutzer ausgeführt wurden
SELECT * FROM s3_access_logs_db.mybucket_logs WHERE requester='arn:aws:iam::123456789123:user/user_name';
Beispiel – Anzeigen aller Vorgänge, die in einem bestimmten Zeitraum für ein Objekt ausgeführt wurden
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');
Beispiel – Anzeigen der Menge der in einem festgelegten Zeitraum an eine bestimmten IP-Adresse übertragenen Daten
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');
Anmerkung

Zur Reduzierung der Beibehaltungsdauer Ihrer Protokolle können Sie für Ihren Serverzugriffsprotokoll-Bucket eine S3-Lebenszykluskonfiguration erstellen. Erstellen Sie Lebenszykluskonfigurationsregeln, um Protokolldateien regelmäßig zu entfernen. Dadurch wird die Menge der Daten reduziert, die Athena in einer Abfrage analysiert. Weitere Informationen finden Sie unter Einstellung einer Lebenszykluskonfiguration für einen Bucket.

Identifizieren von Signature-Version-2-Anforderungen mittels Amazon-S3-Zugriffsprotokollen

Die Amazon-S3-Unterstützung für Signature Version 2 wird deaktiviert (veraltet). Danach akzeptiert Amazon S3 keine Anforderungen mit Signature Version 2 mehr, alle Anforderungen müssen also mit Signature Version 4 signiert werden. Sie können Signature-Version-2-Zugriffsanforderungen mittels Amazon-S3-Zugriffsprotokollen identifizieren.

Anmerkung

Um Signature Version 2-Anfragen zu identifizieren, empfehlen wir, AWS CloudTrail Datenereignisse anstelle von Amazon S3 S3-Serverzugriffsprotokollen zu verwenden. CloudTrail Datenereignisse sind einfacher einzurichten und enthalten mehr Informationen als Serverzugriffsprotokolle. Weitere Informationen finden Sie unter Identifizieren von Amazon S3 Signature Version 2-Anfragen mithilfe von CloudTrail.

Beispiel – Anzeigen aller Anforderer, die Signature Version 2-Datenverkehr senden
SELECT requester, sigv, Count(sigv) as sigcount FROM s3_access_logs_db.mybucket_logs GROUP BY requester, sigv;

Identifizieren von Objektzugriffsanforderungen mittels Amazon-S3-Zugriffsprotokollen

Sie können Abfragen an Amazon-S3-Server-Zugriffsprotokolle verwenden, um Amazon-S3-Objektzugriffsanforderungen für Vorgänge zu identifizieren, wie etwa GET, PUT und DELETE, und weitere Informationen über diese Anforderungen zu entdecken.

Das folgende Amazon-Athena-Abfragebeispiel zeigt, wie Sie alle PUT-Objektanforderungen für Amazon S3 aus einem Serverzugriffsprotokoll abrufen können.

Beispiel – Anzeigen aller Anforderer, die PUT-Objektanforderungen in einem bestimmten Zeitraum senden
SELECT bucket_name, 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')

Das folgende Amazon Athena-Abfragebeispiel zeigt, wie alle GET-Objektanfragen für Amazon S3 aus dem Server-Zugriffsprotokoll abgerufen werden.

Beispiel – Anzeigen aller Anforderer, die GET-Objektanforderungen in einem bestimmten Zeitraum senden
SELECT bucket_name, 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')

Das folgende Amazon Athena-Abfragebeispiel zeigt, wie alle anonymen Anforderungen aus dem Server-Zugriffsprotokoll in Ihre S3-Buckets gelangen.

Beispiel – Anzeigen aller anonymen Anforderer, die in einem bestimmten Zeitraum Anforderungen an einen Bucket richten
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')

Die folgende Amazon-Athena-Abfrage zeigt, wie alle Anforderungen für Ihre S3-Buckets identifiziert werden, für die eine Zugriffssteuerungsliste (ACL) zur Autorisierung erforderlich war. Sie können diese Informationen verwenden, um diese ACL-Berechtigungen zu den entsprechenden Bucket-Richtlinien zu migrieren und ACLs zu deaktivieren. Nachdem Sie diese Bucket-Richtlinien erstellt haben, können Sie ACLs für diese Buckets deaktivieren. Weitere Informationen über das Deaktivieren von ACLs finden Sie unter Voraussetzungen für die Deaktivierung von ACLs.

Beispiel – Identifizieren Sie alle Anforderungen, für die eine ACL zur Autorisierung erforderlich war
SELECT bucket_name, requester, key, operation, aclrequired, requestdatetime FROM s3_access_logs_db 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')
Anmerkung
  • Sie können den Datumsbereich nach Belieben an Ihre Anforderungen anpassen.

  • Diese Abfragebeispiele können auch für die Sicherheitsüberwachung nützlich sein. Sie können die Ergebnisse auf PutObject- oder GetObject-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 AWS CloudTrail Protokolle verwenden, finden Sie weitere Informationen unterIdentifizieren des Zugriffs auf S3-Objekte mithilfe von CloudTrail.