View a markdown version of this page

Menggunakan log akses server Amazon S3 untuk mengidentifikasi permintaan - Amazon Simple Storage Service

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

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.

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

Melakukan kueri pencatatan akses untuk permintaan dengan menggunakan Amazon Athena

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.

contoh

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.

catatan

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

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

  3. 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/'
  4. Dalam panel navigasi, pada Basis Data, pilih basis data Anda.

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

contoh— 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%';
contoh— 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';
contoh— 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');
contoh— 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');
contoh— Temukan ID permintaan 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'

Mengidentifikasi permintaan Signature Version 2

Anda dapat menggunakan log akses server untuk mengidentifikasi permintaan Signature Version 2. Untuk detail tentang menanyakan log dengan Amazon Athena, lihat bagian kueri Athena di bawah. Mengirimkan log ke bucket tujuan umum Amazon S3

Mengidentifikasi permintaan akses objek

Anda dapat menggunakan log akses server untuk mengidentifikasi pola akses objek. Untuk detail tentang menanyakan log dengan Amazon Athena, lihat bagian kueri Athena di bawah. Mengirimkan log ke bucket tujuan umum Amazon S3