CloudTrail 処理ライブラリの使用 - AWS CloudTrail

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

CloudTrail 処理ライブラリの使用

CloudTrail 処理ライブラリは Java ライブラリで、処理が簡単な方法が用意されています。AWS CloudTrailログ。CloudTrail SQS キューに関する設定の詳細を提供し、イベントを処理するコードを記述します。CloudTrail 処理ライブラリが残りを処理します。これにより Amazon SQS キューをポーリングし、キューメッセージの読み取りと解析、CloudTrail ログファイルのダウンロード、ログファイル内のイベントの解析を行い、イベントを Java オブジェクトとしてコードに渡します。

CloudTrail 処理ライブラリは、耐障害性が高く、スケーラブルです。ログファイルの並列処理を行うため、必要な数だけのログを処理することができます。ネットワークタイムアウトや、アクセスできないリソースに関するネットワーク障害に対応します。

次のトピックでは、CloudTrail 処理ライブラリを使用して Java プロジェクトの CloudTrail ログを処理する方法を示します。

ライブラリは、Apache ライセンスの付いたオープンソースプロジェクトとして提供され、GitHub で入手できます。https://github.com/aws/aws-cloudtrail-processing-library。 ライブラリソースには、独自のプロジェクトのベースとして使用できるサンプルコードが含まれます。

最小要件

CloudTrail 処理ライブラリを使用するには、以下のものが必要です。

CloudTrail ログを処理する

Java アプリケーションで CloudTrail ログを処理するには:

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

CloudTrail 処理ライブラリを使用するには、Java プロジェクトのクラスパスに追加します。

Apache Ant プロジェクトへのライブラリの追加

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

  1. GitHub から CloudTrail 処理ライブラリのソースコードをダウンロードまたはクローンします。

  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.4.0.jar"/> </classpath>

Apache Maven プロジェクトへのライブラリの追加

CloudTrail 処理ライブラリは、Apache Maven。プロジェクトの pom.xml ファイルに依存関係を 1 つ書くことで、プロジェクトに追加できます。

CloudTrail 処理ライブラリを Maven プロジェクトに追加するには

  • Maven プロジェクトの pom.xml ファイルを開き、次の依存関係を追加します。

    <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-cloudtrail-processing-library</artifactId> <version>1.4.0</version> </dependency>

Eclipse プロジェクトへのライブラリの追加

CloudTrail 処理ライブラリを Eclipse プロジェクトに追加するには

  1. GitHub から CloudTrail 処理ライブラリのソースコードをダウンロードまたはクローンします。

  2. 「」で説明されているように、ソースから.jarファイルをビルドします。README:

    mvn clean install -Dgpg.skip=true
  3. ビルドされた aws-cloudtrail-processing-library-1.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.lib).

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

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

  6. 選択JAR を追加...aws-cloudtrail-processing-library-1.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.

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

IntelliJ プロジェクトへのライブラリの追加

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

  1. GitHub から CloudTrail 処理ライブラリのソースコードをダウンロードまたはクローンします。

  2. 「」で説明されているように、ソースから.jarファイルをビルドします。README:

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

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

  5. [+ JARS or Directories] を選択し、構築した aws-cloudtrail-processing-library-1.4.0.jar のパスに移動します。

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

CloudTrail 処理ライブラリの設定

実行時にロードされるクラスパスプロパティファイルを作成することにより、CloudTrail 処理ライブラリを設定できます。または、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— CloudTrail 通知をプルする元の URL を提供します。この値を指定しない場合、AWSCloudTrailProcessingExecutorIllegalStateException をスローします。

  • accessKey— アカウントの一意の識別子 (AKIAIOSFODNN7EXAMPLE など)。

  • secretKey— アカウントの一意の識別子 (wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY など)。

accessKey パラメーターと secretKey パラメーターでは、ユーザーの代わりにライブラリが AWS にアクセスできるように、ライブラリへの AWS 認証情報を指定します。

他のパラメータのデフォルト値は、ライブラリによって設定されます。詳細については、「」を参照してください。AWS CloudTrail処理ライブラリリファレンス

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 ログを処理するには、実装する必要があります。EventsProcessorは、CloudTrail ログデータを受信します。以下に実装例を示します。

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を実装するには、process()コールバックが、そのAWSCloudTrailProcessingExecutorは CloudTrail イベントを送信するために使用されます。イベントは、CloudTrailClientEvent オブジェクトのリストで提供されます。

-CloudTrailClientEventオブジェクトは、CloudTrailEventおよびCloudTrailEventMetadataCloudTrail イベントと配信情報を読み取ることができます。

この簡単な例では、SampleEventsProcessor に渡された各イベントのイベント情報が表示されます。実際の実装では、必要に応じてログを処理できます。AWSCloudTrailProcessingExecutor は、送信するイベントがあり、実行している限りは、EventsProcessor へのイベントの送信を続けます。

処理エグゼキュータのインスタンス化と実行

あなたが書いた後EventsProcessorを作成し、CloudTrail 処理ライブラリの設定値を (プロパティファイルまたはClientConfigurationクラス)、これらの要素を使用して、AWSCloudTrailProcessingExecutor

を使用するにはAWSCloudTrailProcessingExecutorCloudTrail イベントを処理するには

  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 処理ライブラリで提供されるオプションのインターフェイスを実装して、CloudTrail ログの取得に使用されるソースおよび処理対象のイベントをフィルタリングできます。

SourceFilter

SourceFilter インターフェイスを実装して、提供されたソースからのログを処理するかどうかを選択できます。SourceFilter で 1 つだけ宣言されているコールバックメソッド filterSource() は、CloudTrailSource オブジェクトを受け取ります。ソースからのイベントが処理されないようにするには、filterSource() から false を返します。

CloudTrail 処理ライブラリは、filterSource()メソッドを Amazon SQS キューでログをポーリングした後で、メソッドを呼び出します。これは、ライブラリがイベントのフィルタリングまたはログの処理を開始する前に発生します。

以下に実装例を示します。

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 イベントをに送信するかどうかを選択できます。EventsProcessorEventFilterは単一のコールバックメソッド、filterEvent()を受け取り、CloudTrailEventオブジェクト。イベントが処理されないようにするには、filterEvent() から false を返します。

CloudTrail 処理ライブラリは、filterEvent()メソッドは、ライブラリが Amazon SQS キューでログをポーリングした後で、ソースフィルタリング後に発生します。これは、ライブラリがログのイベント処理を開始する前に発生します。

次の実装例を参照してください。

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) またはfloat(10 進数を含む数値) を返します。データイベントのフィールドに整数を含むイベントでは、CloudTrail は従来、これらの数値を浮動小数点数として処理しました。現在、CloudTrail はこれらのフィールドの数値を元の形式を維持して処理しています。

ベストプラクティスとして、自動化が中断されないように、CloudTrail データイベントの処理またはフィルタリングに使用しているコードまたは自動化に柔軟に対応し、intおよびfloatフォーマットされた数値。最良の結果を得るには、CloudTrail 処理ライブラリのバージョン 1.4.0 以降を使用してください。

次のスニペット例で以下のものを示します。floatフォーマットされた数値、2.0に対して、desiredCountパラメータをResponseParametersデータイベントのブロック。

"eventName": "CreateService", "awsRegion": "us-east-1", "sourceIPAddress": "000.00.00.00", "userAgent": "console.amazonaws.com", "requestParameters": { "clientToken": "EXAMPLE", "cluster": "default", "desiredCount": 2.0 ...

次のスニペット例で以下のものを示します。intフォーマットされた数値、2に対して、desiredCountパラメータをResponseParametersデータイベントのブロック。

"eventName": "CreateService", "awsRegion": "us-east-1", "sourceIPAddress": "000.00.00.00", "userAgent": "console.amazonaws.com", "requestParameters": { "clientToken": "EXAMPLE", "cluster": "default", "desiredCount": 2 ...

進行状況のレポート

を実装するProgressReporterインターフェイスを使用して、CloudTrail 処理ライブラリの進行状況のレポートをカスタマイズします。ProgressReporter2 つのメソッドを宣言します。reportStart()およびreportEnd()である。これらは、以下の操作の最初と最後に呼び出されます。

  • 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 処理ライブラリは一般的な例外処理と処理エラーとを区別せず、キューメッセージが削除される場合があります。

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

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

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

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

その他のリソース

CloudTrail 処理ライブラリの詳細については、以下を参照してください。