

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.

# Identification des requêtes Amazon S3 à l'aide CloudTrail
<a name="cloudtrail-request-identification"></a>

Dans Amazon S3, vous pouvez identifier les demandes à l'aide d'un journal des AWS CloudTrail événements. AWS CloudTrail est la méthode préférée pour identifier les requêtes Amazon S3, mais si vous utilisez les journaux d'accès au serveur Amazon S3, consultez[Utilisation des journaux d’accès au serveur Amazon S3 pour identifier des demandes](using-s3-access-logs-to-identify-requests.md).

**Topics**
+ [Identification des demandes adressées à Amazon S3 dans un CloudTrail journal](#identify-S3-requests-using-in-CTlog)
+ [Identification des demandes Amazon S3 Signature Version 2 à l'aide de CloudTrail](#cloudtrail-identification-sigv2-requests)
+ [Identification de l'accès aux objets S3 à l'aide de CloudTrail](#cloudtrail-identification-object-access)

## Identification des demandes adressées à Amazon S3 dans un CloudTrail journal
<a name="identify-S3-requests-using-in-CTlog"></a>

Une fois que vous avez configuré CloudTrail la diffusion d'événements dans un compartiment, vous devriez commencer à voir les objets être acheminés vers votre compartiment de destination sur la console Amazon S3. Ils se présentent dans le format suivant : 

`s3://{{amzn-s3-demo-bucket1}}/AWSLogs/{{111122223333}}/CloudTrail/{{Region}}/{{yyyy}}/{{mm}}/{{dd}}` 

Les événements enregistrés par CloudTrail sont stockés sous forme d'objets gzipped JSON compressés dans votre compartiment S3. Pour trouver efficacement les demandes, vous devez utiliser un service tel qu'Amazon Athena pour indexer et interroger les CloudTrail journaux. 

Pour plus d'informations sur CloudTrail et Athena, consultez [ Création de la table pour les AWS CloudTrail journaux dans Athena à l'aide de la projection de partition ](https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html#create-cloudtrail-table-partition-projection) dans le guide de l'utilisateur * Amazon Athena. *

## Identification des demandes Amazon S3 Signature Version 2 à l'aide de CloudTrail
<a name="cloudtrail-identification-sigv2-requests"></a>

Vous pouvez utiliser un journal des CloudTrail événements pour identifier la version de signature d'API utilisée pour signer une demande dans Amazon S3. Cette fonctionnalité est importante étant donné que la prise en charge de Signature Version 2 va être 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*. 

Nous vous * recommandons * vivement de l'utiliser CloudTrail pour déterminer si l'un de vos flux de travail utilise la signature Signature Version 2. Pour y remédier, mettez à niveau vos bibliothèques et votre code afin qu’ils utilisent plutôt Signature Version 4 afin d’éviter tout impact sur votre entreprise. 

Pour plus d'informations, consultez [ Annonce : AWS CloudTrail car Amazon S3 ajoute de nouveaux champs pour un audit de sécurité amélioré ](https://forums.aws.amazon.com/ann.jspa?annID=6551) dans AWS re:Post.

**Note**  
CloudTrail les événements pour Amazon S3 incluent la version de la signature dans les détails de la demande sous le nom de clé «`additionalEventData`. Pour trouver la version de signature des demandes effectuées pour des objets dans Amazon S3`GET`, tels que`PUT`, et les `DELETE` requêtes, vous devez activer CloudTrail les événements de données. (Cette fonction est désactivée par défaut).

AWS CloudTrail est la méthode préférée pour identifier les demandes Signature Version 2. Si vous utilisez les journaux d’accès au serveur Amazon S3, consultez [Identification des demandes Signature Version 2](using-s3-access-logs-to-identify-requests.md#using-s3-access-logs-to-identify-sigv2-requests).

**Topics**
+ [Exemples de requête Athena pour l’identification de demandes Amazon S3 Signature Version 2](#ct-examples-identify-sigv2-requests)
+ [Partitionnement des données Signature Version 2](#partitioning-sigv2-data)

### Exemples de requête Athena pour l’identification de demandes Amazon S3 Signature Version 2
<a name="ct-examples-identify-sigv2-requests"></a>

**Example — Sélectionnez tous les événements Signature Version 2 et imprimez uniquement, `S3_Action EventTime,, Region Request_Parameters`, SourceIP et `` `UserAgent`**  
Dans la requête Athena suivante, remplacez {{`s3_cloudtrail_events_db.cloudtrail_table`}} par vos coordonnées Athena, et augmentez ou supprimez la limite selon les besoins.   

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

**Example – Sélectionner tous les demandeurs qui envoient du trafic Signature Version 2**  
   

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

### Partitionnement des données Signature Version 2
<a name="partitioning-sigv2-data"></a>

Si vous devez interroger un large volume de données, vous pouvez réduire les coûts et l’exécution d’Athena en créant une table partitionnée. 

Pour ce faire, créez une nouvelle table avec des partitions, comme suit.

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

Ensuite, créez les partitions individuellement. Vous ne pouvez pas obtenir des résultats à partir de dates que vous n’avez pas créées. 

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

Vous pouvez ensuite effectuer la demande en fonction de ces partitions. Vous n’avez pas besoin de charger le compartiment entier. 

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

## Identification de l'accès aux objets S3 à l'aide de CloudTrail
<a name="cloudtrail-identification-object-access"></a>

Vous pouvez utiliser vos journaux d' AWS CloudTrail événements pour identifier les demandes d'accès aux objets Amazon S3 pour des événements de données tels que `GetObject``DeleteObject`, et`PutObject`, et découvrir des informations supplémentaires sur ces demandes.

**Note**  
Si vous enregistrez l'activité des données avec AWS CloudTrail, l'enregistrement d'événement pour un événement de `DeleteObjects` données Amazon S3 inclut à la fois l'`DeleteObjects`événement et un `DeleteObject` événement pour chaque objet supprimé dans le cadre de cette opération. Vous pouvez exclure les informations des objets supprimés de l’enregistrement de l’événement. Pour plus d’informations, consultez [Exemples de filtre des événements de données à l’aide de l’AWS CLI](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/filtering-data-events.html#filtering-data-events-deleteobjects) dans le *Guide de l’utilisateur AWS CloudTrail *.

L'exemple suivant montre comment récupérer toutes les demandes `PUT` d'objets pour Amazon S3 à partir d'un journal des AWS CloudTrail événements. 

**Topics**
+ [Exemples de requêtes Athena pour identifier les demandes d’accès aux objets Amazon S3](#ct-examples-identify-object-access-requests)

### Exemples de requêtes Athena pour identifier les demandes d’accès aux objets Amazon S3
<a name="ct-examples-identify-object-access-requests"></a>

Dans les exemples de requêtes Athena suivants, remplacez {{`s3_cloudtrail_events_db.cloudtrail_table`}} par vos coordonnées Athena et modifiez la plage de dates si nécessaire. 

**Example — Sélectionnez tous les événements qui comportent des demandes d'accès aux `objets` PUT, et imprimez uniquement `EventTime` `EventSource`, `SourceIP`, `UserAgent` `BucketName``,` object et `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}}'
```

**Example — Sélectionnez tous les événements qui comportent des demandes d'accès aux `objets` GET, et imprimez uniquement `EventTime` `EventSource`, `SourceIP`, `UserAgent` `BucketName``,` object et `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}}'
```

**Example — Sélectionnez tous les événements du demandeur anonyme dans un compartiment au cours d'une certaine période et imprimez uniquement `EventTime`,,, `SourceIP EventName EventSource,` `UserAgent` `BucketName`, `UserArn et 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}}'
```

**Example — identifiez toutes les demandes qui ont nécessité un ACL pour l’autorisation.**  
 L’exemple de requête Amazon Athena suivant montre comment identifier toutes les requêtes de vos compartiments S3 qui ont nécessité une liste de contrôle d’accès (ACL) pour l’autorisation. Si la requête a nécessité une ACL pour l’autorisation, la valeur `aclRequired` dans `additionalEventData` est `Yes`. Si aucune ACL n’a été requise, la valeur `aclRequired` est absente. Vous pouvez utiliser ces informations pour migrer ces autorisations ACL vers les stratégies de compartiment appropriées. Après avoir créé ces politiques de compartiment, vous pouvez désactiver les ACL pour ces compartiments. Pour plus d’informations sur la désactivation des ACL, consultez [Conditions préalables à la désactivation des listes ACL](object-ownership-migrating-acls-prerequisites.md).  

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

**Note**  
Ces exemples de requêtes sont également 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 les journaux d’accès au serveur Amazon S3, consultez [Identifier les demandes d'accès aux objets](using-s3-access-logs-to-identify-requests.md#using-s3-access-logs-to-identify-objects-access).