VanDyke VShell SFTP ログを収集する
このドキュメントでは、Syslog で Bindplane を使用するか、ログシッパーで Amazon S3 を使用して、VanDyke VShell SFTP ログを Google Security Operations に取り込む方法について説明します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- VanDyke VShell サーバーまたは管理コンソールへの特権アクセス
- オプション 1 の場合: Bindplane エージェント用の
systemdを備えた Windows 2016 以降または Linux ホスト - オプション 2 の場合: S3 アクセス権を持つ AWS アカウントと、VShell サーバー上の NXLog / Fluent Bit
Bindplane エージェントの Google SecOps 認証情報を取得する
Bindplane エージェントを Google SecOps に対して認証するには、次のいずれかの方法を選択します。
- 新規デプロイ: Chronicle API を使用します(オプション 1)。
- 以前のデプロイ: 2027 年 7 月 20 日に Ingestion API が廃止されるまで、取り込み認証ファイル(オプション 2)を引き続き使用します。
オプション 1: Chronicle API のサービス アカウントを作成する(推奨)
- Google Cloud コンソールにログインし、Google SecOps インスタンスにリンクされている Google Cloud プロジェクトを選択します。
- [IAM と管理] > [サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- 次の構成情報を指定します。
- サービス アカウント名: アカウントの名前を入力します(例:
bindplane-ingest)。 - サービス アカウントの説明: 説明を入力します(例:
Bindplane agent log ingestion)。
- サービス アカウント名: アカウントの名前を入力します(例:
- [作成して続行] をクリックします。
- [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、[ロールを選択] をクリックし、[Chronicle 編集者] を選択します。
- [続行] をクリックして [完了] をクリックします。
- 作成したサービス アカウントをクリックし、[キー] タブに移動します。
- [鍵を追加] > [新しい鍵を作成] の順にクリックします。
- [JSON] を選択し、[作成] をクリックします。鍵ファイルがパソコンにダウンロードされます。
- 鍵ファイルを
ingestion-auth.jsonとして Bindplane コレクタ ディレクトリ(Linux の場合は/opt/observiq-otel-collector/ingestion-auth.json、Windows の場合はC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json)に保存するか、config.yamlのcreds_file_pathを更新して、保存先のパスと一致させます。 - [IAM と管理] > [設定] に移動し、プロジェクト番号をコピーします。これはエクスポータの構成に必要です。
オプション 2: 取り込み認証ファイルをダウンロードする(レガシー)
- Google SecOps コンソールにログインします。
- [設定] > [データ管理] > [収集エージェント] に移動します。SIEM のみのプラットフォームを使用している場合は、[設定] > [収集エージェント] に移動します。
- 取り込み認証ファイルをダウンロードします。
- Bindplane エージェントがインストールされるシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [Settings] > [Administration] > [Profile] に移動します。SIEM のみのプラットフォームを使用している場合は、[設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
オプション 1: Bindplane と Syslog を介した統合
このオプションは、最小限のレイテンシでリアルタイムのログ ストリーミングを提供し、ほとんどのデプロイにおすすめです。
Bindplane エージェントをインストールする
次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。
Windows へのインストール
- 管理者として コマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux へのインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
その他のインストール リソース
その他のインストール オプションについては、Bindplane エージェントのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように BindPlane エージェントを構成する
構成ファイルにアクセスします。
config.yamlファイルを見つけます。通常、Linux の場合は/opt/observiq-otel-collector/ディレクトリ、Windows の場合はインストール ディレクトリにあります。- テキスト エディタ(
nano、vi、メモ帳など)を使用してファイルを開きます。
config.yamlファイルを次のように編集します。receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: protocol: https # Region of your instance, for example us, europe, asia-southeast1 location: <LOCATION> # Project number of the Google Cloud project linked to the instance project: '<PROJECT_NUMBER>' compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: chronicle.googleapis.com # Custom log type - requires parser extension log_type: 'VANDYKE_SFTP' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels- 自社のインフラストラクチャでの必要性に応じて、ポートと IP アドレスを置き換えます。
<LOCATION>は、Google SecOps インスタンスのリージョン(us、europe、asia-southeast1など)に置き換えます。エクスポーターは、chronicle.googleapis.comの先頭にこの値を付加します。<PROJECT_NUMBER>は、[IAM と管理] > [設定] のプロジェクト番号に置き換えます。YOUR_CUSTOMER_IDは、実際のお客様 ID に置き換えます。/path/to/ingestion-authentication-file.jsonを、サービス アカウント キー ファイル(オプション 1)が保存されたファイルパスに更新します。- UDP ではなく TCP の場合は、
udplogをtcplogに置き換えます。
以前の Ingestion API エクスポータ
オプション 2 の取り込み認証ファイルを使用する場合は、
exportersブロックを次のように置き換えます。creds_file_pathを取り込み認証ファイルのパスに設定します。インスタンスが米国以外にある場合は、malachiteingestion-pa.googleapis.comをリージョン エンドポイント(例:europe-malachiteingestion-pa.googleapis.com)に置き換えます。exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Custom log type - requires parser extension log_type: 'VANDYKE_SFTP' raw_log_field: body ingestion_labels:
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。
sudo systemctl restart observiq-otel-collectorWindows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。
net stop observiq-otel-collector && net start observiq-otel-collector
VanDyke VShell で Syslog 転送を構成する
Windows の VShell の場合
- VShell コントロール パネル にサインインします。
- [ロギング] 設定に移動します。
- リモート syslog ロギングを構成します。
- リモート syslog サーバーへのロギングを有効にします。
- サーバー アドレス: Bindplane の IP アドレスを入力します。
- ポート: 514(または構成済みのポート)を入力します。
- プロトコル: [UDP](または構成されている場合は TCP)を選択します。
- メッセージ グループ: [接続]、[認証]、[SFTP]、[FTPS]、[HTTPS]、[エラー]、[警告]、[情報] を選択します。
- [Apply] > [OK] をクリックします。
Linux / macOS の VShell の場合
- vshelld_config ファイル(通常は
/etc/vshell/vshelld_config)を編集します。 次のパラメータを構成します。
SyslogFacility LOG_LOCAL3 LogLevel INFOLOG_LOCAL3 を Bindplane エージェントに転送するようにシステムの syslog を構成します。
/etc/rsyslog.confまたは/etc/syslog-ng/syslog-ng.confを編集します。local3.* @bindplane-agent-ip:514(UDP の場合)またはlocal3.* @@bindplane-agent-ip:514(TCP の場合)を追加します。
VShell サービスと syslog サービスを再起動します。
sudo systemctl restart vshelld sudo systemctl restart rsyslog
オプション 2: AWS S3 を介した統合
このオプションは、ログのアーカイブが必要な環境や、直接の syslog 転送が不可能な環境で役立ちます。AWS Lambda はオンプレミス ファイルにアクセスできないため、VShell サーバーにログシッパーが必要であることに注意してください。
Google SecOps 用に AWS S3 バケットと IAM を構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- バケットの名前とリージョンを保存して、後で参照できるようにします(例:
vandyke-sftp-logs)。 - IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成したユーザーを選択します。
- [セキュリティ認証情報] タブを選択します。
- [Access Keys] セクションで [Create Access Key] をクリックします。
- [ユースケース] として [サードパーティのサービス] を選択します。
- [Next] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [.csv ファイルをダウンロード] をクリックし、[アクセスキー] と [シークレット アクセスキー] を保存して、今後の参照に備えます。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで [権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索します。
- ポリシーを選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
VShell サーバーに Log Shipper をインストールして構成する
オペレーティング システムに応じて、次のいずれかのオプションを選択します。
オプション A: NXLog を使用する(Windows)
- nxlog.co から NXLog Community Edition をダウンロードしてインストールします。
C:\Program Files\nxlog\conf\nxlog.confを編集:<Extension json> Module xm_json </Extension> <Extension syslog> Module xm_syslog </Extension> <Input vshell_log> Module im_file File "C:\\Program Files\\VanDyke Software\\VShell\\Log\\VShell.log" SavePos TRUE <Exec> # Parse VShell log format if $raw_event =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) "(.*)"$/ { $EventTime = $1; $Protocol = $2; $EventType = $3; $SessionID = $4; $ClientIP = $5; $ClientPort = $6; $Username = $7; $Filename = $9; $BytesDown = $10; $BytesUp = $11; $ServerIP = $14; $ServerPort = $15; $EventMessage = $16; # Convert to JSON to_json(); } </Exec> </Input> <Output s3> Module om_exec Command C:\scripts\upload_to_s3.ps1 Args %FILEPATH% </Output> <Route vshell_to_s3> Path vshell_log => s3 </Route>PowerShell スクリプト
C:\scripts\upload_to_s3.ps1を作成します。param([string]$FilePath) $bucket = "vandyke-sftp-logs" $key = "vshell/$(Get-Date -Format 'yyyy/MM/dd/HH')/$(Get-Date -Format 'yyyyMMddHHmmss').json" # Batch logs $logs = Get-Content $FilePath | ConvertFrom-Json $jsonLines = $logs | ForEach-Object { $_ | ConvertTo-Json -Compress } $content = $jsonLines -join "`n" # Upload to S3 Write-S3Object -BucketName $bucket -Key $key -Content $content -ProfileName defaultAWS 認証情報プロファイルを作成します。
Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs defaultタスク スケジューラを使用して、PowerShell スクリプトを 5 分ごとに実行するようにスケジュールします。
オプション B: Fluent Bit を使用する(Linux)
Fluent Bit をインストールします。
curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh/etc/fluent-bit/fluent-bit.confを構成します。[SERVICE] Flush 5 Daemon On Log_Level info [INPUT] Name tail Path /var/log/vshell/vshell.log Parser vshell_parser Tag vshell.* Refresh_Interval 5 Mem_Buf_Limit 10MB [PARSER] Name vshell_parser Format regex Regex ^(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?<protocol>\S+) (?<event_type>\S+) (?<session_id>\S+) (?<client_ip>\S+) (?<client_port>\S+) (?<username>\S+) (?<dash>\S+) (?<filename>\S+) (?<bytes_down>\S+) (?<bytes_up>\S+) (?<field1>\S+) (?<field2>\S+) (?<server_ip>\S+) (?<server_port>\S+) "(?<event_message>[^"]*)" [OUTPUT] Name s3 Match vshell.* bucket vandyke-sftp-logs region us-east-1 use_put_object On total_file_size 5M upload_timeout 10s compression gzip s3_key_format /vshell/%Y/%m/%d/%H/%{hostname}_%{uuid}.json.gzAWS 認証情報を構成します。
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEYFluent Bit を起動します。
sudo systemctl enable fluent-bit sudo systemctl start fluent-bit
VanDyke VShell のログを取り込むように Google SecOps でフィードを構成する
- [設定] > [データ管理] > [フィード] に移動します。SIEM のみのプラットフォームを使用している場合は、[設定] > [フィード] に移動します。
- [+ Add New Feed] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
VanDyke VShell SFTP logs)。 - [ソースタイプ] として [Amazon S3 V2] を選択します。
- [ログタイプ](カスタム)として [VanDyke SFTP] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- S3 URI:
s3://vandyke-sftp-logs/vshell/ - Source deletion options: 必要に応じて、[Retain](推奨)または削除オプションを選択します。
- ファイルの最長存続期間: 過去数日間に変更されたファイルを含めます。デフォルトは 180 日です。
- アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
- シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
- Asset namespace: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- S3 URI:
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
agent.id |
read_only_udm.observer.asset_id |
「filebeat:」を agent.id フィールドの値と連結します。 |
agent.type |
read_only_udm.observer.application |
agent.type フィールドの値を直接マッピングします。 |
agent.version |
read_only_udm.observer.platform_version |
agent.version フィールドの値を直接マッピングします。 |
ecs.version |
read_only_udm.metadata.product_version |
ecs.version フィールドの値を直接マッピングします。 |
host.architecture |
read_only_udm.target.asset.hardware.cpu_platform |
host.architecture フィールドの値を直接マッピングします。 |
host.hostname |
read_only_udm.target.hostname |
host.hostname フィールドの値を直接マッピングします。 |
host.id |
read_only_udm.principal.asset_id |
「VANDYKE_SFTP:」を host.id フィールドの値と連結します。 |
host.ip |
read_only_udm.target.ip |
host.ip 配列内の各 IP アドレスを個別の read_only_udm.target.ip フィールドに直接マッピングします。 |
host.mac |
read_only_udm.target.mac |
host.mac 配列内の各 MAC アドレスを個別の read_only_udm.target.mac フィールドに直接マッピングします。 |
host.os.kernel |
read_only_udm.target.platform_patch_level |
host.os.kernel フィールドの値を直接マッピングします。 |
host.os.platform |
read_only_udm.target.platform |
値に基づいて、host.os.platform の値を WINDOWS、LINUX、MAC、または UNKNOWN_PLATFORM にマッピングします。 |
host.os.version |
read_only_udm.target.platform_version |
host.os.version フィールドの値を直接マッピングします。 |
log.file.path |
read_only_udm.principal.process.file.full_path |
log.file.path フィールドの値を直接マッピングします。 |
logstash.collect.timestamp |
read_only_udm.metadata.collected_timestamp |
logstash.collect.timestamp フィールドからタイムスタンプを解析し、タイムスタンプ オブジェクトに変換します。 |
logstash.irm_environment |
read_only_udm.additional.fields.value.string_value |
logstash.irm_environment フィールドの値を直接マッピングします。キーが「irm_environment」に設定されます。 |
logstash.irm_region |
read_only_udm.additional.fields.value.string_value |
logstash.irm_region フィールドの値を直接マッピングします。キーは「irm_region」に設定されます。 |
logstash.irm_site |
read_only_udm.additional.fields.value.string_value |
logstash.irm_site フィールドの値を直接マッピングします。キーは「irm_site」に設定されます。 |
logstash.process.host |
read_only_udm.observer.hostname |
logstash.process.host フィールドの値を直接マッピングします。 |
message |
grok パターンと正規表現を使用してさまざまなフィールドを抽出するために使用されます。 | |
read_only_udm.metadata.event_type |
「NETWORK_FTP」に設定 | |
read_only_udm.metadata.log_type |
「VANDYKE_SFTP」に設定します。 | |
read_only_udm.metadata.product_event_type |
Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
read_only_udm.metadata.product_name |
「VANDYKE_SFTP」に設定します。 | |
read_only_udm.metadata.vendor_name |
「VANDYKE SOFTWARE」に設定 | |
read_only_udm.network.application_protocol |
説明フィールドに「SSH2」または「SSH」が含まれている場合は「SSH」に設定します。それ以外の場合、メソッド フィールドが HTTP メソッドと一致する場合は「HTTP」に設定します。 | |
read_only_udm.network.http.method |
一般的な HTTP メソッドに一致する場合にのみ、grok パターンを使用してメッセージ フィールドから抽出されます。 | |
read_only_udm.network.http.referral_url |
Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
read_only_udm.network.http.response_code |
Grok パターンを使用してメッセージ フィールドから抽出され、整数に変換されます。 | |
read_only_udm.network.ip_protocol |
説明フィールドに「TCP」が含まれている場合は「TCP」に設定されます。 | |
read_only_udm.principal.ip |
Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
read_only_udm.principal.port |
Grok パターンを使用してメッセージ フィールドから抽出され、整数に変換されます。 | |
read_only_udm.security_result.description |
Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
read_only_udm.security_result.severity |
syslog_severity が「error」または「warning」の場合は「HIGH」、「notice」の場合は「MEDIUM」、「information」または「info」の場合は「LOW」に設定します。 | |
read_only_udm.security_result.severity_details |
syslog_severity フィールドの値を直接マッピングします。 | |
read_only_udm.target.ip |
Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
read_only_udm.target.port |
Grok パターンを使用してメッセージ フィールドから抽出され、整数に変換されます。 | |
read_only_udm.target.process.pid |
Grok パターンを使用してメッセージ フィールドから抽出されます。 | |
syslog_severity |
security_result の重大度を判断するために使用されます。 | |
username |
event.idm.read_only_udm.target.user.userid |
変更履歴からマッピング |
username |
event.idm.read_only_udm.target.user.user_display_name |
変更履歴からマッピング |
id |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
reason |
security_result.summary |
変更履歴からマッピング |
srcip |
principal.ip |
変更履歴からマッピング |
username |
principal.user.user_display_name |
変更履歴からマッピング |
変更ログ
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。