翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CloudTrail Processing Library の使用
CloudTrail Processing Library は、 AWS CloudTrail ログを簡単に処理できる Java ライブラリです。キューに関する設定の詳細を指定し、イベントを処理するコードを記述します CloudTrail SQS。 CloudTrail Processing Library が残りを行います。Amazon SQSキューのポーリング、キューメッセージの読み取りと解析、 CloudTrail ログファイルのダウンロード、ログファイル内のイベントの解析、Java オブジェクトとしてのコードへのイベントの受け渡しを行います。
CloudTrail Processing Library は、高いスケーラビリティと耐障害性を備えています。ログファイルの並列処理を行うため、必要な数だけのログを処理することができます。ネットワークタイムアウトや、アクセスできないリソースに関するネットワーク障害に対応します。
次のトピックでは、 CloudTrail Processing Library を使用して Java プロジェクトの CloudTrail ログを処理する方法を示します。
ライブラリは Apache ライセンスのオープンソースプロジェクトとして提供され、 GitHubで利用できますhttps://github.com/aws/aws-cloudtrail-processing-library
最小要件
CloudTrail Processing Library を使用するには、以下が必要です。
CloudTrail ログの処理
Java アプリケーションで CloudTrail ログを処理するには:
Processing Library CloudTrail をプロジェクトに追加する
CloudTrail Processing Library を使用するには、Java プロジェクトのクラスパスに追加します。
目次
Apache Ant プロジェクトにライブラリを追加する
CloudTrail Processing Library を Apache Ant プロジェクトに追加するには
-
から CloudTrail Processing Library ソースコードをダウンロードまたはクローンします GitHub。
-
「」の説明に従って、ソースから .jar ファイルを構築しますREADME
。 mvn clean install -Dgpg.skip=true
-
作成された .jar ファイルをプロジェクトにコピーし、プロジェクトの
build.xml
ファイルに追加します。以下はその例です。<classpath> <pathelement path="${classpath}"/> <pathelement location="lib/aws-cloudtrail-processing-library-1.6.1.jar"/> </classpath>
Apache Maven プロジェクトにライブラリを追加する
CloudTrail Processing Library は Apache Maven pom.xml
ファイルに依存関係を 1 つ書くことで、プロジェクトに追加できます。
CloudTrail 処理ライブラリを Maven プロジェクトに追加するには
-
Maven プロジェクトの
pom.xml
ファイルを開き、次の依存関係を追加します。<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-cloudtrail-processing-library</artifactId> <version>1.6.1</version> </dependency>
Eclipse プロジェクトにライブラリを追加する
Eclipse プロジェクトに CloudTrail Processing Library を追加するには
-
から CloudTrail Processing Library ソースコードをダウンロードまたはクローンします GitHub。
-
「」の説明に従って、ソースから .jar ファイルを構築しますREADME
。 mvn clean install -Dgpg.skip=true
-
構築された aws-cloudtrail-processing-library-1.6.1.jar をプロジェクト内のディレクトリ (通常は
lib
) にコピーします。 -
Eclipse の [Project Explorer] でプロジェクト名を右クリックし、[Build Path]、[Configure] の順に選択します。
-
[Java Build Path] ウィンドウで、[Libraries] タブを選択します。
-
追加JARs...を選択し、 aws-cloudtrail-processing-library-1.6.1.jar をコピーしたパスに移動します。
-
[OK] を選択すると、プロジェクトに
.jar
が追加されます。
IntelliJ プロジェクトにライブラリを追加する
CloudTrail 処理ライブラリを IntelliJ プロジェクトに追加するには
-
から CloudTrail Processing Library ソースコードをダウンロードまたはクローンします GitHub。
-
「」の説明に従って、ソースから .jar ファイルを構築しますREADME
。 mvn clean install -Dgpg.skip=true
-
[File] で、[Project Structure] を選択します。
-
[Modules]、[Dependencies] の順に選択します。
-
+ JARSまたは ディレクトリを選択し、 を作成したパスに移動します
aws-cloudtrail-processing-library-1.6.1.jar
。 -
[Apply]、[OK] の順に選択すると、プロジェクトに
.jar
が追加されます。
Processing Library CloudTrail の設定
CloudTrail Processing Library を設定するには、実行時にロードされるクラスパスプロパティファイルを作成するか、ClientConfiguration
オブジェクトを作成してオプションを手動で設定します。
プロパティファイルを提供する
アプリケーションに設定オプションを提供するクラスパスプロパティファイルを作成できます。次のサンプルファイルでは、設定できるオプションを示します。
# 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
以下のパラメータは必須です。
-
sqsUrl
– 通知をプルする URL を提供します CloudTrail。この値を指定しない場合、AWSCloudTrailProcessingExecutor
がIllegalStateException
をスローします。 -
accessKey
– など、アカウントの一意の識別子AKIAIOSFODNN7EXAMPLE。 -
secretKey
– wJalrXUtnFEMI/K7MDENG/ など、アカウントの一意の識別子bPxRfiCYEXAMPLEKEY。
accessKey
および secretKey
パラメータは、ライブラリがユーザーに代わって にアクセスできるように、ライブラリ AWS に認証情報を提供します AWS 。
他のパラメータのデフォルト値は、ライブラリによって設定されます。詳細については、「AWS CloudTrail Processing Library リファレンス」を参照してください。
の作成 ClientConfiguration
クラスパスプロパティでオプションを設定する代わりに、次の例のように、ClientConfiguration
オブジェクトでオプションを初期化して設定することにより、AWSCloudTrailProcessingExecutor
にオプションを提供できます。
ClientConfiguration basicConfig = new ClientConfiguration( "http://sqs.us-east-1.amazonaws.com/123456789012/queue2", new DefaultAWSCredentialsProviderChain()); basicConfig.setEnableRawEventInfo(true); basicConfig.setThreadCount(4); basicConfig.setnEventsPerEmit(20);
イベントプロセッサを実装する
CloudTrail ログを処理するには、 CloudTrail ログデータEventsProcessor
を受信する を実装する必要があります。以下に実装例を示します。
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())); } } }
を実装するときはEventsProcessor
、 が CloudTrail イベントの送信AWSCloudTrailProcessingExecutor
に使用するprocess()
コールバックを実装します。イベントは、CloudTrailClientEvent
オブジェクトのリストで提供されます。
CloudTrailClientEvent
オブジェクトは、 CloudTrail イベントCloudTrailEvent
と配信情報の読み取りCloudTrailEventMetadata
に使用できる と を提供します。
この簡単な例では、SampleEventsProcessor
に渡された各イベントのイベント情報が表示されます。実際の実装では、必要に応じてログを処理できます。AWSCloudTrailProcessingExecutor
は、送信するイベントがあり、実行している限りは、EventsProcessor
へのイベントの送信を続けます。
処理エグゼキューターをインスタンス化して実行する
を記述EventsProcessor
し、 CloudTrail Processing Library の設定値を (プロパティファイルまたは ClientConfiguration
クラスを使用して) 設定したら、これらの要素を使用して を初期化して使用できますAWSCloudTrailProcessingExecutor
。
AWSCloudTrailProcessingExecutor
を使用して CloudTrail イベントを処理するには
-
AWSCloudTrailProcessingExecutor.Builder
オブジェクトをインスタンス化します。Builder
のコンストラクタは、EventsProcessor
オブジェクトとクラスパスのプロパティファイル名を受け取ります。 -
Builder
のbuild()
ファクトリメソッドを呼び出し、AWSCloudTrailProcessingExecutor
オブジェクトを設定して取得します。 -
AWSCloudTrailProcessingExecutor
のstart()
およびstop()
メソッドを使用して、 CloudTrail イベント処理を開始および終了します。
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 } }
高度なトピック
処理するイベントのフィルタリング
デフォルトでは、Amazon SQSキューの S3 バケット内のすべてのログと、それらに含まれるすべてのイベントが に送信されますEventsProcessor
。 CloudTrail Processing Library には、 CloudTrail ログの取得に使用されるソースをフィルタリングしたり、処理に関心のあるイベントをフィルタリングしたりするために実装できるオプションのインターフェイスが用意されています。
SourceFilter
-
SourceFilter
インターフェイスを実装して、提供されたソースからのログを処理するかどうかを選択できます。SourceFilter
で 1 つだけ宣言されているコールバックメソッドfilterSource()
は、CloudTrailSource
オブジェクトを受け取ります。ソースからのイベントが処理されないようにするには、filterSource()
からfalse
を返します。CloudTrail Processing Library は、ライブラリが Amazon SQSキューのログをポーリングした後、
filterSource()
メソッドを呼び出します。これは、ライブラリがイベントのフィルタリングまたはログの処理を開始する前に発生します。以下に実装例を示します。
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); } }
独自の
SourceFilter
を提供しない場合に使用されるDefaultSourceFilter
では、すべてのソースの処理が許可されます (常にtrue
を返します)。 EventFilter
-
EventFilter
インターフェイスを実装して、 CloudTrailイベントが に送信されるかどうかを選択できますEventsProcessor
。 は、CloudTrailEvent
オブジェクトを受信する単一のコールバックメソッドfilterEvent()
をEventFilter
宣言します。イベントが処理されないようにするには、filterEvent()
からfalse
を返します。CloudTrail Processing Library は、ライブラリが Amazon SQSキューのログをポーリングした後、およびソースフィルタリング後に
filterEvent()
メソッドを呼び出します。これは、ライブラリがログのイベント処理を開始する前に発生します。次の実装例を参照してください。
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"); } }
独自の
EventFilter
を提供しない場合に使用されるDefaultEventFilter
では、すべてのイベントの処理が許可されます (常にtrue
を返します)。
データイベントの処理
がデータイベント CloudTrail を処理すると、整数 (int
) か (10 進数を含む数値) かにかかわらず、元の形式でfloat
数値が保持されます。データイベントのフィールドに整数があるイベントでは、 はこれらの数値を浮動小数点数として CloudTrail 履歴的に処理しました。現在、 は元の形式を保持して、これらのフィールドの数値 CloudTrail を処理します。
ベストプラクティスとして、オートメーションの中断を回避するには、 CloudTrail データイベントの処理またはフィルタリングに使用しているコードまたはオートメーションに柔軟性を持たせ、 と int
float
の両方のフォーマットされた数値を許可します。最良の結果を得るには、 処理ライブラリのバージョン 1.4.0 CloudTrail 以降を使用してください。
次のスニペット例ではデータイベントの ResponseParameters
ブロックの desiredCount
パラメータ用にフォーマットされた float
の数値、2.0
を示しています。
"eventName": "CreateService", "awsRegion": "us-east-1", "sourceIPAddress": "000.00.00.00", "userAgent": "console.amazonaws.com", "requestParameters": { "clientToken": "EXAMPLE", "cluster": "default", "desiredCount": 2.0 ...
次のスニペット例ではデータイベントの ResponseParameters
ブロックの desiredCount
パラメータ用にフォーマットされた int
の数値、2
を示しています。
"eventName": "CreateService", "awsRegion": "us-east-1", "sourceIPAddress": "000.00.00.00", "userAgent": "console.amazonaws.com", "requestParameters": { "clientToken": "EXAMPLE", "cluster": "default", "desiredCount": 2 ...
進行状況のレポート
ProgressReporter
インターフェイスを実装して、 CloudTrail Processing Library の進行状況のレポートをカスタマイズします。 はreportEnd()
、次のオペレーションの最初と最後に呼び出される reportStart()
と の 2 つのメソッドをProgressReporter
宣言します。
-
Amazon からのメッセージのポーリング SQS
-
Amazon からのメッセージの解析 SQS
-
CloudTrail ログの Amazon SQSソースの処理
-
Amazon からのメッセージの削除 SQS
-
CloudTrail ログファイルのダウンロード
-
CloudTrail ログファイルの処理
どちらの方法でも、実行されたオペレーションに関する情報が含まれる ProgressStatus
オブジェクトを受信します。progressState
メンバーは ProgressState
列挙のメンバーを保持し、それによって現在のオペレーションが識別されます。このメンバーには、progressInfo
メンバーの追加情報を含めることができます。さらに、reportStart()
から返す任意のオブジェクトが reportEnd()
に渡されるので、イベントが処理を開始した時刻などのコンテキスト情報を提供できます。
次に示す実装の例では、操作が完了するまでにかかった時間についての情報を提供しています。
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."); } }
独自の ProgressReporter
を実装しない場合に使用される DefaultExceptionHandler
では、実行されている状態の名前が表示されます。
エラー処理
ExceptionHandler
インターフェイスを使用すると、ログ処理中に例外が発生したときに特別な処理を提供できます。ExceptionHandler
で 1 つだけ宣言されている handleException()
メソッドは、発生した例外についてのコンテキストを含む ProcessingLibraryException
オブジェクトを受け取ります。
渡された ProcessingLibraryException
の getStatus()
メソッドを使用して、例外発生時に実行された操作を明らかにし、操作のステータスに関する追加情報を取得できます。ProcessingLibraryException
は Java の標準的な Exception
クラスから派生しているので、いずれかの Exception メソッドを呼び出して例外に関する情報を取得することもできます。
次の実装例を参照してください。
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)); } }
独自の ExceptionHandler
を提供しない場合に使用される DefaultExceptionHandler
は、標準エラーメッセージを表示します。
注記
deleteMessageUponFailure
パラメータが の場合true
、 CloudTrail Processing Library は一般的な例外と処理エラーを区別せず、キューメッセージを削除する可能性があります。
-
例えば、
SourceFilter
を使用して、タイムスタンプでメッセージをフィルタリングします。 -
ただし、 CloudTrail ログファイルを受け取る S3 バケットにアクセスするために必要なアクセス許可はありません。必要なアクセス権限がないため、
AmazonServiceException
がスローされます。 CloudTrail Processing Library はこれを にラップしますCallBackException
。 -
DefaultExceptionHandler
はこれをログとして記録しますが、必要なアクセス権限がないという根本原因を特定することはありません。 CloudTrail Processing Library はこれを処理エラーと見なし、メッセージに有効な CloudTrail ログファイルが含まれている場合でもメッセージを削除します。
メッセージを SourceFilter
でフィルタリングするには、ExceptionHandler
がサービスの例外を処理エラーから区別できることを確認します。
追加リソース
CloudTrail Processing Library の詳細については、以下を参照してください。
-
CloudTrail Processing Library
GitHub プロジェクト。Processing Library CloudTrail アプリケーションの実装方法を示すサンプル コードが含まれています。