次の方法で共有


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 アーキテクチャの図。

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 ワークスペースに送信します。 データは、カスタム ログまたは標準テーブルに取り込まれます。

Logstash で Microsoft Sentinel 出力プラグインをデプロイする

プラグインを設定するには、次の手順のようにします

  1. 前提条件を確認します。
  2. プラグインをインストールする
  3. サンプル ファイルを作成する
  4. 必要な DCR 関連リソースを作成する
  5. Logstash 構成ファイルを構成する
  6. Logstash を再起動する
  7. Microsoft Sentinel で着信したログを表示する
  8. 出力プラグインの監査ログを監視する

前提条件

  • サポートされているバージョンの 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
      }
}
  1. 以下の出力プラグイン構成を 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. 
        }
    }
    
  2. サンプル ファイルを作成する前に、参照先のファイル パスが存在することを確認するには、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 入力プラグインを構成します。

  1. まだ 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
        }
    }
    
  2. 以下の出力プラグイン構成を 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. 
        }
    }
    
  3. サンプル ファイルを作成する前に、ファイル パスが存在することを確認するには、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 ログにデータを送信する」に基づきます)。

  1. 前提条件については、こちらをご覧ください。

  2. アプリケーションを構成する

  3. カスタム ログ テーブルを追加します

  4. 前のセクションで作成したサンプル ファイルを使って、サンプル データの解析とフィルター処理を行います。

  5. DCR から情報を収集します

  6. DCR にアクセス許可を割り当てます

    サンプル データの送信ステップをスキップします。

問題が発生する場合は、トラブルシューティング手順に関する記事をご覧ください。

標準テーブルへのインジェスト用の DCR リソースを作成する

Syslog や CommonSecurityLog などの標準テーブルにデータを取り込むには、「チュートリアル: REST API (Resource Manager テンプレート) を使って Azure Monitor ログにデータを送信する」に基づくプロセスを使います。 このチュートリアルではカスタム テーブルにデータを取り込む方法が説明されていますが、標準テーブルにデータを取り込むようにプロセスを簡単に調整できます。 以下の手順では、手順での関連する変更を示しています。

  1. 前提条件については、こちらをご覧ください。

  2. ワークスペースの詳細を収集します

  3. アプリケーションを構成します

    Log Analytics ワークスペースに新しいテーブルを作成するステップをスキップします。 標準テーブルにデータを取り込む場合、テーブルは Log Analytics で既に定義されているため、このステップは関係ありません。

  4. DCR を作成します。 このステップでは:

    • 前のセクションで作成したサンプル ファイルを提供します。
    • 作成したサンプル ファイルを使って、streamDeclarations プロパティを定義します。 サンプル ファイル内の各フィールドに、同じ名前と適切な型を持つ対応する列が必要です (以下のを参照)。
    • カスタム テーブルの代わりに標準テーブルの名前を使って、outputStream プロパティの値を構成します。 カスタム テーブルとは異なり、標準テーブルの名前には _CL サフィックスがありません。
    • テーブル名のプレフィックスは、Custom- ではなく Microsoft- にする必要があります。 この例では、outputStream プロパティの値は Microsoft-Syslog です。
  5. DCR にアクセス許可を割り当てます

    サンプル データの送信ステップをスキップします。

問題が発生する場合は、トラブルシューティング手順に関する記事をご覧ください。

例: Syslog テーブルにデータを取り込む DCR

以下の点に注意してください。

  • streamDeclarations 列の名前と型はサンプル ファイルのフィールドと同じである必要がありますが、そのすべてを指定する必要はありません。 たとえば、次の DCR では、PRItypels_version フィールドは streamDeclarations 列から省略されています。
  • dataflows プロパティは、入力を Syslog テーブル形式に変換し、outputStreamMicrosoft-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 です。

必要な値を取得した後:

  1. 前のステップで作成した Logstash 構成ファイルの出力セクションを、次の例に置き換えます。
  2. 次ののプレースホルダー文字列を、取得した値に置き換えます。
  3. create_sample_file 属性を false に変更します。

オプションの構成

フィールド 説明 規定値
azure_cloud 使用されている Azure クラウドの名前を指定するために使用されます。使用可能な値は AzureCloudAzureChinaCloudAzureUSGovernment です。 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_Idclient_app_secrettenant_iddata_collection_endpointdcr_immutable_id 属性を暗黙的に指定しないことをお勧めします。 この機密情報は Logstash キーストアに格納することをお勧めします。

Logstash を再起動する

更新された出力プラグイン構成で Logstash を再起動し、DCR の構成に従ってデータが適切なテーブルに取り込まれることを確認します。

Microsoft Sentinel で着信したログを表示する

  1. メッセージが出力プラグインに送信されていることを確認します。

  2. Microsoft Sentinel ナビゲーション メニューから [ログ] を選択します。 [テーブル] 見出しの下にある [カスタム ログ] カテゴリを展開します。 構成で (_CL サフィックスで) 指定したテーブルの名前を見つけてクリックします。

    ログの一時退避カスタム ログのスクリーンショット。

  3. テーブルのレコードを表示するには、テーブル名をスキーマとして使用して、テーブルに対してクエリを実行します。

    ログの一時退避カスタム ログ クエリのスクリーンショット。

出力プラグインの監査ログを監視する

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 送信 はい

制限事項

次のステップ

この記事では、Logstash を使用して外部データ ソースを Microsoft Sentinel に接続する方法について説明しました。 Microsoft Sentinel の詳細については、次の記事を参照してください。