Я использую библиотеку обработки AWS CloudTrail для извлечения журналов Cloudtrail из AWS. На снимке экрана истории событий ниже (сделанном из веб-консоли CloudTrail) имя корзины, затронутой изменением, отражено в столбце: Resource name
. Как я могу получить это же значение, используя функцию aws-cloudtrail-processing-library
. Библиотека возвращает имя корзины, в которой CloudTrail сохраняет файлы журналов, а не затронутой корзины (выделено). Также, даже после загрузки логов из ведра, я не вижу этой информации.
Вот фрагмент моего класса обработки:
public class AuditorCloudTrail {
public static void main(String[] args) throws InterruptedException {
final Log logger = LogFactory.getLog(AuditorCloudTrail.class);
final AWSCloudTrailProcessingExecutor executor = new AWSCloudTrailProcessingExecutor.Builder(
new AuditorEventsProcessor(), new AuditorCloudTrailConfig()).withSourceFilter(new AuditorSourceFilter())
.withProgressReporter(new AuditorProgressReporter()).withEventFilter(new AuditorEventsFilter())
.withExceptionHandler(new AuditorExceptionHandler()).build();
executor.start();
// add shut down hook to gracefully stop executor (optional)
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
logger.info("Shut Down Hook is called.");
executor.stop();
}
});
// register a Default Uncaught Exception Handler (optional)
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
// Two options here:
// First, we can call System.exit(1); in such case shut down hook will be
// called.
// Second, we can optionally restart another executor and start.
final AWSCloudTrailProcessingExecutor executor = new AWSCloudTrailProcessingExecutor.Builder(
new AuditorEventsProcessor(), new AuditorCloudTrailConfig()).withSourceFilter(new AuditorSourceFilter())
.withEventFilter(new AuditorEventsFilter())
.withProgressReporter(new AuditorProgressReporter())
.withExceptionHandler(new AuditorExceptionHandler()).build();
executor.start();
}
});
// can optionally limit running time, or remove both lines so it is running
// forever. (optional)
Thread.sleep(24 * 60 * 60 * 1000);
executor.stop();
}
и метод фильтрации событий:
public boolean filterEvent(CloudTrailEvent event) throws CallbackException {
CloudTrailEventData eventData = event.getEventData();
String eventSource = eventData.getEventSource();
try {
saveEvent(eventData);
} catch (InterruptedException e) {
e.printStackTrace();
}
return (eventSource.equals(IAM_EVENTS) ||
eventSource.equals(S3_EVENTS));
}