AWS CloudTrail Processing Library
本日はAWS SDK for Javaに新しく追加されましたAWS CloudTrail Processing Libraryについてご紹介させて頂きます。
AWS CloudTrail は、AWS で実行された APIの履歴をログファイルとしてAmazon S3に保管します。AWS CloudTrail Processing Libraryを使ってアプリケーションを構築することで、AWS CloudTrailにより取得されたログの読み込みや、取り扱いが簡単に実装できるようになり、ビジネスロジックに組み込むことが容易になりました。たとえば開発者の方は、イベント元やイベントの種類に対してフィルターを設定できるようになりますし、またそれらのイベントをAmazon RDS、Amazon Redshift、もしくはサードパーティのデータストアに保管することも可能になります。
AWS CloudTrail Processing Library(CPL)を利用することで、Amazon SQS キューへのポーリングであったり、キュー に蓄積されたメッセージの読み込み・解析、CloudTrail ログ ファイルのダウンロードやログファイル内のイベントをパース、シリアライズするためにコードを記述する必要がなくなります。CPL を使用することで、開発者はわずか 10 行足らずのコードで CloudTrail のログ ファイルの読み込み、操作が可能になります。またネットワークタイムアウトやリソースへの一時的、もしくは長期的なアクセス遮断等の障害にも耐えうる耐障害性、回復性をもちます。スケール性に富み、並列に無制限のログファイルを処理できます。必要に応じ複数のホストから のCPLを実行に対し 、同じS3 バケット、同じ SQS キューの並行処理を行うことが可能です。
CPLは簡単にご利用頂けます。AWS 資格情報の設定と SQS キューを構成後、イベントに対し呼び出されるコールバックメソッドを実装し、AWSCloudTrailProcessingExecutor
をスタートするだけです。
// This file contains your AWS security credentials and the name // of an Amazon SQS queue to poll for updates String myPropertiesFileName = "myCPL.properties"; // An EventsProcessor is what processes each event from AWS CloudTrail final AmazonSNSClient sns = new AmazonSNSClient(); EventsProcessor eventsProcessor = new EventsProcessor() { public void process(List<CloudTrailEvent> events) { for (CloudTrailEvent event : events) { CloudTrailEventData data = event.getEventData(); if (data.getEventSource().equals("ec2.amazonaws.com") && data.getEventName().equals("ModifyVpcAttribute")) { System.out.println("Processing event: " + data.getRequestId()); sns.publish(myQueueArn, "{ " + "'requestId'= '" + data.getRequestId() + "'," + "'request' = '" + data.getRequestParameters() + "'," + "'response' = '" + data.getResponseElements() + "'," + "'source' = '" + data.getEventSource() + "'," + "'eventName'= '" + data.getEventName() + "'" + "}"); } } } }; // Create AWSCloudTrailProcessingExecutor and start it final AWSCloudTrailProcessingExecutor executor = new AWSCloudTrailProcessingExecutor .Builder(eventsProcessor, myPropertiesFileName) .build(); executor.start();
上記の例では、それぞれのイベントに対し EventsProcessor を実装します。そのイベントが ModifyVPCAttribute
によるAmazon EC2 VPCを変更する操作の場合、コードがAmazon SNS トピックにメッセージをパブリッシュし、オペレーターはあるアカウントの VPC 構成に大きな変更を確認することができます。
このことからもCPLを使うことで、AWS CloudTrailイベントをいかに簡単に扱うことができるかをご理解頂けるでしょう。ここまでEventsProcessor
を利用し、CloudTrail イベントを操作するカスタム ロジックの作成方法について見てきました。さらにAWSCloudTrailProcessingExecutor
を利用することで下記インターフェイスも制御することが可能になります。
・EventFilter を使うことで、処理すべき特定のイベントフィルター処理を簡単に実装することができます。たとえば、ある特定のリージョンまたは特定のサービスから CloudTrail イベントを処理する場合、EventFilterを使うことで簡単にそれらのイベントを簡単に選択することができます。
・SourceFilters を使うことで、イベントソースに固有のデータを使用してフィルター処理を行うことができます。この場合SQSBasedSource には、何度メッセージが送信されたか等のフィルタ ―リングのための情報が含めれています。
・ProgressReportersは、アプリケーション処理がどのように実行されたかをレポートできますので、アプリケーションを通じて進行状況を報告することができます。
・ExceptionHandlers は、イベント処理中に発生したエラーに対するカスタム エラーハンドリングを追加することができます。
AWS CloudTrail Processing LibraryのソースがGitHubのaws-cloudtrail-processing-libraryプロジェクトに公開されています。
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-cloudtrail-processing-library</artifactId> <version>1.0.0</version> </dependency>
皆さん、AWSの操作をトラッキングするのにどのようにAWS CloudTrailをお使いでしょうか。
コメント