

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
<a name="using-s3-access-logs-to-identify-requests"></a>

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 les événements de AWS CloudTrail données au lieu des journaux d'accès au serveur Amazon S3. CloudTrail les événements de données sont plus faciles à configurer et contiennent plus d'informations. Pour de plus amples informations, veuillez consulter [Identification des requêtes Amazon S3 à l'aide CloudTrail](cloudtrail-request-identification.md).
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 CloudTrail liés aux données.

**Topics**
+ [Interrogation des journaux d’accès pour les demandes à l’aide d’Amazon Athena](#querying-s3-access-logs-for-requests)
+ [Identification des demandes Signature Version 2](#using-s3-access-logs-to-identify-sigv2-requests)
+ [Identifier les demandes d'accès aux objets](#using-s3-access-logs-to-identify-objects-access)

## Interrogation des journaux d’accès pour les demandes à l’aide d’Amazon Athena
<a name="querying-s3-access-logs-for-requests"></a>

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.

**Example**  
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.  
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/](https://console.aws.amazon.com/athena/home).

1. 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 dans le même compartiment Région AWS que votre compartiment S3. 

1. 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/}}'
   ```

------

1. Dans le volet de navigation, sous **Database (Base de données)**, choisissez votre base de données.

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

**Example – 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%';
```

**Example – 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}}';
```

**Example – 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');
```

**Example  : 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');
```

**Example  : 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 Signature Version 2
<a name="using-s3-access-logs-to-identify-sigv2-requests"></a>

Vous pouvez utiliser les journaux d'accès au serveur pour identifier les demandes Signature Version 2. Pour plus d'informations sur les requêtes dans les journaux avec Amazon Athena, consultez la section sur les requêtes Athena ci-dessous. [Livraison de journaux vers un compartiment à usage général Amazon S3](sal-gp-section.md)

## Identifier les demandes d'accès aux objets
<a name="using-s3-access-logs-to-identify-objects-access"></a>

Vous pouvez utiliser les journaux d'accès au serveur pour identifier les modèles d'accès aux objets. Pour plus d'informations sur les requêtes dans les journaux avec Amazon Athena, consultez la section sur les requêtes Athena ci-dessous. [Livraison de journaux vers un compartiment à usage général Amazon S3](sal-gp-section.md)