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
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
Topik
Mengidentifikasi permintaan yang dibuat ke Amazon S3 dalam log CloudTrail
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 terkompresi, gzipped JSONobjek di ember 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 Panduan Pengguna Amazon Athena.
Mengidentifikasi permintaan Amazon S3 Signature Version 2 dengan menggunakan CloudTrail
Anda dapat menggunakan log CloudTrail peristiwa untuk mengidentifikasi versi API tanda tangan 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
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 sepertiGET
,, dan DELETE
permintaanPUT
, 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.
Topik
Contoh kueri Athena untuk mengidentifikasi permintaan Tanda Tangan versi 2 Amazon S3
contoh — Pilih semua peristiwa Signature Version 2, dan hanya cetak EventTime
, S3_Action
, Request_Parameters
, Region
, SourceIP
, dan UserAgent
Pada kueri Athena berikut, ganti
dengan detail Athena Anda, dan tingkatkan atau hapus batas sesuai kebutuhan. s3_cloudtrail_events_db.cloudtrail_table
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;
contoh — 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
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
Anda dapat menggunakan log AWS CloudTrail peristiwa untuk mengidentifikasi permintaan akses objek Amazon S3 untuk peristiwa data sepertiGetObject
,, dan DeleteObject
PutObject
, dan menemukan informasi tambahan tentang permintaan tersebut.
Contoh berikut menunjukkan cara mendapatkan semua permintaan PUT
objek untuk Amazon S3 dari log AWS CloudTrail peristiwa.
Contoh kueri Athena untuk mengidentifikasi permintaan akses objek Amazon S3
Dalam contoh kueri Athena berikut, ganti
dengan detail Athena Anda, dan memodifikasi rentang tanggal sesuai kebutuhan. s3_cloudtrail_events_db.cloudtrail_table
contoh — 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
'
contoh — 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
'
contoh — 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
'
contoh — Identifikasi semua permintaan yang ACL memerlukan 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 otorisasi, aclRequired
nilainya additionalEventData
adalahYes
. Jika ACLs tidak diperlukan, aclRequired
tidak ada. Anda dapat menggunakan informasi ini untuk memigrasikan ACL izin tersebut ke kebijakan bucket yang sesuai. Setelah membuat kebijakan bucket ini, Anda dapat ACLs menonaktifkan bucket ini. Untuk informasi selengkapnya tentang menonaktifkanACLs, lihat. Prasyarat untuk menonaktifkan ACLs
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
atauGetObject
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.