AWS(Amazon Web Services)上のスケーラビリティの高いイベントログ
トピック: AWS(Amazon Web Services)、バラクーダエンジニアリング、メールセキュリティ
2020年12月15日、Sravanthi Gottipati
ほとんどのアプリケーションは設定イベントとアクセスイベントを生成します。管理者がこのようなイベントを可視化することは重要です。Barracuda Email Security Serviceは、管理者がシステムを詳細設定および理解できるように、このようなイベントの多くを透明化および可視化します。たとえば、誰がいつアカウントにログインしたかを知ることができます。また、誰が特定のポリシーの設定を追加、変更、または削除したかを知ることができます。
このような分散型で検索可能なシステムを構築する場合は、下記の多くの疑問が思い浮かびます。
- すべてのアプリケーション、サービス、およびマシンから中央の場所にログをどのように書き込むか。
- ログファイルの標準形式を何にするか。
- ログをどれほどの期間、保持するか。
- さまざまなアプリケーションからのイベントをどのように関連付けるか。
- わかりやすい迅速な検索機能をUI(ユーザインターフェース)で管理者にどのように提供するか。
- ログをAPI(アプリケーションプログラミングインターフェース)でどのように提供するか。
分散型の検索エンジンを検討する場合、最初に思い浮かぶものはElasticsearchです。このエンジンは、ほぼリアルタイムで検索できるため、スケーラビリティが高く、AWSのフルマネージドサービスとして提供されています。このため、イベントログをElasticsearchに保存し、Amazon Kinesis Data FirehoseによってログをElasticsearchにプッシュするさまざまなアプリケーションをまず検討しました。
このアーキテクチャに関わるコンポーネント
- Kinesisエージェント: Kinesisエージェントはデータを収集し、Amazon Kinesis Data Firehoseに送信するための簡単な方法を実装するスタンドアローンのJavaソフトウェアアプリケーションです。このエージェントは、Amazon EC2(Elastic Compute Cloud)Linuxインスタンス上のイベントログファイルを継続的に監視し、設定されたKinesis Data Streamsに送信します。また、ファイルローテーション、チェックポイント、および障害発生時の再試行を処理します。このエージェントは信頼性の高い適時のわかりやすい方法でデータのすべてを配信します。注: Amazon Kinesis Data Firehoseに書き込む必要があるアプリケーションがAWS Fargateコンテナである場合は、Fluentdコンテナが必要になります。ただし、このブログでは、Amazon EC2インスタンスで動作するアプリケーションについて重点的に説明します。
- Amazon Kinesis Data Firehose: Amazon Kinesis Data FirehoseのDirect PUTメソッドはJSON(JavaScript Object Notation)形式のデータをElasticsearchに書き込むことができます。この方法では、Kinesis Data Streamsにデータを保存しません。
- Amazon S3(Simple Storage Service)バケット: Amazon S3バケットを使用すると、すべてのレコードまたはElasticsearchへの配信に失敗したレコードをバックアップできます。ライフサイクルポリシーを設定すると、ログを自動アーカイブすることもできます。
- Elasticsearch: AmazonがホスティングするElasticsearch。Kibanaアクセスを有効にすると、デバッグ目的でログをクエリおよび検索できます。
- Curator: AWSは、Elasticsearchクラスタのインデックスとスナップショットを管理するために、LambdaとCuratorの使用を推奨しています。AWSの詳細と実装例については、このページをご参照ください。
- REST(REpresentational State Transfer)APIインターフェース: APIをElasticsearchの抽象化として作成できます。APIはUIとの統合性が高いです。API駆動型のマイクロサービスアーキテクチャは、セキュリティ、コンプライアンス、他のサービスとの統合など、多くの点で最適であることが証明されています。
スケーリング
- Amazon Kinesis Data Firehose: Kinesis Data Streamsは、デフォルトでは1,000レコード/秒、US East (Ohio) Regionでは1MiB(メビバイト)/秒までスケーリングできます。この値は、ソフト制限であり、10,000レコード/秒まで増加できます。また、リージョン固有です。
- Elasticsearch: Elasticsearchクラスタは、AWS上のストレージと処理能力の両方の点でスケーリングできます。バージョンをアップグレードすることもできます。Amazon ES(Elasticsearch Service)は、ドメインを更新する場合に、青/緑の導入プロセスを使用します。つまり、変更が適用される間は、クラスタ内のノードの数が一時的に増加する可能性があるということです。
このアーキテクチャの利点
- このパイプラインアーキテクチャは効果的に完全に管理されているため、メンテナンスはほとんど不要です。
- Elasticsearchクラスタに障害が発生した場合、Amazon Kinesis Data Firehoseは最大24時間レコードを保持できます。また、配信に失敗したレコードもAmazon S3バケットにバックアップされます。
このようなオプションが提供されているため、データ損失の可能性は低いです。
- KibanaとElasticsearchの両方のAPIにIAM(アイデンティティ管理とアクセス管理)ポリシーによる緻密なアクセス制御を実行できます。
欠点
- 価格は、慎重に検討および確認する必要があります。Amazon Kinesis Data Firehoseは大量のデータインジェストを簡単に処理できます。また、攻撃者が大量のデータをログに記録し始めても、問題なくデータを配信します。このため、多額のコストが発生する可能性があります。
- Amazon Kinesis Data FirehoseのElasticsearchとの統合はAmazon VPC(Virtual Private Cloud)以外のElasticsearchクラスタのみでサポートされています。
- 現在、Amazon Kinesis Data FirehoseはAWSがホスティングしていないElasticsearchクラスタにログを配信することはできません。Elasticsearchクラスタをセルフホスティングする場合、この設定は無効です。
結論
完全に管理されており、管理者が操作せずに(ほぼ)スケーリングするソリューションを求めている場合、このアーキテクチャは検討する必要がある適切な選択肢です。ライフサイクルポリシーによるAmazon S3バケットへの自動バックアップによって、ログの保持およびアーカイブの問題を簡単に解決することもできます。
原文はこちら:
Highly scalable event logging on AWS
December 15, 2020 Sravanthi Gottipati
https://blog.barracuda.com/2020/12/15/highly-scalable-event-logging-on-aws/