View a markdown version of this page

Utilisation des journaux d’accès au serveur Amazon S3 pour identifier des demandes - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation des journaux d’accès au serveur Amazon S3 pour identifier des demandes

Vous pouvez identifier des demandes Amazon S3 à l’aide des journaux d’accès au serveur Amazon S3.

Note
  • Pour identifier les demandes Amazon S3, nous vous recommandons d'utiliser AWS CloudTrail des événements de données plutôt que des journaux d'accès au serveur Amazon S3. CloudTrail les événements de données sont plus faciles à configurer et contiennent davantage d'informations. Pour de plus amples informations, veuillez consulter Identifier les demandes Amazon S3 à l'aide de CloudTrail.

  • Selon le nombre de demandes d'accès que vous recevez, l'analyse de vos journaux peut nécessiter plus de ressources ou de temps que l'utilisation d'événements de CloudTrail données.

Interrogation des journaux d’accès pour les demandes à l’aide d’Amazon Athena

Vous pouvez identifier les demandes Amazon S3 à l’aide des journaux d’accès Amazon S3 en utilisant Amazon Athena.

Amazon S3 stocke les journaux d’accès au serveur en tant qu’objets dans un compartiment S3. Il est souvent plus facile d’utiliser un outil capable d’analyser les journaux dans Amazon S3. Athena prend en charge l’analyse des objets S3 et ne peut pas être utilisé pour interroger les journaux d’accès Amazon S3.

Exemple

L’exemple suivant montre comment vous pouvez interroger les journaux d’accès au serveur Amazon S3 dans Amazon Athena. Remplacez les user input placeholders utilisés dans les exemples suivants par vos propres informations.

Note

Pour spécifier un emplacement Amazon S3 dans une requête Athena, vous devez fournir un URI S3 pour le compartiment où vos journaux sont livrés. Cet URI doit inclure le nom et le préfixe du compartiment au format suivant : s3://amzn-s3-demo-bucket1-logs/prefix/

  1. Ouvrez la console à l'adresse https://console.aws.amazon.com/athena/.

  2. Dans l’Éditeur de requête, exécutez une commande similaire à ce qui suit. Remplacez s3_access_logs_db par le nom que vous souhaitez donner à votre base de données.

    CREATE DATABASE s3_access_logs_db
    Note

    Il est recommandé de créer la base de données au même endroit Région AWS que votre compartiment S3.

  3. Dans l’Éditeur de requête, exécutez une commande semblable à ce qui suit pour créer un schéma de table dans la base de données que vous avez créée à l’étape 2. Remplacez s3_access_logs_db.mybucket_logs par le nom que vous souhaitez donner à votre table. Les valeurs de type de données STRING et BIGINT sont les propriétés des journaux d’accès. Vous pouvez interroger ces propriétés dans Athena. Pour LOCATION, saisissez le compartiment S3 et le préfixe du chemin comme notés précédemment.

    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/'
  4. Dans le volet de navigation, sous Database (Base de données), choisissez votre base de données.

  5. Sous Tables, choisissez Aperçu de la table en regard du nom de votre table.

    Dans le volet Results (Résultats), vous devriez voir apparaître les données des journaux d’accès au serveur, par exemple bucketowner, bucket, requestdatetime, etc. Ceci signifie que vous avez correctement créé la table Athena. Vous pouvez désormais interroger les journaux d’accès au serveur Amazon S3.

Exemple– Afficher qui a supprimé un objet et quand (horodatage, adresse IP et utilisateur IAM)
SELECT requestdatetime, remoteip, requester, key FROM s3_access_logs_db.mybucket_logs WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
Exemple– Afficher toutes les opérations effectuées par un utilisateur IAM
SELECT * FROM s3_access_logs_db.mybucket_logs WHERE requester='arn:aws:iam::123456789123:user/user_name';
Exemple– Afficher toutes les opérations effectuées sur un objet au cours d’une période spécifique
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');
Exemple : afficher la quantité de données transférées vers une adresse IP donnée au cours d’une période
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');
Exemple : rechercher les ID de demandes pour les erreurs HTTP 5xx au cours d’une période spécifique
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'

Identification des demandes de signature (version 2)

Vous pouvez utiliser les journaux d'accès au serveur pour identifier les demandes Signature version 2. Pour en savoir plus sur l'interrogation des journaux avec Amazon Athena, consultez la section relative aux requêtes Athena ci-dessous. Transmission de journaux vers un compartiment à usage général Amazon S3

Identification des demandes d'accès aux objets

Vous pouvez utiliser les journaux d'accès au serveur pour identifier les modèles d'accès aux objets. Pour en savoir plus sur l'interrogation des journaux avec Amazon Athena, consultez la section relative aux requêtes Athena ci-dessous. Transmission de journaux vers un compartiment à usage général Amazon S3