Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo della libreria CloudTrail di elaborazione
La CloudTrail Processing Library è una libreria Java che fornisce un modo semplice per elaborare AWS CloudTrail i log. Fornisci dettagli di configurazione sulla CloudTrail SQS coda e scrivi codice per elaborare gli eventi. La CloudTrail Processing Library fa il resto. Esamina la tua SQS coda Amazon, legge e analizza i messaggi in coda, scarica i file di CloudTrail registro, analizza gli eventi nei file di registro e passa gli eventi al tuo codice come oggetti Java.
La CloudTrail Processing Library è altamente scalabile e tollerante ai guasti. Gestisce l'elaborazione parallela dei file di log in modo da consentirti di elaborare qualsiasi numero di log in base alle tue specifiche esigenze. Gestisce inoltre gli errori di rete correlati a timeout di rete e risorse non accessibili.
L'argomento seguente mostra come utilizzare la CloudTrail Processing Library per elaborare i CloudTrail log nei progetti Java.
La libreria viene fornita come progetto open source con licenza Apache, disponibile su:. GitHub https://github.com/aws/aws-cloudtrail-processing-library
Requisiti minimi
Per utilizzare la CloudTrail Processing Library, è necessario disporre di quanto segue:
Registri di elaborazione CloudTrail
Per elaborare CloudTrail i log nell'applicazione Java:
Aggiungere la CloudTrail Processing Library al progetto
Per utilizzare la CloudTrail Processing Library, aggiungila al classpath del tuo progetto Java.
Indice
Aggiunta della libreria a un progetto Apache Ant
Per aggiungere la CloudTrail Processing Library a un progetto Apache Ant
-
Scarica o clona il codice sorgente della CloudTrail Processing Library da: GitHub
-
Crea il file.jar dal codice sorgente come descritto in: README
mvn clean install -Dgpg.skip=true
-
Copiare il file con estensione .jar risultante nel progetto e aggiungerlo al file
build.xml
del progetto. Per esempio:<classpath> <pathelement path="${classpath}"/> <pathelement location="lib/aws-cloudtrail-processing-library-1.6.1.jar"/> </classpath>
Aggiunta della libreria a un progetto Apache Maven
La CloudTrail Processing Library è disponibile per Apache Mavenpom.xml
del progetto.
Per aggiungere la CloudTrail Processing Library a un progetto Maven
-
Aprire il file
pom.xml
del progetto Maven e aggiungere la seguente dipendenza:<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-cloudtrail-processing-library</artifactId> <version>1.6.1</version> </dependency>
Aggiunta della libreria a un progetto Eclipse
Per aggiungere la CloudTrail Processing Library a un progetto Eclipse
-
Scarica o clona il codice sorgente della CloudTrail Processing Library da: GitHub
-
Crea il file.jar dal codice sorgente come descritto in: README
mvn clean install -Dgpg.skip=true
-
Copia il aws-cloudtrail-processing-library -1.6.1.jar creato in una directory del tuo progetto (in genere).
lib
-
Fare clic con il pulsante destro del mouse sul nome del progetto nella finestra Project Explorer (Explorer progetti) di Eclipse, scegliere Build Path (Percorso di compilazione) e quindi scegliere Configure (Configura).
-
Nella finestra Java Build Path (Percorso di compilazione Java) scegliere la scheda Libraries (Librerie).
-
Scegli Aggiungi... JARs e vai al percorso in cui hai copiato aws-cloudtrail-processing-library -1.6.1.jar.
-
Scegliere OK per completare l'aggiunta del file
.jar
al progetto.
Aggiunta della libreria a un progetto IntelliJ
Per aggiungere la CloudTrail Processing Library a un progetto IntelliJ
-
Scarica o clona il codice sorgente della CloudTrail Processing Library da: GitHub
-
Crea il file.jar dal codice sorgente come descritto in: README
mvn clean install -Dgpg.skip=true
-
In File, scegliere Project Structure (Struttura progetto).
-
Scegliere Modules (Moduli), quindi Dependencies (Dipendenze).
-
Scegli + JARS o Directories e poi vai al percorso in cui hai creato il.
aws-cloudtrail-processing-library-1.6.1.jar
-
Scegliere Apply (Applica) e quindi OK per completare l'aggiunta del file
.jar
al progetto.
Configurazione della libreria di elaborazione CloudTrail
È possibile configurare la CloudTrail Processing Library creando un file delle proprietà del percorso di classe che viene caricato in fase di esecuzione oppure creando un ClientConfiguration
oggetto e impostando le opzioni manualmente.
Specificare un file delle proprietà
Puoi scrivere un file delle proprietà del classpath per specificare le opzioni di configurazione da passare all'applicazione. Il file di esempio seguente mostra le opzioni che è possibile impostare:
# 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
I parametri seguenti sono obbligatori:
-
sqsUrl
— Fornisce la fonte URL da cui estrarre le CloudTrail notifiche. Se non specifichi questo valore,AWSCloudTrailProcessingExecutor
restituisce un'eccezioneIllegalStateException
. -
accessKey
— Un identificatore univoco per il tuo account, ad esempioAKIAIOSFODNN7EXAMPLE. -
secretKey
— Un identificatore univoco per il tuo account, ad esempio wJalr XUtnFEMI MDENG /K7/. bPxRfi CYEXAMPLEKEY
I secretKey
parametri accessKey
and forniscono AWS
le credenziali dell'utente alla libreria, in modo che quest'ultima possa accedervi AWS per conto dell'utente.
Le impostazioni di default per gli altri parametri vengono definite dalla libreria. Per ulteriori informazioni, consulta Documentazione di riferimento della libreria di elaborazione AWS CloudTrail.
Creare un ClientConfiguration
Anziché impostare le opzioni nelle proprietà del classpath, puoi specificare le opzioni per AWSCloudTrailProcessingExecutor
mediante l'inizializzazione e l'impostazione delle opzioni in un oggetto ClientConfiguration
, come illustrato nel seguente esempio:
ClientConfiguration basicConfig = new ClientConfiguration( "http://sqs.us-east-1.amazonaws.com/123456789012/queue2", new DefaultAWSCredentialsProviderChain()); basicConfig.setEnableRawEventInfo(true); basicConfig.setThreadCount(4); basicConfig.setnEventsPerEmit(20);
Implementazione del processore di eventi
Per elaborare CloudTrail i registri, è necessario implementare un file EventsProcessor
che riceva i dati di CloudTrail registro. Di seguito è riportato un esempio di implementazione:
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())); } } }
Quando si implementa unEventsProcessor
, si implementa il process()
callback che AWSCloudTrailProcessingExecutor
utilizza per inviarti CloudTrail eventi. Gli eventi vengono forniti in un elenco di oggetti CloudTrailClientEvent
.
L'CloudTrailClientEvent
oggetto fornisce un CloudTrailEvent
e CloudTrailEventMetadata
che è possibile utilizzare per leggere le informazioni sull' CloudTrail evento e sulla consegna.
Questo semplice esempio stampa le informazioni sugli eventi per ogni evento passato a SampleEventsProcessor
. Nell'ambito dell'implementazione in questione puoi elaborare i log in base alle specifiche esigenze di lavoro. L'oggetto AWSCloudTrailProcessingExecutor
continua a inviare gli eventi all'oggetto EventsProcessor
a condizione che disponga di eventi da inviare e che sia ancora in esecuzione.
Creazione di un'istanza ed esecuzione dell'executor di elaborazione
Dopo aver scritto EventsProcessor
e impostato i valori di configurazione per la CloudTrail Processing Library (in un file di proprietà o utilizzando la ClientConfiguration
classe), potete utilizzare questi elementi per inizializzare e utilizzare unAWSCloudTrailProcessingExecutor
.
Da utilizzare AWSCloudTrailProcessingExecutor
per elaborare eventi CloudTrail
-
Creare un'istanza di un oggetto
AWSCloudTrailProcessingExecutor.Builder
. Il costruttore diBuilder
richiede un oggettoEventsProcessor
e un nome di file delle proprietà del classpath. -
Chiamare il metodo factory
build()
diBuilder
per configurare e recuperare un oggettoAWSCloudTrailProcessingExecutor
. -
Usa i
AWSCloudTrailProcessingExecutor
stop()
metodistart()
e per iniziare e terminare CloudTrail l'elaborazione degli eventi.
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 } }
Argomenti avanzati
Argomenti
Filtro degli eventi da elaborare
Per impostazione predefinita, tutti i log nel bucket S3 di Amazon SQS Queue e tutti gli eventi in essi contenuti vengono inviati al tuo. EventsProcessor
La CloudTrail Processing Library fornisce interfacce opzionali che puoi implementare per filtrare le fonti utilizzate per ottenere CloudTrail i log e filtrare gli eventi che ti interessa elaborare.
SourceFilter
-
Puoi implementare l'interfaccia
SourceFilter
per scegliere se elaborare i log provenienti dall'origine specificata.SourceFilter
dichiara un singolo metodo di callback,filterSource()
, che riceve un oggettoCloudTrailSource
. Per evitare che gli eventi provenienti da un'origine vengano elaborati, impostare la restituzione difalse
dafilterSource()
.La CloudTrail Processing Library chiama il
filterSource()
metodo dopo che la libreria ha richiesto i log sulla coda AmazonSQS. Ciò si verifica prima che la libreria inizi il filtraggio degli eventi o l'elaborazione dei log.Di seguito è riportato un esempio di implementazione:
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); } }
Se non specifichi l'interfaccia
SourceFilter
, viene utilizzatoDefaultSourceFilter
, che permette l'elaborazione di tutte le origini (restituirà sempretrue
). EventFilter
-
Puoi implementare l'
EventFilter
interfaccia per scegliere se inviare un CloudTrail evento al tuo.EventsProcessor
EventFilter
dichiara un singolo metodo di callbackfilterEvent()
, che riceve unCloudTrailEvent
oggetto. Per evitare che l'evento venga elaborato, impostare la restituzione difalse
dafilterEvent()
.La CloudTrail Processing Library chiama il
filterEvent()
metodo dopo che la libreria ha interrogato i log sulla SQS coda di Amazon e dopo il filtraggio dei sorgenti. Ciò si verifica prima che la libreria inizi l'elaborazione dei log.Di seguito è riportato un esempio di implementazione:
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"); } }
Se non specifichi l'interfaccia
EventFilter
, viene utilizzatoDefaultEventFilter
, che permette l'elaborazione di tutti gli eventi (restituirà sempretrue
).
Elaborazione di eventi di dati
Quando CloudTrail elabora gli eventi relativi ai dati, conserva i numeri nel loro formato originale, sia esso un numero intero (int
) o un (un numero che contiene un float
decimale). Negli eventi che contengono numeri interi nei campi di un evento di dati, CloudTrail storicamente elaborava questi numeri come float. Attualmente, CloudTrail elabora i numeri in questi campi mantenendo il formato originale.
Come best practice, per evitare di interrompere le automazioni, sii flessibile in qualsiasi codice o automazione che utilizzi per elaborare o filtrare gli eventi CloudTrail relativi ai dati e consenti sia int
i float
numeri formattati che i numeri. Per ottenere risultati ottimali, utilizzate la versione 1.4.0 o successiva della Processing Library. CloudTrail
L'esempio di frammento seguente mostra un numero formattato come float
,2.0
, per il parametro desiredCount
nel blocco ResponseParameters
di un evento di dati.
"eventName": "CreateService", "awsRegion": "us-east-1", "sourceIPAddress": "000.00.00.00", "userAgent": "console.amazonaws.com", "requestParameters": { "clientToken": "EXAMPLE", "cluster": "default", "desiredCount": 2.0 ...
L'esempio di frammento seguente mostra un numero formattato come int
,2
, per il parametro desiredCount
nel blocco ResponseParameters
di un evento di dati.
"eventName": "CreateService", "awsRegion": "us-east-1", "sourceIPAddress": "000.00.00.00", "userAgent": "console.amazonaws.com", "requestParameters": { "clientToken": "EXAMPLE", "cluster": "default", "desiredCount": 2 ...
Creazione di report sull'avanzamento
Implementa l'ProgressReporter
interfaccia per personalizzare la segnalazione dei progressi della CloudTrail Processing Library. ProgressReporter
dichiara due metodi: reportStart()
ereportEnd()
, che vengono chiamati all'inizio e alla fine delle seguenti operazioni:
-
Messaggi di sondaggio da Amazon SQS
-
Analisi dei messaggi da Amazon SQS
-
Elaborazione di un SQS codice sorgente Amazon per i CloudTrail log
-
Eliminazione di messaggi da Amazon SQS
-
Scaricamento di un CloudTrail file di registro
-
Elaborazione di un file di CloudTrail registro
Entrambi i metodi ricevono un oggetto ProgressStatus
contenente le informazioni sull'operazione eseguita. Il membro progressState
contiene un membro dell'enumerazione ProgressState
che identifica l'operazione corrente. Questo utente può contenere ulteriori informazioni sul membro progressInfo
. Inoltre, qualsiasi oggetto restituito da reportStart()
viene passato a reportEnd()
. In questo modo puoi fornire informazioni contestuali, ad esempio l'ora di inizio dell'elaborazione dell'evento.
Di seguito è riportata un'implementazione di esempio che fornisce informazioni sul tempo richiesto per il completamento di un'operazione:
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."); } }
Se non implementi l'interfaccia ProgressReporter
, viene utilizzato DefaultExceptionHandler
, che stampa il nome dello stato in esecuzione.
Gestione degli errori
L'interfaccia ExceptionHandler
ti consente di implementare una funzionalità di gestione speciale quando si verifica un'eccezione durante l'elaborazione dei log. ExceptionHandler
dichiara un singolo metodo di callback, handleException()
, che riceve un oggetto ProcessingLibraryException
contenente il contesto relativo all'eccezione verificata.
Puoi utilizzare il metodo getStatus()
dell'oggetto ProcessingLibraryException
passato per scoprire quale operazione è stata eseguita quando si è verificata l'eccezione e per recuperare ulteriori informazioni sullo stato dell'operazione. L'oggetto ProcessingLibraryException
è derivato dalla classe Java standard Exception
. Puoi pertanto recuperare informazioni sull'eccezione anche richiamando qualsiasi metodo dell'eccezione.
Di seguito è riportato un esempio di implementazione:
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)); } }
Se non specifichi l'interfaccia ExceptionHandler
, viene utilizzato DefaultExceptionHandler
, che stampa un messaggio di errore standard.
Nota
Se il deleteMessageUponFailure
parametro ètrue
, la CloudTrail Processing Library non distingue le eccezioni generali dagli errori di elaborazione e può eliminare i messaggi in coda.
-
Ad esempio, utilizzare
SourceFilter
per filtrare i messaggi in base al time stamp. -
Tuttavia, non disponi delle autorizzazioni necessarie per accedere al bucket S3 che riceve i file di registro. CloudTrail Poiché non si dispone delle autorizzazioni necessarie, viene generata un'eccezione
AmazonServiceException
. La CloudTrail Processing Library lo racchiude in un.CallBackException
-
DefaultExceptionHandler
registra questa situazione come un errore, ma non ne identifica la causa, ovvero che non si dispone delle autorizzazioni necessarie. La CloudTrail Processing Library lo considera un errore di elaborazione ed elimina il messaggio, anche se il messaggio include un file di registro valido CloudTrail .
Se si desidera filtrare i messaggi con SourceFilter
, verificare che ExceptionHandler
sia in grado di distinguere le eccezioni del servizio dagli errori di elaborazione.
Risorse aggiuntive
Per ulteriori informazioni sulla CloudTrail Processing Library, vedere quanto segue:
-
CloudTrail GitHub Progetto Processing Library
, che include un codice di esempio che dimostra come implementare un'applicazione CloudTrail Processing Library. -
CloudTrail Documentazione del pacchetto Java della libreria di elaborazione.