Mengidentifikasi permintaan Amazon S3 menggunakan CloudTrail - Amazon Simple Storage Service

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

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 Anda di konsol Amazon S3. Ini diformat sebagai berikut:

s3://DOC-EXAMPLE-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 Panduan Pengguna Amazon Athena.

Mengidentifikasi permintaan Amazon S3 Signature Version 2 dengan menggunakan CloudTrail

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

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 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;
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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/CloudTrail/us-east-1/2019/02/19/' PARTITION (region= 'us-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/CloudTrail/us-west-1/2019/02/19/' PARTITION (region= 'us-west-2', year= '2019', month= '02', day= '19') LOCATION 's3://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/CloudTrail/us-west-2/2019/02/19/' PARTITION (region= 'ap-southeast-1', year= '2019', month= '02', day= '19') LOCATION 's3://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/CloudTrail/ap-southeast-1/2019/02/19/' PARTITION (region= 'ap-southeast-2', year= '2019', month= '02', day= '19') LOCATION 's3://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/CloudTrail/ap-southeast-2/2019/02/19/' PARTITION (region= 'ap-northeast-1', year= '2019', month= '02', day= '19') LOCATION 's3://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/CloudTrail/ap-northeast-1/2019/02/19/' PARTITION (region= 'eu-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://DOC-EXAMPLE-BUCKET1/AWSLogs/111122223333/CloudTrail/eu-west-1/2019/02/19/' PARTITION (region= 'sa-east-1', year= '2019', month= '02', day= '19') LOCATION 's3://DOC-EXAMPLE-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 DeleteObjectPutObject, 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

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

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 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 tidak ada ACL yang diperlukan, aclRequired tidak akan ada. Anda dapat menggunakan informasi ini untuk memigrasikan izin ACL tersebut ke kebijakan bucket yang sesuai. Setelah membuat kebijakan bucket ini, Anda dapat menonaktifkan ACL untuk bucket ini. Untuk informasi selengkapnya tentang menonaktifkan ACL, lihat Prasyarat untuk menonaktifkan ACL.

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.