Menggunakan Pustaka CloudTrail Pemrosesan - AWS CloudTrail

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 antrian CloudTrail SQS Anda dan menulis kode untuk memproses peristiwa. Perpustakaan CloudTrail Pemrosesan melakukan sisanya. Ini polling antrian Amazon SQS Anda, membaca dan mengurai pesan antrian, CloudTrail mengunduh file 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 Sumber pustaka menyertakan kode contoh yang dapat Anda gunakan sebagai basis untuk proyek Anda sendiri.

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.

Menambahkan perpustakaan ke proyek Apache Ant

Untuk menambahkan Perpustakaan CloudTrail Pemrosesan ke proyek Apache Ant
  1. Unduh atau kloning kode sumber Perpustakaan CloudTrail Pemrosesan dari GitHub:

  2. Buat file.jar dari sumber seperti yang dijelaskan dalam README:

    mvn clean install -Dgpg.skip=true
  3. Salin file.jar yang dihasilkan ke proyek Anda dan tambahkan ke build.xml file proyek Anda. Misalnya:

    <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 Maven. Anda dapat menambahkannya ke proyek Anda dengan menulis dependensi tunggal dalam pom.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
  1. Unduh atau kloning kode sumber Perpustakaan CloudTrail Pemrosesan dari GitHub:

  2. Buat file.jar dari sumber seperti yang dijelaskan dalam README:

    mvn clean install -Dgpg.skip=true
  3. Salin aws-cloudtrail-processing-library -1.6.1.jar yang dibangun ke direktori di proyek Anda (biasanya). lib

  4. Klik kanan nama proyek Anda di Eclipse Project Explorer, pilih Build Path, lalu pilih Configure

  5. Di jendela Java Build Path, pilih tab Libraries.

  6. Pilih Tambahkan JAR... dan arahkan ke jalur tempat Anda menyalin aws-cloudtrail-processing-library -1.6.1.jar.

  7. Pilih OK untuk menyelesaikan penambahan .jar ke proyek Anda.

Menambahkan pustaka ke proyek IntelliJ

Untuk menambahkan Pustaka CloudTrail Pemrosesan ke proyek IntelliJ
  1. Unduh atau kloning kode sumber Perpustakaan CloudTrail Pemrosesan dari GitHub:

  2. Buat file.jar dari sumber seperti yang dijelaskan dalam README:

    mvn clean install -Dgpg.skip=true
  3. Dari File, pilih Project Structure.

  4. Pilih Modul dan kemudian pilih Dependensi.

  5. Pilih + JARS atau Direktori dan kemudian pergi ke jalur di mana Anda membangun. aws-cloudtrail-processing-library-1.6.1.jar

  6. 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 untuk menarik CloudTrail notifikasi Anda. Jika Anda tidak menentukan nilai ini, AWSCloudTrailProcessingExecutor melemparIllegalStateException.

  • accessKey— Pengidentifikasi unik untuk akun Anda, seperti AKIAIOSFODNN7EXAMPLE.

  • secretKey— Pengidentifikasi unik untuk akun Anda, seperti bPxRfi wjalrxutnfemi/k7mdeng/CYEXAMPLEKEY.

secretKeyParameter accessKey dan menyediakan AWS kredensyal Anda ke perpustakaan sehingga perpustakaan dapat mengakses AWS atas nama Anda.

Default untuk parameter lain diatur oleh perpustakaan. Untuk informasi selengkapnya, lihat Referensi Perpustakaan AWS CloudTrail 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.

CloudTrailClientEventObjek 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. AWSCloudTrailProcessingExecutorTerus mengirim acara ke Anda EventsProcessor selama ada acara untuk dikirim dan masih berjalan.

Membuat instantiasi dan menjalankan pelaksana pemrosesan

Setelah Anda menulis EventsProcessor dan mengatur 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
  1. Instantiate sebuah objek. AWSCloudTrailProcessingExecutor.Builder Builderkonstruktor mengambil EventsProcessor objek dan nama file properti classpath.

  2. Panggil metode build() pabrik untuk mengkonfigurasi dan mendapatkan AWSCloudTrailProcessingExecutor objek. Builder

  3. Gunakan AWSCloudTrailProcessingExecutor's start() dan stop() 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 antrean Amazon SQS 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. SourceFiltermendeklarasikan metode callback tunggal,filterSource(), yang menerima objek. CloudTrailSource Untuk menjaga agar acara dari sumber tidak diproses, kembalilah false darifilterSource().

Pustaka CloudTrail Pemrosesan memanggil filterSource() metode setelah library melakukan polling untuk log pada antrean Amazon SQS. 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 sendiriSourceFilter, maka DefaultSourceFilter digunakan, yang memungkinkan semua sumber diproses (selalu kembalitrue).

EventFilter

Anda dapat menerapkan EventFilter antarmuka untuk memilih apakah suatu CloudTrail peristiwa dikirim ke AndaEventsProcessor. EventFiltermendeklarasikan metode callback tunggal,filterEvent(), yang menerima objek. CloudTrailEvent Agar acara tidak diproses, kembalilah false darifilterEvent().

Pustaka CloudTrail Pemrosesan memanggil filterEvent() metode setelah pustaka melakukan polling untuk log pada antrean Amazon SQS 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 sendiriEventFilter, maka DefaultEventFilter 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. ProgressReportermenyatakan dua metode: reportStart() danreportEnd(), yang disebut di awal dan akhir operasi berikut:

  • Pesan polling dari Amazon SQS

  • Mengurai pesan dari Amazon SQS

  • Memproses sumber Amazon SQS untuk log CloudTrail

  • 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. progressStateAnggota 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 ProgressReporterDefaultExceptionHandler, maka, yang mencetak nama status yang sedang dijalankan, digunakan sebagai gantinya.

Menangani kesalahan

ExceptionHandlerAntarmuka memungkinkan Anda untuk memberikan penanganan khusus ketika pengecualian terjadi selama pemrosesan log. ExceptionHandlermendeklarasikan 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. ProcessingLibraryExceptionberasal 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.

  1. Misalnya, Anda menggunakan SourceFilter untuk memfilter pesan berdasarkan stempel waktu.

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

  3. DefaultExceptionHandlerMencatat 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: