

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengidentifikasi permintaan Amazon S3 menggunakan CloudTrail
<a name="cloudtrail-request-identification"></a>

Di Amazon S3, Anda dapat mengidentifikasi permintaan menggunakan log AWS CloudTrail peristiwa. AWS CloudTrail adalah cara yang lebih disukai untuk mengidentifikasi permintaan Amazon S3, tetapi jika Anda menggunakan log akses server Amazon S3, lihat. [Menggunakan log akses server Amazon S3 untuk mengidentifikasi permintaan](using-s3-access-logs-to-identify-requests.md)

**Topics**
+ [Mengidentifikasi permintaan yang dibuat ke Amazon S3 dalam log CloudTrail](#identify-S3-requests-using-in-CTlog)
+ [Mengidentifikasi permintaan Amazon S3 Signature Version 2 dengan menggunakan CloudTrail](#cloudtrail-identification-sigv2-requests)
+ [Mengidentifikasi akses ke objek S3 dengan menggunakan CloudTrail](#cloudtrail-identification-object-access)

## Mengidentifikasi permintaan yang dibuat ke Amazon S3 dalam log CloudTrail
<a name="identify-S3-requests-using-in-CTlog"></a>

Setelah mengatur CloudTrail untuk mengirimkan acara ke bucket, Anda akan mulai melihat objek masuk ke bucket tujuan di konsol Amazon S3. Ini diformat sebagai berikut: 

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

Peristiwa yang dicatat oleh CloudTrail disimpan sebagai objek gzipped JSON terkompresi di bucket S3 Anda. Untuk menemukan permintaan secara efisien, Anda harus menggunakan layanan seperti Amazon Athena untuk mengindeks dan menanyakan log. CloudTrail 

*Untuk informasi selengkapnya tentang CloudTrail dan Athena, lihat [Membuat tabel untuk AWS CloudTrail log di Athena menggunakan proyeksi partisi di](https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html#create-cloudtrail-table-partition-projection) Panduan Pengguna Amazon Athena.*

## Mengidentifikasi permintaan Amazon S3 Signature Version 2 dengan menggunakan CloudTrail
<a name="cloudtrail-identification-sigv2-requests"></a>

Anda dapat menggunakan log CloudTrail peristiwa untuk mengidentifikasi versi tanda tangan API mana yang digunakan untuk menandatangani permintaan di Amazon S3. Kemampuan ini penting karena dukungan untuk Signature Version 2 akan dinonaktifkan (dihentikan). Setelah itu, Amazon S3 tidak akan menerima lagi permintaan yang menggunakan Signature Version 2, dan semua permintaan harus menggunakan penandatanganan *Signature Version 4*. 

Kami *sangat* menyarankan agar Anda menggunakannya CloudTrail untuk membantu menentukan apakah alur kerja Anda menggunakan penandatanganan Signature Version 2. Perbaiki dengan meningkatkan pustaka dan kode untuk menggunakan Signature Version 4 guna mencegah dampaknya pada bisnis Anda. 

Untuk informasi selengkapnya, lihat [Pengumuman: AWS CloudTrail untuk Amazon S3 menambahkan bidang baru untuk audit keamanan yang ditingkatkan](https://forums.aws.amazon.com/ann.jspa?annID=6551). AWS re:Post

**catatan**  
CloudTrail peristiwa untuk Amazon S3 menyertakan versi tanda tangan dalam detail permintaan dengan nama kunci '. `additionalEventData` Untuk menemukan versi tanda tangan pada permintaan yang dibuat untuk objek di Amazon S3 seperti`GET`,, dan `DELETE` permintaan`PUT`, Anda harus mengaktifkan peristiwa CloudTrail data. (Fitur ini dimatikan secara default.)

AWS CloudTrail adalah metode yang disukai untuk mengidentifikasi permintaan Signature Version 2. Jika Anda menggunakan pencatatan akses server Amazon S3, lihat [Mengidentifikasi permintaan Signature Version 2 menggunakan pencatatan akses Amazon S3](using-s3-access-logs-to-identify-requests.md#using-s3-access-logs-to-identify-sigv2-requests).

**Topics**
+ [Contoh kueri Athena untuk mengidentifikasi permintaan Tanda Tangan versi 2 Amazon S3](#ct-examples-identify-sigv2-requests)
+ [Mempartisikan data Signature Version 2](#partitioning-sigv2-data)

### Contoh kueri Athena untuk mengidentifikasi permintaan Tanda Tangan versi 2 Amazon S3
<a name="ct-examples-identify-sigv2-requests"></a>

**Example — Pilih semua peristiwa Signature Version 2, dan hanya cetak `EventTime`, `S3_Action`, `Request_Parameters`, `Region`, `SourceIP`, dan `UserAgent`**  
Pada kueri Athena berikut, ganti *`s3_cloudtrail_events_db.cloudtrail_table`* dengan detail Athena Anda, dan menambahkan atau menghapus batasnya sesuai dengan kebutuhan.   

```
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 — Pilih semua peminta yang mengirimkan lalu lintas 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
```

### Mempartisikan data Signature Version 2
<a name="partitioning-sigv2-data"></a>

Jika Anda memiliki data dalam jumlah large untuk kueri, Anda dapat meredam biaya dan runtime Athena dengan membuat tabel partisi. 

Untuk melakukannya, buat tabel baru dengan partisi sebagai berikut.

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

Lalu, buat partisi secara terpisah. Anda tidak bisa mendapatkan hasil dari tanggal yang belum Anda buat. 

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

Kemudian, Anda dapat membuat permintaan berdasarkan partisi ini, dan Anda tidak perlu memuat seluruh bucket. 

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

## Mengidentifikasi akses ke objek S3 dengan menggunakan CloudTrail
<a name="cloudtrail-identification-object-access"></a>

Anda dapat menggunakan log AWS CloudTrail peristiwa untuk mengidentifikasi permintaan akses objek Amazon S3 untuk peristiwa data seperti`GetObject`,, dan `DeleteObject``PutObject`, dan menemukan informasi tambahan tentang permintaan tersebut.

**catatan**  
Jika Anda mencatat aktivitas data dengan AWS CloudTrail, catatan peristiwa untuk peristiwa `DeleteObjects` data Amazon S3 mencakup peristiwa dan `DeleteObjects` `DeleteObject` peristiwa untuk setiap objek yang dihapus sebagai bagian dari operasi tersebut. Anda dapat mengecualikan visibilitas tambahan tentang objek yang dihapus dari catatan peristiwa. Untuk informasi selengkapnya, lihat [AWS CLI contoh untuk memfilter peristiwa data](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/filtering-data-events.html#filtering-data-events-deleteobjects) di *Panduan AWS CloudTrail Pengguna*.

Contoh berikut menunjukkan cara mendapatkan semua permintaan `PUT` objek untuk Amazon S3 dari log AWS CloudTrail peristiwa. 

**Topics**
+ [Contoh kueri Athena untuk mengidentifikasi permintaan akses objek Amazon S3](#ct-examples-identify-object-access-requests)

### Contoh kueri Athena untuk mengidentifikasi permintaan akses objek Amazon S3
<a name="ct-examples-identify-object-access-requests"></a>

Pada kueri Athena berikut, ganti *`s3_cloudtrail_events_db.cloudtrail_table`* dengan detail Athena Anda, dan modifikasi rentang tanggal sesuai kebutuhan. 

**Example — Pilih semua peristiwa yang memiliki permintaan akses `PUT` objek, dan hanya cetak `EventTime`, `EventSource`, `SourceIP`, `UserAgent`, `BucketName`, `object`, dan `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 — Pilih semua peristiwa yang memiliki permintaan akses objek `GET`, kemudian hanya cetak untuk `EventTime`, `EventSource`, `SourceIP`, `UserAgent`, `BucketName`, `object`, dan `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 — Pilih semua peristiwa pemohon anonim ke bucket dalam periode tertentu dan hanya cetak `EventTime`, `EventName`, `EventSource`, `SourceIP`, `UserAgent`, `BucketName`, `UserARN`, dan `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 — Identifikasi semua permintaan yang memerlukan ACL untuk otorisasi**  
 Contoh kueri Amazon Athena berikut menunjukkan cara mengidentifikasi semua permintaan ke bucket S3 Anda yang memerlukan daftar kontrol akses (ACL) untuk otorisasi. Jika permintaan memerlukan ACL untuk otorisasi, `aclRequired` nilai dalam `additionalEventData` adalah `Yes`. Jika ACLs tidak diperlukan, `aclRequired` tidak ada. Anda dapat menggunakan informasi ini untuk memigrasikan izin ACL tersebut ke kebijakan bucket yang sesuai. Setelah membuat kebijakan bucket ini, Anda dapat ACLs menonaktifkan bucket ini. Untuk informasi selengkapnya tentang menonaktifkan ACLs, lihat. [Prasyarat untuk menonaktifkan ACLs](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'
```

**catatan**  
Contoh kueri ini juga dapat berguna untuk pemantauan keamanan. Anda dapat meninjau hasil untuk panggilan `PutObject` atau `GetObject` dari alamat IP yang tidak terduga atau tidak sah atau pemohon, dan untuk mengidentifikasi permintaan anonim ke bucket Anda.
 Kueri ini hanya mengambil informasi dari waktu saat pencatatan log diaktifkan. 

Jika Anda menggunakan log akses server Amazon S3, lihat [Mengidentifikasi permintaan akses objek dengan menggunakan pencatatan akses Amazon S3](using-s3-access-logs-to-identify-requests.md#using-s3-access-logs-to-identify-objects-access).