CloudTrail Processing Library の使用 - AWS CloudTrail

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 プロジェクトに追加するには
  1. から CloudTrail Processing Library ソースコードをダウンロードまたはクローンします GitHub。

  2. 「」の説明に従って、ソースから .jar ファイルを構築しますREADME

    mvn clean install -Dgpg.skip=true
  3. 作成された .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 を追加するには
  1. から CloudTrail Processing Library ソースコードをダウンロードまたはクローンします GitHub。

  2. 「」の説明に従って、ソースから .jar ファイルを構築しますREADME

    mvn clean install -Dgpg.skip=true
  3. 構築された aws-cloudtrail-processing-library-1.6.1.jar をプロジェクト内のディレクトリ (通常は lib) にコピーします。

  4. Eclipse の [Project Explorer] でプロジェクト名を右クリックし、[Build Path]、[Configure] の順に選択します。

  5. [Java Build Path] ウィンドウで、[Libraries] タブを選択します。

  6. 追加JARs...を選択し、 aws-cloudtrail-processing-library-1.6.1.jar をコピーしたパスに移動します。

  7. [OK] を選択すると、プロジェクトに .jar が追加されます。

IntelliJ プロジェクトにライブラリを追加する

CloudTrail 処理ライブラリを IntelliJ プロジェクトに追加するには
  1. から CloudTrail Processing Library ソースコードをダウンロードまたはクローンします GitHub。

  2. 「」の説明に従って、ソースから .jar ファイルを構築しますREADME

    mvn clean install -Dgpg.skip=true
  3. [File] で、[Project Structure] を選択します。

  4. [Modules]、[Dependencies] の順に選択します。

  5. + JARSまたは ディレクトリを選択し、 を作成したパスに移動しますaws-cloudtrail-processing-library-1.6.1.jar

  6. [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。この値を指定しない場合、AWSCloudTrailProcessingExecutorIllegalStateException をスローします。

  • 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 イベントを処理するには
  1. AWSCloudTrailProcessingExecutor.Builder オブジェクトをインスタンス化します。Builder のコンストラクタは、EventsProcessor オブジェクトとクラスパスのプロパティファイル名を受け取ります。

  2. Builderbuild() ファクトリメソッドを呼び出し、AWSCloudTrailProcessingExecutor オブジェクトを設定して取得します。

  3. AWSCloudTrailProcessingExecutorstart()および 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 オブジェクトを受け取ります。

渡された ProcessingLibraryExceptiongetStatus() メソッドを使用して、例外発生時に実行された操作を明らかにし、操作のステータスに関する追加情報を取得できます。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 は一般的な例外と処理エラーを区別せず、キューメッセージを削除する可能性があります。

  1. 例えば、SourceFilter を使用して、タイムスタンプでメッセージをフィルタリングします。

  2. ただし、 CloudTrail ログファイルを受け取る S3 バケットにアクセスするために必要なアクセス許可はありません。必要なアクセス権限がないため、AmazonServiceException がスローされます。 CloudTrail Processing Library はこれを にラップしますCallBackException

  3. DefaultExceptionHandler はこれをログとして記録しますが、必要なアクセス権限がないという根本原因を特定することはありません。 CloudTrail Processing Library はこれを処理エラーと見なし、メッセージに有効な CloudTrail ログファイルが含まれている場合でもメッセージを削除します。

メッセージを SourceFilter でフィルタリングするには、ExceptionHandler がサービスの例外を処理エラーから区別できることを確認します。

追加リソース

CloudTrail Processing Library の詳細については、以下を参照してください。