Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Pustaka CloudTrail Pemrosesan
CloudTrail Processing Library adalah perpustakaan Java yang menyediakan cara mudah untuk memproses AWS CloudTrail log. Anda memberikan detail konfigurasi tentang CloudTrail SQS antrian Anda dan menulis kode untuk memproses peristiwa. Perpustakaan CloudTrail Pemrosesan melakukan sisanya. Ini polling SQS antrian Amazon Anda, membaca dan mengurai pesan antrian, mengunduh file CloudTrail log, mem-parsing peristiwa dalam file log, dan meneruskan peristiwa ke kode Anda sebagai objek Java.
Perpustakaan CloudTrail Pemrosesan sangat skalabel dan toleran terhadap kesalahan. Ini menangani pemrosesan paralel file log sehingga Anda dapat memproses log sebanyak yang diperlukan. Ini menangani kegagalan jaringan yang terkait dengan batas waktu jaringan dan sumber daya yang tidak dapat diakses.
Topik berikut menunjukkan cara menggunakan Pustaka CloudTrail Pemrosesan untuk memproses CloudTrail log di proyek Java Anda.
Perpustakaan disediakan sebagai proyek sumber terbuka berlisensi Apache, tersedia di:. GitHub https://github.com/aws/aws-cloudtrail-processing-library
Persyaratan minimum
Untuk menggunakan Pustaka CloudTrail Pemrosesan, Anda harus memiliki yang berikut:
Memproses CloudTrail log
Untuk memproses CloudTrail log di aplikasi Java Anda:
Menambahkan Perpustakaan CloudTrail Pemrosesan ke proyek Anda
Untuk menggunakan CloudTrail Processing Library, tambahkan ke classpath proyek Java Anda.
Daftar Isi
Menambahkan perpustakaan ke proyek Apache Ant
Untuk menambahkan Perpustakaan CloudTrail Pemrosesan ke proyek Apache Ant
-
Unduh atau kloning kode sumber Perpustakaan CloudTrail Pemrosesan dari GitHub:
-
Buat file.jar dari sumber seperti yang dijelaskan dalam README
: mvn clean install -Dgpg.skip=true
-
Salin file.jar yang dihasilkan ke proyek Anda dan tambahkan ke
build.xml
file proyek Anda. Sebagai contoh:<classpath> <pathelement path="${classpath}"/> <pathelement location="lib/aws-cloudtrail-processing-library-1.6.1.jar"/> </classpath>
Menambahkan perpustakaan ke proyek Apache Maven
Perpustakaan CloudTrail Pemrosesan tersedia untuk Apache Mavenpom.xml
file proyek Anda.
Untuk menambahkan Perpustakaan CloudTrail Pemrosesan ke proyek Maven
-
Buka
pom.xml
file proyek Maven Anda dan tambahkan dependensi berikut:<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-cloudtrail-processing-library</artifactId> <version>1.6.1</version> </dependency>
Menambahkan perpustakaan ke proyek Eclipse
Untuk menambahkan Perpustakaan CloudTrail Pemrosesan ke proyek Eclipse
-
Unduh atau kloning kode sumber Perpustakaan CloudTrail Pemrosesan dari GitHub:
-
Buat file.jar dari sumber seperti yang dijelaskan dalam README
: mvn clean install -Dgpg.skip=true
-
Salin aws-cloudtrail-processing-library -1.6.1.jar yang dibangun ke direktori di proyek Anda (biasanya).
lib
-
Klik kanan nama proyek Anda di Eclipse Project Explorer, pilih Build Path, lalu pilih Configure
-
Di jendela Java Build Path, pilih tab Libraries.
-
Pilih TambahJARs... dan arahkan ke jalur tempat Anda menyalin aws-cloudtrail-processing-library -1.6.1.jar.
-
Pilih OK untuk menyelesaikan penambahan
.jar
ke proyek Anda.
Menambahkan pustaka ke proyek IntelliJ
Untuk menambahkan Pustaka CloudTrail Pemrosesan ke proyek IntelliJ
-
Unduh atau kloning kode sumber Perpustakaan CloudTrail Pemrosesan dari GitHub:
-
Buat file.jar dari sumber seperti yang dijelaskan dalam README
: mvn clean install -Dgpg.skip=true
-
Dari File, pilih Project Structure.
-
Pilih Modul dan kemudian pilih Dependensi.
-
Pilih + JARS atau Direktori dan kemudian pergi ke jalur di mana Anda membangun.
aws-cloudtrail-processing-library-1.6.1.jar
-
Pilih Terapkan dan kemudian pilih OK untuk menyelesaikan penambahan
.jar
ke proyek Anda.
Mengkonfigurasi Pustaka CloudTrail Pemrosesan
Anda dapat mengonfigurasi Pustaka CloudTrail Pemrosesan dengan membuat file properti classpath yang dimuat saat runtime, atau dengan membuat ClientConfiguration
objek dan opsi pengaturan secara manual.
Menyediakan file properti
Anda dapat menulis file properti classpath yang menyediakan opsi konfigurasi untuk aplikasi Anda. File contoh berikut menunjukkan opsi yang dapat Anda atur:
# AWS access key. (Required) accessKey = your_access_key # AWS secret key. (Required) secretKey = your_secret_key # The SQS URL used to pull CloudTrail notification from. (Required) sqsUrl = your_sqs_queue_url # The SQS end point specific to a region. sqsRegion = us-east-1 # A period of time during which Amazon SQS prevents other consuming components # from receiving and processing that message. visibilityTimeout = 60 # The S3 region to use. s3Region = us-east-1 # Number of threads used to download S3 files in parallel. Callbacks can be # invoked from any thread. threadCount = 1 # The time allowed, in seconds, for threads to shut down after # AWSCloudTrailEventProcessingExecutor.stop() is called. If they are still # running beyond this time, they will be forcibly terminated. threadTerminationDelaySeconds = 60 # The maximum number of AWSCloudTrailClientEvents sent to a single invocation # of processEvents(). maxEventsPerEmit = 10 # Whether to include raw event information in CloudTrailDeliveryInfo. enableRawEventInfo = false # Whether to delete SQS message when the CloudTrail Processing Library is unable to process the notification. deleteMessageUponFailure = false
Parameter-parameter berikut diperlukan:
-
sqsUrl
— Menyediakan URL dari mana untuk menarik CloudTrail notifikasi Anda. Jika Anda tidak menentukan nilai ini,AWSCloudTrailProcessingExecutor
melemparIllegalStateException
. -
accessKey
— Pengenal unik untuk akun Anda, sepertiAKIAIOSFODNN7EXAMPLE. -
secretKey
— Pengenal unik untuk akun Anda, seperti wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.
secretKey
Parameter accessKey
dan menyediakan AWS
kredensi ke perpustakaan sehingga perpustakaan dapat mengakses AWS atas nama Anda.
Default untuk parameter lain diatur oleh perpustakaan. Untuk informasi lebih lanjut, lihat AWS CloudTrail Referensi Perpustakaan Pemrosesan.
Menciptakan ClientConfiguration
Alih-alih mengatur opsi di properti classpath, Anda dapat memberikan opsi ke AWSCloudTrailProcessingExecutor
dengan menginisialisasi dan menyetel opsi pada ClientConfiguration
objek, seperti yang ditunjukkan pada contoh berikut:
ClientConfiguration basicConfig = new ClientConfiguration( "http://sqs.us-east-1.amazonaws.com/123456789012/queue2", new DefaultAWSCredentialsProviderChain()); basicConfig.setEnableRawEventInfo(true); basicConfig.setThreadCount(4); basicConfig.setnEventsPerEmit(20);
Menerapkan prosesor acara
Untuk memproses CloudTrail log, Anda harus menerapkan EventsProcessor
yang menerima data CloudTrail log. Berikut ini adalah contoh implementasi:
public class SampleEventsProcessor implements EventsProcessor { public void process(List<CloudTrailEvent> events) { int i = 0; for (CloudTrailEvent event : events) { System.out.println(String.format("Process event %d : %s", i++, event.getEventData())); } } }
Saat menerapkanEventsProcessor
, Anda menerapkan process()
callback yang AWSCloudTrailProcessingExecutor
digunakan untuk mengirimi Anda CloudTrail peristiwa. Acara disediakan dalam daftar CloudTrailClientEvent
objek.
CloudTrailClientEvent
Objek menyediakan CloudTrailEvent
dan CloudTrailEventMetadata
yang dapat Anda gunakan untuk membaca CloudTrail acara dan informasi pengiriman.
Contoh sederhana ini mencetak informasi acara untuk setiap acara yang diteruskan keSampleEventsProcessor
. Dalam implementasi Anda sendiri, Anda dapat memproses log sesuai keinginan Anda. AWSCloudTrailProcessingExecutor
Terus mengirim acara ke Anda EventsProcessor
selama ada acara untuk dikirim dan masih berjalan.
Membuat instantiasi dan menjalankan pelaksana pemrosesan
Setelah Anda menulis EventsProcessor
dan menetapkan nilai konfigurasi untuk Pustaka CloudTrail Pemrosesan (baik dalam file properti atau dengan menggunakan ClientConfiguration
kelas), Anda dapat menggunakan elemen-elemen ini untuk menginisialisasi dan menggunakan fileAWSCloudTrailProcessingExecutor
.
Untuk digunakan AWSCloudTrailProcessingExecutor
untuk memproses CloudTrail acara
-
Instantiate sebuah objek.
AWSCloudTrailProcessingExecutor.Builder
Builder
konstruktor mengambilEventsProcessor
objek dan nama file properti classpath. -
Panggil metode
build()
pabrik untuk mengkonfigurasi dan mendapatkanAWSCloudTrailProcessingExecutor
objek.Builder
-
Gunakan
AWSCloudTrailProcessingExecutor
'sstart()
danstop()
metode untuk memulai dan mengakhiri pemrosesan CloudTrail acara.
public class SampleApp { public static void main(String[] args) throws InterruptedException { AWSCloudTrailProcessingExecutor executor = new AWSCloudTrailProcessingExecutor.Builder(new SampleEventsProcessor(), "/myproject/cloudtrailprocessing.properties").build(); executor.start(); Thread.sleep(24 * 60 * 60 * 1000); // let it run for a while (optional) executor.stop(); // optional } }
Topik lanjutan
Memfilter acara untuk diproses
Secara default, semua log di bucket S3 SQS antrian Amazon Anda dan semua peristiwa yang dikandungnya dikirim ke Anda. EventsProcessor
Perpustakaan CloudTrail Pemrosesan menyediakan antarmuka opsional yang dapat Anda terapkan untuk memfilter sumber yang digunakan untuk mendapatkan CloudTrail log dan untuk memfilter peristiwa yang Anda minati untuk diproses.
SourceFilter
-
Anda dapat menerapkan
SourceFilter
antarmuka untuk memilih apakah Anda ingin memproses log dari sumber yang disediakan.SourceFilter
mendeklarasikan metode callback tunggal,filterSource()
, yang menerima objek.CloudTrailSource
Untuk menjaga agar acara dari sumber tidak diproses, kembalilahfalse
darifilterSource()
.Pustaka CloudTrail Pemrosesan memanggil
filterSource()
metode setelah pustaka melakukan polling untuk log di SQS antrean Amazon. Ini terjadi sebelum pustaka memulai pemfilteran peristiwa atau pemrosesan untuk log.Berikut ini adalah contoh implementasi:
public class SampleSourceFilter implements SourceFilter{ private static final int MAX_RECEIVED_COUNT = 3; private static List<String> accountIDs ; static { accountIDs = new ArrayList<>(); accountIDs.add("123456789012"); accountIDs.add("234567890123"); } @Override public boolean filterSource(CloudTrailSource source) throws CallbackException { source = (SQSBasedSource) source; Map<String, String> sourceAttributes = source.getSourceAttributes(); String accountId = sourceAttributes.get( SourceAttributeKeys.ACCOUNT_ID.getAttributeKey()); String receivedCount = sourceAttributes.get( SourceAttributeKeys.APPROXIMATE_RECEIVE_COUNT.getAttributeKey()); int approximateReceivedCount = Integer.parseInt(receivedCount); return approximateReceivedCount <= MAX_RECEIVED_COUNT && accountIDs.contains(accountId); } }
Jika Anda tidak menyediakan sendiri
SourceFilter
, makaDefaultSourceFilter
digunakan, yang memungkinkan semua sumber diproses (selalu kembalitrue
). EventFilter
-
Anda dapat menerapkan
EventFilter
antarmuka untuk memilih apakah suatu CloudTrail acara dikirim ke AndaEventsProcessor
.EventFilter
mendeklarasikan metode callback tunggal,filterEvent()
, yang menerima objek.CloudTrailEvent
Agar acara tidak diproses, kembalilahfalse
darifilterEvent()
.Pustaka CloudTrail Pemrosesan memanggil
filterEvent()
metode setelah pustaka melakukan polling untuk log di SQS antrian Amazon dan setelah pemfilteran sumber. Ini terjadi sebelum pustaka memulai pemrosesan peristiwa untuk log.Lihat contoh implementasi berikut:
public class SampleEventFilter implements EventFilter{ private static final String EC2_EVENTS = "ec2.amazonaws.com"; @Override public boolean filterEvent(CloudTrailClientEvent clientEvent) throws CallbackException { CloudTrailEvent event = clientEvent.getEvent(); String eventSource = event.getEventSource(); String eventName = event.getEventName(); return eventSource.equals(EC2_EVENTS) && eventName.startsWith("Delete"); } }
Jika Anda tidak menyediakan milik Anda sendiri
EventFilter
, makaDefaultEventFilter
digunakan, yang memungkinkan semua acara diproses (selalu kembalitrue
).
Memproses peristiwa data
Ketika CloudTrail memproses peristiwa data, ia mempertahankan angka dalam format aslinya, apakah itu integer (int
) atau float
(angka yang berisi desimal). Dalam peristiwa yang memiliki bilangan bulat di bidang peristiwa data, CloudTrail secara historis memproses angka-angka ini sebagai pelampung. Saat ini, CloudTrail memproses angka di bidang ini dengan mempertahankan format aslinya.
Sebagai praktik terbaik, untuk menghindari kerusakan otomatisasi Anda, bersikaplah fleksibel dalam kode atau otomatisasi apa pun yang Anda gunakan untuk memproses atau memfilter peristiwa CloudTrail data, dan izinkan keduanya int
dan angka yang float
diformat. Untuk hasil terbaik, gunakan Pustaka CloudTrail Pemrosesan versi 1.4.0 atau lebih tinggi.
Contoh cuplikan berikut menunjukkan nomor float
diformat,2.0
, untuk desiredCount
parameter di ResponseParameters
blok peristiwa data.
"eventName": "CreateService", "awsRegion": "us-east-1", "sourceIPAddress": "000.00.00.00", "userAgent": "console.amazonaws.com", "requestParameters": { "clientToken": "EXAMPLE", "cluster": "default", "desiredCount": 2.0 ...
Contoh cuplikan berikut menunjukkan nomor int
diformat,2
, untuk desiredCount
parameter di ResponseParameters
blok peristiwa data.
"eventName": "CreateService", "awsRegion": "us-east-1", "sourceIPAddress": "000.00.00.00", "userAgent": "console.amazonaws.com", "requestParameters": { "clientToken": "EXAMPLE", "cluster": "default", "desiredCount": 2 ...
Melaporkan kemajuan
Menerapkan ProgressReporter
antarmuka untuk menyesuaikan pelaporan kemajuan Perpustakaan CloudTrail Pemrosesan. ProgressReporter
menyatakan dua metode: reportStart()
danreportEnd()
, yang disebut di awal dan akhir operasi berikut:
-
Pesan polling dari Amazon SQS
-
Mengurai pesan dari Amazon SQS
-
Memproses SQS sumber Amazon untuk CloudTrail log
-
Menghapus pesan dari Amazon SQS
-
Mengunduh file CloudTrail log
-
Memproses file CloudTrail log
Kedua metode menerima ProgressStatus
objek yang berisi informasi tentang operasi yang dilakukan. progressState
Anggota memegang anggota ProgressState
enumerasi yang mengidentifikasi operasi saat ini. Anggota ini dapat berisi informasi tambahan dalam progressInfo
anggota. Selain itu, objek apa pun yang Anda kembalikan reportStart()
diteruskan kereportEnd()
, sehingga Anda dapat memberikan informasi kontekstual seperti waktu ketika acara mulai diproses.
Berikut ini adalah contoh implementasi yang memberikan informasi tentang berapa lama operasi selesai:
public class SampleProgressReporter implements ProgressReporter { private static final Log logger = LogFactory.getLog(DefaultProgressReporter.class); @Override public Object reportStart(ProgressStatus status) { return new Date(); } @Override public void reportEnd(ProgressStatus status, Object startDate) { System.out.println(status.getProgressState().toString() + " is " + status.getProgressInfo().isSuccess() + " , and latency is " + Math.abs(((Date) startDate).getTime()-new Date().getTime()) + " milliseconds."); } }
Jika Anda tidak mengimplementasikan milik Anda sendiri ProgressReporter
DefaultExceptionHandler
, maka, yang mencetak nama status yang sedang dijalankan, digunakan sebagai gantinya.
Menangani kesalahan
ExceptionHandler
Antarmuka memungkinkan Anda untuk memberikan penanganan khusus ketika pengecualian terjadi selama pemrosesan log. ExceptionHandler
mendeklarasikan metode callback tunggalhandleException()
,, yang menerima ProcessingLibraryException
objek dengan konteks tentang pengecualian yang terjadi.
Anda dapat menggunakan getStatus()
metode ProcessingLibraryException
passed-in untuk mengetahui operasi apa yang dijalankan ketika pengecualian terjadi dan mendapatkan informasi tambahan tentang status operasi. ProcessingLibraryException
berasal dari Exception
kelas standar Java, sehingga Anda juga dapat mengambil informasi tentang pengecualian dengan menggunakan salah satu metode pengecualian.
Lihat contoh implementasi berikut:
public class SampleExceptionHandler implements ExceptionHandler{ private static final Log logger = LogFactory.getLog(DefaultProgressReporter.class); @Override public void handleException(ProcessingLibraryException exception) { ProgressStatus status = exception.getStatus(); ProgressState state = status.getProgressState(); ProgressInfo info = status.getProgressInfo(); System.err.println(String.format( "Exception. Progress State: %s. Progress Information: %s.", state, info)); } }
Jika Anda tidak menyediakan sendiriExceptionHandler
, makaDefaultExceptionHandler
, yang mencetak pesan kesalahan standar, digunakan sebagai gantinya.
catatan
Jika deleteMessageUponFailure
parameternyatrue
, Pustaka CloudTrail Pemrosesan tidak membedakan pengecualian umum dari kesalahan pemrosesan dan dapat menghapus pesan antrian.
-
Misalnya, Anda menggunakan
SourceFilter
untuk memfilter pesan berdasarkan stempel waktu. -
Namun, Anda tidak memiliki izin yang diperlukan untuk mengakses bucket S3 yang menerima file CloudTrail log. Karena Anda tidak memiliki izin yang diperlukan, sebuah
AmazonServiceException
dilemparkan. Perpustakaan CloudTrail Pemrosesan membungkus ini dalam a.CallBackException
-
DefaultExceptionHandler
Mencatat ini sebagai kesalahan, tetapi tidak mengidentifikasi akar penyebabnya, yaitu Anda tidak memiliki izin yang diperlukan. Pustaka CloudTrail Pemrosesan menganggap ini sebagai kesalahan pemrosesan dan menghapus pesan, meskipun pesan tersebut menyertakan file CloudTrail log yang valid.
Jika Anda ingin memfilter pesanSourceFilter
, verifikasi bahwa Anda ExceptionHandler
dapat membedakan pengecualian layanan dari kesalahan pemrosesan.
Sumber daya tambahan
Untuk informasi selengkapnya tentang Pustaka CloudTrail Pemrosesan, lihat berikut ini:
-
CloudTrail Processing Library
GitHub project, yang mencakup contoh kode yang menunjukkan bagaimana menerapkan aplikasi CloudTrail Processing Library. -
CloudTrail Memproses Perpustakaan Java Package Documentation.