

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

# Menggunakan log akses server Amazon S3 untuk mengidentifikasi permintaan
<a name="using-s3-access-logs-to-identify-requests"></a>

Anda dapat mengidentifikasi permintaan Amazon S3 dengan pencatatan akses server Amazon S3. 

**catatan**  
Untuk mengidentifikasi permintaan Amazon S3, sebaiknya gunakan peristiwa AWS CloudTrail data alih-alih log akses server Amazon S3. CloudTrail peristiwa data lebih mudah diatur dan berisi lebih banyak informasi. Untuk informasi selengkapnya, lihat [Mengidentifikasi permintaan Amazon S3 menggunakan CloudTrail](cloudtrail-request-identification.md).
Bergantung pada berapa banyak permintaan akses yang Anda dapatkan, menganalisis log Anda mungkin memerlukan lebih banyak sumber daya atau waktu daripada menggunakan peristiwa CloudTrail data.

**Topics**
+ [Melakukan kueri pencatatan akses untuk permintaan dengan menggunakan Amazon Athena](#querying-s3-access-logs-for-requests)
+ [Mengidentifikasi permintaan Signature Version 2 menggunakan pencatatan akses Amazon S3](#using-s3-access-logs-to-identify-sigv2-requests)
+ [Mengidentifikasi permintaan akses objek dengan menggunakan pencatatan akses Amazon S3](#using-s3-access-logs-to-identify-objects-access)

## Melakukan kueri pencatatan akses untuk permintaan dengan menggunakan Amazon Athena
<a name="querying-s3-access-logs-for-requests"></a>

Anda dapat mengidentifikasi permintaan Amazon S3 dengan log akses Amazon S3 menggunakan Amazon Athena. 

Amazon S3 menyimpan log akses server sebagai objek dalam bucket S3. Sering kali lebih mudah menggunakan alat yang dapat menganalisis log di Amazon S3. Athena mendukung analisis S3 Object dan dapat digunakan untuk mencari log akses Amazon S3.

**Example**  
Contoh berikut menunjukkan bagaimana Anda dapat melakukan kueri log akses server Amazon S3 di Amazon Athena. Ganti yang `user input placeholders` digunakan dalam contoh berikut dengan informasi Anda sendiri.  
Untuk menentukan lokasi Amazon S3 dalam kueri Athena, Anda harus memberikan URI S3 untuk bucket tempat log Anda dikirimkan. URI ini harus menyertakan nama bucket dan prefiks dalam format berikut: `s3://amzn-s3-demo-bucket1-logs/prefix/` 

1. Buka konsol Athena di [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home).

1. Dalam Editor Kueri, jalankan perintah yang mirip dengan berikut ini. Ganti `s3_access_logs_db` dengan nama yang ingin Anda berikan ke basis data Anda. 

   ```
   CREATE DATABASE s3_access_logs_db
   ```
**catatan**  
Ini adalah praktik terbaik untuk membuat database yang Wilayah AWS sama dengan bucket S3 Anda. 

1. Dalam Query Editor, jalankan perintah yang mirip dengan perintah berikut untuk membuat skema tabel di basis data yang Anda buat di langkah 2. Ganti `s3_access_logs_db.mybucket_logs` dengan nama yang ingin Anda berikan ke meja Anda. Nilai jenis data `STRING` dan `BIGINT` adalah properti log akses. Anda dapat mencari properti ini di Athena. Untuk `LOCATION`, masukkan bucket S3 dan jalur prefiks seperti yang disebutkan sebelumnya.

------
#### [ 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. Dalam panel navigasi, pada **Basis Data**, pilih basis data Anda.

1. Pada **Tabel**, pilih **Tabel pratinjau** di sebelah nama tabel Anda.

   Di panel **Hasil**, Anda akan melihat data dari log akses server, seperti `bucketowner`, `bucket`, `requestdatetime`, dan sebagainya. Ini berarti Anda berhasil membuat tabel Athena. Sekarang Anda dapat mengkueri log akses server Amazon S3.

**Example — Menunjukkan siapa yang menghapus objek dan kapan (tanda waktu, alamat IP, dan pengguna IAM)**  

```
SELECT requestdatetime, remoteip, requester, key 
FROM s3_access_logs_db.mybucket_logs 
WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
```

**Example — Menunjukkan semua operasi yang dilakukan oleh pengguna IAM**  

```
SELECT * 
FROM s3_access_logs_db.mybucket_logs 
WHERE requester='arn:aws:iam::123456789123:user/user_name';
```

**Example — Menunjukkan semua operasi yang dilakukan pada objek dalam periode waktu tertentu**  

```
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 — Menunjukkan berapa banyak data yang dipindahkan ke alamat IP tertentu dalam periode waktu tertentu**  

```
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 — Temukan permintaan IDs untuk kesalahan HTTP 5xx dalam periode waktu tertentu**  

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

**catatan**  
Untuk mengurangi waktu dalam mempertahankan pencatatan, Anda dapat membuat konfigurasi Siklus Hidup S3 untuk bucket pencatatan akses server Anda. Buat aturan konfigurasi siklus aktif untuk menghapus file log secara berkala. Hal ini mengurangi jumlah data yang dianalisis oleh Athena untuk setiap kueri. Untuk informasi selengkapnya, lihat [Menyetel konfigurasi Siklus Hidup S3 pada bucket](how-to-set-lifecycle-configuration-intro.md).

## Mengidentifikasi permintaan Signature Version 2 menggunakan pencatatan akses Amazon S3
<a name="using-s3-access-logs-to-identify-sigv2-requests"></a>

Dukungan Amazon S3 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. Anda dapat mengidentifikasi permintaan akses Signature Version 2 menggunakan log akses Amazon S3. 

**catatan**  
Untuk mengidentifikasi permintaan Signature Version 2, sebaiknya gunakan peristiwa AWS CloudTrail data, bukan log akses server Amazon S3. CloudTrail peristiwa data lebih mudah diatur dan berisi lebih banyak informasi daripada log akses server. Untuk informasi selengkapnya, lihat [Mengidentifikasi permintaan Amazon S3 Signature Version 2 dengan menggunakan CloudTrail](cloudtrail-request-identification.md#cloudtrail-identification-sigv2-requests).

**Example — Menunjukkan semua peminta yang mengirimkan lalu lintas Signature Version 2**  

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

## Mengidentifikasi permintaan akses objek dengan menggunakan pencatatan akses Amazon S3
<a name="using-s3-access-logs-to-identify-objects-access"></a>

Anda dapat menggunakan kueri di log akses server Amazon S3 untuk mengidentifikasi permintaan akses objek Amazon S3, untuk operasi seperti `GET`, `PUT`, dan `DELETE`, lalu menemukan informasi lebih lanjut tentang permintaan tersebut.

Contoh kueri Amazon Athena berikut menunjukkan cara mendapatkan semua permintaan objek `PUT` untuk Amazon S3 dari log akses server. 

**Example — Menunjukkan semua peminta yang mengirimkan permintaan objek `PUT` dalam periode tertentu**  

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

Contoh kueri Amazon Athena berikut menunjukkan cara mendapatkan semua permintaan objek `GET` untuk Amazon S3 dari log akses server. 

**Example — Menunjukkan semua peminta yang mengirimkan permintaan objek `GET` dalam periode tertentu**  

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

Contoh kueri Amazon Athena berikut menunjukkan cara mendapatkan semua permintaan anonim ke bucket S3 Anda dari log akses server. 

**Example — Menunjukkan semua pemohon anonim yang membuat permintaan ke bucket selama periode tertentu**  

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

Kueri Amazon Athena berikut menunjukkan cara mengidentifikasi semua permintaan ke bucket S3 Anda yang memerlukan daftar kontrol akses (ACL) untuk otorisasi. Anda dapat menggunakan informasi ini untuk memigrasikan izin ACL tersebut ke kebijakan bucket yang sesuai dan menonaktifkannya. ACLs 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) 

**Example — Identifikasi semua permintaan yang memerlukan ACL untuk otorisasi**  

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

**catatan**  
Anda dapat mengubah rentang tanggal sesuai kebutuhan.
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 AWS CloudTrail log, lihat[Mengidentifikasi akses ke objek S3 dengan menggunakan CloudTrail](cloudtrail-request-identification.md#cloudtrail-identification-object-access). 