

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 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 [Identification des demandes 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 de CloudTrail 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 à l’aide des journaux d’accès Amazon S3](#using-s3-access-logs-to-identify-sigv2-requests)
+ [Identification des demandes d’accès aux objets à l’aide des journaux d’accès Amazon S3](#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 au même endroit 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 — Trouve IDs les requêtes contenant des erreurs HTTP 5xx sur une période donnée**  

```
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'
```

**Note**  
Pour réduire le temps de conservation de vos journaux, vous pouvez créer une configuration de cycle de vie S3 pour votre compartiment de journaux d’accès au serveur. Créez des règles de configuration de cycle de vie pour supprimer régulièrement les fichiers journaux. Cela permet de réduire la quantité de données analysées par Athena pour chaque requête. Pour plus d’informations, consultez [Définition d’une configuration du cycle de vie S3 sur un compartiment](how-to-set-lifecycle-configuration-intro.md).

## Identification des demandes Signature Version 2 à l’aide des journaux d’accès Amazon S3
<a name="using-s3-access-logs-to-identify-sigv2-requests"></a>

La prise en charge d’Amazon S3 pour Signature Version 2 sera désactivée (obsolète). Après cela, Amazon S3 n’acceptera plus les demandes utilisant Signature Version 2, et toutes les demandes devront utiliser le processus de signature *Signature Version 4*. Vous pouvez identifier les demandes d’accès avec Signature Version 2 en utilisant les journaux d’accès Amazon S3. 

**Note**  
Pour identifier les demandes Signature version 2, 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 plus d'informations que les journaux d'accès au serveur. Pour de plus amples informations, veuillez consulter [Identification des demandes Amazon S3 Signature version 2 à l'aide de CloudTrail](cloudtrail-request-identification.md#cloudtrail-identification-sigv2-requests).

**Example – Afficher tous les demandeurs qui envoient du trafic Signature Version 2**  

```
SELECT requester, sigv, Count(sigv) as sigcount 
FROM s3_access_logs_db.mybucket_logs
GROUP BY requester, sigv;
```

## Identification des demandes d’accès aux objets à l’aide des journaux d’accès Amazon S3
<a name="using-s3-access-logs-to-identify-objects-access"></a>

Vous pouvez utiliser des requêtes sur les journaux d’accès au serveur Amazon S3 pour identifier les demandes d’accès aux objets Amazon S3, pour des opérations telles que `GET`, `PUT` et `DELETE`, et découvrir plus d’informations sur ces demandes.

L’exemple de requête Amazon Athena suivant montre comment obtenir toutes les demandes d’objet `PUT` pour Amazon S3 à partir d’un journal d’accès au serveur. 

**Example — afficher tous les demandeurs qui envoient des demandes d’objets `PUT` au cours d’une période donnée**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_logs
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')
```

L’exemple de requête Amazon Athena suivant montre comment obtenir toutes les demandes d’objet `GET` pour Amazon S3 à partir du journal d’accès au serveur. 

**Example — afficher tous les demandeurs qui envoient des demandes d'objets `GET` au cours d'une période donnée**  

```
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime
FROM s3_access_logs_db.mybucket_logs
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')
```

L’exemple de requête Amazon Athena suivant montre comment obtenir toutes les demandes anonymes vers vos compartiments S3 à partir du journal d’accès du serveur. 

**Example — afficher tous les demandeurs anonymes qui adressent des demandes à un compartiment au cours d’une période donnée**  

```
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')
```

La requête Amazon Athena suivante montre comment identifier toutes les requêtes adressées à vos compartiments S3 qui ont nécessité une liste de contrôle d’accès (ACL) pour l’autorisation. Vous pouvez utiliser ces informations pour migrer ces autorisations ACL vers les politiques de compartiment appropriées et les désactiver ACLs. Après avoir créé ces politiques de compartiment, vous pouvez les désactiver ACLs pour ces compartiments. Pour plus d'informations sur la désactivation ACLs, consultez[Conditions préalables à la désactivation ACLs](object-ownership-migrating-acls-prerequisites.md). 

**Example — identifiez toutes les demandes qui ont nécessité un ACL pour l'autorisation.**  

```
SELECT bucket_name, requester, key, operation, aclrequired, requestdatetime
FROM s3_access_logs_db.mybucket_logs
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')
```

**Note**  
Vous pouvez modifier la plage de dates en fonction de vos besoins.
Ces exemples de requêtes peuvent aussi s’avérer utiles pour surveiller la sécurité. Vous pouvez vérifier les résultats pour les appels `PutObject` ou `GetObject` depuis des adresses IP ou des demandeurs inattendus ou non autorisés et pour identifier les demandes anonymes adressées à vos compartiments.
Cette requête ne récupère d’informations qu’à partir du moment où l’enregistrement a été activé. 
Si vous utilisez AWS CloudTrail des journaux, consultez[Identification de l'accès aux objets S3 en utilisant CloudTrail](cloudtrail-request-identification.md#cloudtrail-identification-object-access). 