ログをセキュリティ情報およびイベント管理 (SIEM) システムに転送するには、SLS をご利用の SIEM に接続するアプリケーションをデプロイします。このアプリケーションは、SLS コンシューマーグループを使用してログをプルし、Splunk HEC または Syslog を使用してご利用の SIEM に転送します。これにより、クラウドログをオンプレミスのセキュリティ分析プラットフォームと統合できます。
背景情報
多くの企業では、オンプレミスデータセンターに Splunk や QRadar などのセキュリティ情報およびイベント管理 (SIEM) プラットフォームをデプロイしています。セキュリティを維持するため、これらのプラットフォームは通常、データ受信用のパブリックエンドポイントを公開しません。ビジネスをクラウドに移行する際、統合されたモニタリング、監査、脅威分析のために、クラウドリソースからのログをオンプレミスの SIEM に集約する必要があります。既存システムのセキュリティを損なうことなく、SLS からオンプレミスの SIEM への安全なログ配布パイプラインを確立する必要があります。
仕組み
リアルタイムのデータ転送には、SLS コンシューマーグループを使用します。専用のアプリケーションが SLS からログをプルし、Splunk HTTP Event Collector (HEC) または TCP/TLS 経由の Syslog を使用してご利用の SIEM に転送します。
コアロジック
-
ログのプル:コンシューマーグループをベースにしたアプリケーションが SLS からデータをプルします。このメカニズムは、同時消費とフェールオーバーをサポートします。
-
同時実行性とスループット
-
より高いスループットを実現するには、コンシューマーアプリケーションの複数のインスタンスを実行します。各コンシューマーインスタンスは同じコンシューマーグループに属し、例えばプロセス ID をサフィックスとして使用するなどして、一意の名前を持つ必要があります。
-
一度に 1 つのシャードを処理できるコンシューマーは 1 つだけです。したがって、同時コンシューマーの最大数は Logstore のシャード数によって制限されます。例えば、Logstore に 10 個のシャードがある場合、最大 10 個のコンシューマーを並列で実行できます。
-
理想的なネットワーク条件下では:
-
単一のコンシューマー (単一 CPU コアの約 20% を使用) は、10 MB/s のレートで生ログを消費できます。
-
10 個のコンシューマーは、最大 100 MB/s の生ログを処理できます。
-
-
-
高可用性
-
コンシューマーグループは、各コンシューマーの進捗をサーバー上のチェックポイントとして保存します。
-
コンシューマーインスタンスに障害が発生した場合、別の利用可能なインスタンスが自動的に割り当てられたシャードを引き継ぎ、最後に保存されたチェックポイントから処理を再開します。堅牢なフェールオーバーを確保するために、コンシューマーインスタンスを異なるマシンで実行できます。
-
シャード数よりも多くのコンシューマーインスタンスを実行できます。余分なインスタンスは、即時のフェールオーバーのためのスタンバイとして機能します。
-
-
-
データ転送:ログをプルした後、アプリケーションは設定に基づいてログをフォーマットし、オンプレミスの SIEM に転送します。
前提条件
-
RAM ユーザーの作成と権限付与:RAM ユーザーには
AliyunLogFullAccessポリシーが必要です。 -
ネットワーク要件:アプリケーションを実行するマシンは、SLS エンドポイントにアクセスでき、SIEM と同じネットワーク上にある必要があります。
-
エンドポイントの取得方法:
-
SLS コンソールにログインします。プロジェクトリストで、対象のプロジェクトをクリックします。
-
プロジェクト名の右側にある
アイコンをクリックして、プロジェクトの概要ページに移動します。 -
[Endpoint] セクションで、パブリックエンドポイントをコピーします。エンドポイントは
https://+ パブリックエンドポイント です。
-
-
-
環境要件:Python 3 実行環境を準備し、SLS Python SDK をインストールします。
-
SLS Python SDK のインストール:
pip install -U aliyun-log-python-sdk。 -
インストールの確認:
pip show aliyun-log-python-sdk。インストールが成功すると、以下のような情報が返されます。Name: aliyun-log-python-sdk Version: 0.9.12 Summary: Aliyun log service Python client SDK Home-page: https://github.com/aliyun/aliyun-log-python-sdk Author: Aliyun
-
操作手順
ステップ 1:アプリケーションの準備
SLS は、Splunk HEC と Syslog の 2 つの転送方法のサンプルスクリプトを提供しています。ご利用の SIEM に一致する方法を選択し、対応するスクリプトを設定します。
-
Splunk HEC: HTTP イベントコレクター (HEC) は、HTTP 経由で Splunk にさまざまなフォーマットのデータを安全かつ効率的に送信できるトークンベースの仕組みです。
-
Syslog:ほとんどの SIEM システムと互換性があり、プレーンテキスト形式をサポートする一般的なロギングプロトコルです。
Splunk HEC
ログデータを Splunk に転送するには、提供されている sync_data.py スクリプトを設定します。スクリプトは主に 3 つの部分で構成されています:
-
main() メソッド:メインプログラムの制御ロジック。
-
get_option() メソッド:消費設定オプションを定義します。
-
基本設定:SLS とコンシューマーグループの接続設定が含まれます。
-
高度なコンシューマーグループオプション:パフォーマンスチューニングパラメーターが含まれます。必要な場合以外は変更しないでください。
-
SIEM (Splunk) のパラメーターとオプション。
-
行フィルタリング、列のトリミング、データ正規化などのタスクのために、転送中にデータをフィルタリングまたは変換するための SPL クエリを追加します。例:
# SPL クエリ query = "* | where instance_id in ('instance-1', 'instance-2')" # フィルター ルールを持つコンシューマーを作成します。「query」パラメーターが設定に追加されます。 option = LogHubConfig(endpoint, accessKeyId, accessKey, project, logstore, consumer_group, consumer_name, cursor_position=CursorPosition.SPECIAL_TIMER_CURSOR, cursor_start_time=cursor_start_time, heartbeat_interval=heartbeat_interval, data_fetch_interval=data_fetch_interval, query=query)
-
-
SyncData(ConsumerProcessorBase) クラス:SLS からデータをフェッチし、Splunk に転送するロジックが含まれています。コード内のコメントを確認し、必要に応じてロジックを調整してください。
完全なスクリプトは以下の通りです:
Syslog
Syslog は、RFC 5424 や RFC 3164 などのプロトコルに基づいたログフォーマット仕様を定義しています。RFC 5424 の使用を推奨します。Syslog は UDP と TCP の両方で転送できますが、TCP の方が信頼性の高いデータ伝送を提供します。RFC 5424 は、TLS を使用した安全なトランスポート層も定義しています。ご利用の SIEM が TCP または TLS チャンネル経由の Syslog をサポートしている場合は、それを使用してください。
Syslog を使用してログデータを SIEM に転送するには、提供されている sync_data.py スクリプトを設定します。スクリプトは主に 3 つの部分で構成されています:
-
main() メソッド:メインプログラムの制御ロジック。
-
get_monitor_option() メソッド:消費設定オプションを定義します。
-
基本設定:SLS とコンシューマーグループの接続設定が含まれます。
-
高度なコンシューマーグループオプション:パフォーマンスチューニングパラメーターが含まれます。必要な場合以外は変更しないでください。
-
SIEM Syslog サーバーのパラメーターとオプション。
-
Syslog ファシリティ:ログを生成したプログラムコンポーネント。この例では、デフォルトとして
syslogclient.FAC_USERを使用します。 -
Syslog 重大度:メッセージのログレベル。ログの内容に基づいてカスタマイズできます。この例では
syslogclient.SEV_INFOを使用します。 -
ご利用の SIEM が TCP または TLS 経由の Syslog をサポートしている場合は、proto パラメーターを TLS に設定し、有効な SSL 証明書へのパスを指定します。
-
-
-
SyncData(ConsumerProcessorBase) クラス:SLS からデータをフェッチし、Syslog サーバーに配信するロジックが含まれています。コード内のコメントを確認し、必要に応じてロジックを調整してください。
完全なスクリプトは以下の通りです:
ステップ 2:環境変数の設定
プログラムを設定した後、表のシステム環境変数の設定を実行します。
|
パラメーター |
値 |
例 |
|
SLS_ENDPOINT |
エンドポイントのプレフィックスが |
|
|
SLS_PROJECT |
SLS コンソール内の対象プロジェクトの名前。 |
my-sls-project-one |
|
SLS_LOGSTORE |
SLS コンソール内の対象 Logstore の名前。 |
my-sls-logstore-a1 |
|
SLS_AK_ID |
RAM ユーザーの AccessKey ID。 重要
|
L***ky |
|
SLS_AK_KEY |
RAM ユーザーの AccessKey Secret。 |
x***Xl |
|
SLS_CG |
コンシューマーグループの名前。「sync_data」のような単純な名前を使用できます。指定したグループが存在しない場合、アプリケーションは自動的に作成します。 |
sync_data |
ステップ 3:起動と検証
-
複数のコンシューマープロセスを開始して、並列処理を有効にします。同時プロセスの最大数は、Logstore のシャード数と同じです。
# 最初のコンシューマープロセスを開始 nohup python3 sync_data.py & # 2番目のコンシューマープロセスを開始 nohup python3 sync_data.py & -
SLS コンソールでコンシューマーグループのステータスを表示します。
-
プロジェクト一覧で、対象のプロジェクトをクリックします。「」タブに移動します。対象の Logstore の横にある
アイコンをクリックし、次に [データ消費] の横にある
アイコンをクリックします。 -
コンシューマーグループリストで、対象のコンシューマーグループをクリックします。[コンシューマーグループのステータス] タブで、各シャードのコンシューマークライアントと進捗状況を表示します。
-
よくある質問
ConsumerGroupQuotaExceed エラー
このエラーは、コンシューマーグループのクォータを超えたことを示します。1 つの Logstore には最大 30 のコンシューマーグループしか設定できません。この問題を解決するには、SLS コンソールで未使用のコンシューマーグループを削除してください。