Logstash を使用して、DCR ベースの API によりパイプライン変換でログをストリーミングする
重要
データ収集ルール (DCR) で Logstash 出力プラグインを使用したデータ インジェストは、現在パブリック プレビューの段階にあります。 この機能は、サービス レベル アグリーメントなしに提供されます。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
Microsoft Sentinel の新しい Logstash 出力プラグインは、データ収集ルール (DCR) を使用したパイプライン変換と高度な構成をサポートしています。 プラグインは、外部データ ソースから Log Analytics または Microsoft Sentinel のカスタムまたは標準のテーブルに任意の種類のログを転送します。
この記事では、DCR を使用してデータを Log Analytics または Microsoft Sentinel にストリーミングするように新しい Logstash プラグインを設定し、出力スキーマを完全に制御する方法について説明します。 プラグインをデプロイする方法について説明します。
Note
以前のバージョンの Logstash プラグインを使うと、Data Collection API を使用して Logstash 経由でデータ ソースを接続できます。
新しいプラグインでは次のことができます。
- 列の名前と型の構成を制御します。
- フィルター処理やエンリッチメントなど、インジェスト時の変換を実行します。
- カスタム ログをカスタム テーブルに取り込むか、または Syslog 入力ストリームを Log Analytics Syslog テーブルに取り込みます。
標準テーブルへのインジェストは、カスタム ログ インジェストでサポートされている標準テーブルのみに制限されます。
Logstash データ収集エンジンの操作の詳細については、Logstash の概要に関するページをご覧ください。
概要
アーキテクチャと背景
Logstash エンジンは、次の 3 つのコンポーネントで構成されています。
- 入力プラグイン:さまざまなソースのデータのカスタマイズされたコレクション。
- フィルター プラグイン:指定した条件に従ったデータの操作と正規化。
- 出力プラグイン:収集および処理されたデータのさまざまな宛先へのカスタマイズされた送信。
Note
Microsoft では、ここで説明する、Microsoft Sentinel で提供される Logstash 出力プラグインのみをサポートしています。 現在のプラグインの名前は microsoft-sentinel-logstash-output-plugin v1.1.0 です。 出力プラグインに関する問題については、サポート チケットを開くことができます。
Microsoft では、Microsoft Sentinel 用のサード パーティ製 Logstash 出力プラグインや、その他の種類の Logstash プラグインやコンポーネントをサポートしていません。
プラグインの Logstash バージョンのサポートについては、「前提条件」をご覧ください。
Logstash 用の Microsoft Sentinel 出力プラグインでは、Log Analytics Log Ingestion API を使用して、JSON 形式のデータを Log Analytics ワークスペースに送信します。 データは、カスタム ログまたは標準テーブルに取り込まれます。
- ログ インジェスト API の詳細については、こちらを参照してください。
Logstash で Microsoft Sentinel 出力プラグインをデプロイする
プラグインを設定するには、次の手順のようにします。
- 前提条件を確認します。
- プラグインをインストールする
- サンプル ファイルを作成する
- 必要な DCR 関連リソースを作成する
- Logstash 構成ファイルを構成する
- Logstash を再起動する
- Microsoft Sentinel で着信したログを表示する
- 出力プラグインの監査ログを監視する
前提条件
サポートされているバージョンの Logstash をインストールします。 このプラグインでは、次の Logstash バージョンがサポートされています。
- 7.0 - 7.17.13
- 8.0 - 8.9
- 8.11 - 8.13
Note
Logstash 8 を使う場合は、パイプラインで ECS を無効にすることをお勧めします。
少なくとも共同作成者権限を持つ Log Analytics ワークスペースがあることを確認します。
ワークスペースで DCR オブジェクトを作成するためのアクセス許可があることを確認します。
プラグインをインストールする
Microsoft Sentinel 出力プラグインは、Logstash コレクションで使用できます。
- Logstash のプラグインの操作に関するドキュメントに記載されている手順に従って、microsoft-sentinel-log-analytics-logstash-output-plugin プラグインをインストールします。
- Logstash システムがインターネットにアクセスできない場合は、Logstash のオフライン プラグイン管理に関するドキュメントに記載されている手順に従って、オフライン プラグイン パックを準備して使用します。 (この場合、インターネットにアクセスできる別の Logstash システムを構築する必要があります)。
サンプル ファイルを作成する
このセクションでは、次のいずれかのシナリオでサンプル ファイルを作成します。
カスタム ログ用のサンプル ファイルを作成する
このシナリオでは、イベントを Microsoft Sentinel に送信するように Logstash 入力プラグインを構成します。 この例では、ジェネレーター入力プラグインを使ってイベントをシミュレートします。 他の任意の入力プラグインを使用できます。
この例の Logstash 構成ファイルは次のようになります。
input {
generator {
lines => [
"This is a test log message"
]
count => 10
}
}
以下の出力プラグイン構成を Logstash 構成ファイルにコピーします。
output { microsoft-sentinel-log-analytics-logstash-output-plugin { create_sample_file => true sample_file_path => "<enter the path to the file in which the sample data will be written>" #for example: "c:\\temp" (for windows) or "/tmp" for Linux. } }
サンプル ファイルを作成する前に、参照先のファイル パスが存在することを確認するには、Logstash を起動します。
プラグインは、構成されたパスの
sampleFile<epoch seconds>.json
という名前のサンプル ファイルに、10 個のレコードを書き込みます。 例: c:\temp\sampleFile1648453501.json。 プラグインによって作成されるサンプル ファイルの一部を次に示します。[ { "host": "logstashMachine", "sequence": 0, "message": "This is a test log message", "ls_timestamp": "2022-03-28T17:45:01.690Z", "ls_version": "1" }, { "host": "logstashMachine", "sequence": 1 ... ]
プラグインは、次のプロパティをすべてのレコードに自動的に追加します。
ls_timestamp
: 入力プラグインからレコードを受信した時刻ls_version
: Logstash パイプラインのバージョン。
これらのフィールドは、DCR を作成するときに削除できます。
Syslog テーブルにログを取り込むためのサンプル ファイルを作成する
このシナリオでは、syslog イベントを Microsoft Sentinel に送信するように Logstash 入力プラグインを構成します。
まだ syslog メッセージを Logstash マシンに転送していない場合は、logger コマンドを使ってメッセージを生成できます。 例 (Linux の場合):
logger -p local4.warn --rfc3164 --tcp -t CEF: "0|Microsoft|Device|cef-test|example|data|1|here is some more data for the example" -P 514 -d -n 127.0.0.1 Here is an example for the Logstash input plugin: input { syslog { port => 514 } }
以下の出力プラグイン構成を Logstash 構成ファイルにコピーします。
output { microsoft-sentinel-log-analytics-logstash-output-plugin { create_sample_file => true sample_file_path => "<enter the path to the file in which the sample data will be written>" #for example: "c:\\temp" (for windows) or "/tmp" for Linux. } }
サンプル ファイルを作成する前に、ファイル パスが存在することを確認するには、Logstash を起動します。
プラグインは、構成されたパスの
sampleFile<epoch seconds>.json
という名前のサンプル ファイルに、10 個のレコードを書き込みます。 例: c:\temp\sampleFile1648453501.json。 プラグインによって作成されるサンプル ファイルの一部を次に示します。[ { "logsource": "logstashMachine", "facility": 20, "severity_label": "Warning", "severity": 4, "timestamp": "Apr 7 08:26:04", "program": "CEF:", "host": "127.0.0.1", "facility_label": "local4", "priority": 164, "message": 0|Microsoft|Device|cef-test|example|data|1|here is some more data for the example", "ls_timestamp": "2022-04-07T08:26:04.000Z", "ls_version": "1" } ]
プラグインは、次のプロパティをすべてのレコードに自動的に追加します。
ls_timestamp
: 入力プラグインからレコードを受信した時刻ls_version
: Logstash パイプラインのバージョン。
これらのフィールドは、DCR を作成するときに削除できます。
必要な DCR リソースを作成する
Microsoft Sentinel DCR ベースの Logstash プラグインを構成するには、最初に DCR 関連のリソースを作成する必要があります。
このセクションでは、次のいずれかのシナリオで、DCR に使用するリソースを作成します。
カスタム テーブルへのインジェスト用の DCR リソースを作成する
カスタム テーブルにデータを取り込むには、次の手順のようにします (「チュートリアル: REST API (Azure portal) を使用して Azure Monitor ログにデータを送信する」に基づきます)。
前提条件については、こちらをご覧ください。
前のセクションで作成したサンプル ファイルを使って、サンプル データの解析とフィルター処理を行います。
-
サンプル データの送信ステップをスキップします。
問題が発生する場合は、トラブルシューティング手順に関する記事をご覧ください。
標準テーブルへのインジェスト用の DCR リソースを作成する
Syslog や CommonSecurityLog などの標準テーブルにデータを取り込むには、「チュートリアル: REST API (Resource Manager テンプレート) を使って Azure Monitor ログにデータを送信する」に基づくプロセスを使います。 このチュートリアルではカスタム テーブルにデータを取り込む方法が説明されていますが、標準テーブルにデータを取り込むようにプロセスを簡単に調整できます。 以下の手順では、手順での関連する変更を示しています。
前提条件については、こちらをご覧ください。
-
Log Analytics ワークスペースに新しいテーブルを作成するステップをスキップします。 標準テーブルにデータを取り込む場合、テーブルは Log Analytics で既に定義されているため、このステップは関係ありません。
DCR を作成します。 このステップでは:
- 前のセクションで作成したサンプル ファイルを提供します。
- 作成したサンプル ファイルを使って、
streamDeclarations
プロパティを定義します。 サンプル ファイル内の各フィールドに、同じ名前と適切な型を持つ対応する列が必要です (以下の例を参照)。 - カスタム テーブルの代わりに標準テーブルの名前を使って、
outputStream
プロパティの値を構成します。 カスタム テーブルとは異なり、標準テーブルの名前には_CL
サフィックスがありません。 - テーブル名のプレフィックスは、
Custom-
ではなくMicrosoft-
にする必要があります。 この例では、outputStream
プロパティの値はMicrosoft-Syslog
です。
-
サンプル データの送信ステップをスキップします。
問題が発生する場合は、トラブルシューティング手順に関する記事をご覧ください。
例: Syslog テーブルにデータを取り込む DCR
以下の点に注意してください。
streamDeclarations
列の名前と型はサンプル ファイルのフィールドと同じである必要がありますが、そのすべてを指定する必要はありません。 たとえば、次の DCR では、PRI
、type
、ls_version
フィールドはstreamDeclarations
列から省略されています。dataflows
プロパティは、入力を Syslog テーブル形式に変換し、outputStream
をMicrosoft-Syslog
に設定します。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"dataCollectionRuleName": {
"type": "String",
"metadata": {
"description": "Specifies the name of the Data Collection Rule to create."
}
},
"location": {
"defaultValue": "westus2",
"allowedValues": [
"westus2",
"eastus2",
"eastus2euap"
],
"type": "String",
"metadata": {
"description": "Specifies the location in which to create the Data Collection Rule."
}
},
"location": {
"defaultValue": "[resourceGroup().location]",
"type": "String",
"metadata": {
"description": "Specifies the location in which to create the Data Collection Rule."
}
},
"workspaceResourceId": {
"type": "String",
"metadata": {
"description": "Specifies the Azure resource ID of the Log Analytics workspace to use."
}
}
},
"resources": [
{
"type": "Microsoft.Insights/dataCollectionRules",
"apiVersion": "2021-09-01-preview",
"name": "[parameters('dataCollectionRuleName')]",
"location": "[parameters('location')]",
"properties": {
"streamDeclarations": {
"Custom-SyslogStream": {
"columns": [
{
"name": "ls_timestamp",
"type": "datetime"
}, {
"name": "timestamp",
"type": "datetime"
},
{
"name": "message",
"type": "string"
},
{
"name": "facility_label",
"type": "string"
},
{
"name": "severity_label",
"type": "string"
},
{
"name": "host",
"type": "string"
},
{
"name": "logsource",
"type": "string"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "[parameters('workspaceResourceId')]",
"name": "clv2ws1"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-SyslogStream"
],
"destinations": [
"clv2ws1"
],
"transformKql": "source | project TimeGenerated = ls_timestamp, EventTime = todatetime(timestamp), Computer = logsource, HostName = logsource, HostIP = host, SyslogMessage = message, Facility = facility_label, SeverityLevel = severity_label",
"outputStream": "Microsoft-Syslog"
}
]
}
}
],
"outputs": {
"dataCollectionRuleId": {
"type": "String",
"value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
}
}
}
Logstash 構成ファイルを構成する
ログをカスタム テーブルに取り込むように Logstash 構成ファイルを構成するには、次の値を取得します。
フィールド | 取得方法 |
---|---|
client_app_Id |
このセクションで使ったチュートリアルに従い、DCR リソースを作成するときにステップ 3 で作成した Application (client) ID の値。 |
client_app_secret |
このセクションで使ったチュートリアルに従い、DCR リソースを作成するときにステップ 5 で作成した Application (client) ID の値。 |
tenant_id |
サブスクリプションのテナント ID。 テナント ID は、[ホーム] > [Microsoft Entra ID] > [概要] > [基本情報] で確認できます。 |
data_collection_endpoint |
このセクションで使ったチュートリアルに従い、DCR リソースを作成するlogsIngestion ときのステップ 3 での URI の値。 |
dcr_immutable_id |
このセクションで使ったチュートリアルに従い、DCR リソースを作成するimmutableId ときのステップ 6 での DCR の値。 |
dcr_stream_name |
カスタム テーブルの場合は、DCR リソースを作成するときのステップ 6 で説明したように、DCR の JSON ビューに移動して、dataFlows >streams プロパティをコピーします。 以下の例の dcr_stream_name を参照してください。標準テーブルの場合、値は Custom-SyslogStream です。 |
必要な値を取得した後:
- 前のステップで作成した Logstash 構成ファイルの出力セクションを、次の例に置き換えます。
- 次の例のプレースホルダー文字列を、取得した値に置き換えます。
create_sample_file
属性をfalse
に変更します。
オプションの構成
フィールド | 説明 | 規定値 |
---|---|---|
azure_cloud |
使用されている Azure クラウドの名前を指定するために使用されます。使用可能な値は AzureCloud 、AzureChinaCloud 、AzureUSGovernment です。 |
AzureCloud |
key_names |
文字列の配列。 列のサブセットを Log Analytics に送信する場合は、このフィールドを指定します。 | なし (フィールドは空です) |
plugin_flush_interval |
Log Analytics に 2 つのメッセージを送信するときの最大時間差 (秒単位) を定義します。 | 5 |
retransmission_time |
送信が失敗したメッセージを再送信するまでの時間を秒単位で設定します。 | 10 |
compress_data |
このフィールドが True の場合、API を使う前にイベント データが圧縮されます。 高スループット パイプラインの場合に推奨されます。 |
False |
proxy |
すべての API 呼び出しに使用するプロキシ URL を指定します。 | なし (フィールドは空です) |
proxy_aad |
Microsoft Entra ID への API 呼び出しに使用するプロキシ URL を指定します。 | 'proxy' と同じ値 (フィールドが空) |
proxy_endpoint |
データ収集エンドポイントへの API 呼び出しに使用するプロキシ URL を指定します。 | 'proxy' と同じ値 (フィールドが空) |
例: 出力プラグイン構成セクション
output {
microsoft-sentinel-log-analytics-logstash-output-plugin {
client_app_Id => "<enter your client_app_id value here>"
client_app_secret => "<enter your client_app_secret value here>"
tenant_id => "<enter your tenant id here> "
data_collection_endpoint => "<enter your logsIngestion URI here> "
dcr_immutable_id => "<enter your DCR immutableId here> "
dcr_stream_name => "<enter your stream name here> "
create_sample_file=> false
sample_file_path => "c:\\temp"
proxy => "http://proxy.example.com"
}
}
Microsoft Sentinel Logstash 出力プラグインの他のパラメーターの設定については、出力プラグインの readme ファイルをご覧ください。
Note
セキュリティ上の理由から、Logstash 構成ファイルで client_app_Id
、client_app_secret
、tenant_id
、data_collection_endpoint
、dcr_immutable_id
属性を暗黙的に指定しないことをお勧めします。 この機密情報は Logstash キーストアに格納することをお勧めします。
Logstash を再起動する
更新された出力プラグイン構成で Logstash を再起動し、DCR の構成に従ってデータが適切なテーブルに取り込まれることを確認します。
Microsoft Sentinel で着信したログを表示する
メッセージが出力プラグインに送信されていることを確認します。
Microsoft Sentinel ナビゲーション メニューから [ログ] を選択します。 [テーブル] 見出しの下にある [カスタム ログ] カテゴリを展開します。 構成で (
_CL
サフィックスで) 指定したテーブルの名前を見つけてクリックします。テーブルのレコードを表示するには、テーブル名をスキーマとして使用して、テーブルに対してクエリを実行します。
出力プラグインの監査ログを監視する
Microsoft Sentinel 出力プラグインの接続とアクティビティを監視するには、適切な Logstash ログ ファイルを有効にします。 ログ ファイルの場所については、Logstash ディレクトリ レイアウトに関するドキュメントをご覧ください。
このログ ファイルにデータが表示されない場合は、いくつかのイベントをローカルで生成して送信し (入力プラグインとフィルター プラグインを使用)、出力プラグインがデータを受信していることを確認します。 Microsoft Sentinel では、出力プラグインに関連する問題のみがサポートされます。
ネットワークのセキュリティ
ネットワーク設定を定義して、Microsoft Sentinel Logstash 出力プラグインのネットワーク分離を有効にします。
仮想ネットワーク サービス タグ
Microsoft Sentinel 出力プラグインでは、Azure 仮想ネットワーク サービス タグがサポートされています。 AzureMonitor タグと AzureActiveDirectory タグの両方が必要です。
Azure 仮想ネットワークのサービス タグを使用して、ネットワーク セキュリティ グループ、Azure Firewall、ユーザー定義ルートでネットワーク アクセスの制御を定義できます。 セキュリティ規則とルートを作成するときに、特定の IP アドレスの代わりにサービス タグを使用します。 Azure 仮想ネットワークのサービス タグを使用できないシナリオについて、ファイアウォールの要件を以下に示します。
ファイアウォールの要件
Azure 仮想ネットワークのサービス タグを使用できないシナリオについて、ファイアウォールの要件を次の表に示します。
クラウド | エンドポイント | 目的 | Port | Direction | バイパス HTTPS 検査 |
---|---|---|---|---|---|
Azure Commercial | https://login.microsoftonline.com | 承認サーバー (Microsoft ID プラットフォーム) | ポート 443 | 送信 | はい |
Azure Commercial | https://<data collection endpoint name>.<Azure cloud region>.ingest.monitor.azure.com |
データ収集エンドポイント | ポート 443 | 送信 | はい |
Azure Government | https://login.microsoftonline.us | 承認サーバー (Microsoft ID プラットフォーム) | ポート 443 | 送信 | はい |
Azure Government | 上記の '.com' を '.us' に置き換えます | データ収集エンドポイント | ポート 443 | 送信 | はい |
21Vianet が運用する Microsoft Azure | https://login.chinacloudapi.cn | 承認サーバー (Microsoft ID プラットフォーム) | ポート 443 | 送信 | はい |
21Vianet が運用する Microsoft Azure | 上記の '.com' を '.cn' に置き換えます | データ収集エンドポイント | ポート 443 | 送信 | はい |
制限事項
- 標準テーブルへのインジェストは、カスタム ログ インジェストでサポートされている標準テーブルのみに制限されます。
streamDeclarations
プロパティの入力ストリームの列は、文字で始まる必要があります。 他の文字 (@
や_
など) で列を始めると、操作は失敗します。TimeGenerated
datetime フィールドは必須です。 このフィールドを KQL 変換に含める必要があります。- その他の可能性のある問題については、チュートリアルのトラブルシューティングに関するセクションをご覧ください。
次のステップ
この記事では、Logstash を使用して外部データ ソースを Microsoft Sentinel に接続する方法について説明しました。 Microsoft Sentinel の詳細については、次の記事を参照してください。
- データと潜在的な脅威を可視化する方法についての説明。
- Microsoft Sentinel を使用した脅威の検出の概要。