Elastic Auditbeat ログを収集する
このドキュメントでは、Amazon S3 を使用して Elastic Auditbeat ログを Google Security Operations に取り込む方法について説明します。パーサーは JSON ログからフィールドを抽出し、統合データモデル(UDM)に正規化して、ホスト情報、ネットワークの詳細、セキュリティ結果の分類などの追加コンテキストでデータを拡充します。event1.action
などのフィールドを特定の UDM メタデータ イベントタイプにマッピングすることで、さまざまなイベントタイプを処理します。可能な場合は、デフォルトで GENERIC_EVENT
またはより具体的なカテゴリが使用されます。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス。
- Elastic Auditbeat サーバーへの特権アクセス。
- Logstash サーバーへの特権アクセス。
- AWS(S3、Identity and Access Management(IAM))への特権アクセス。
Elastic Auditbeat の前提条件を取得する
- Elastic Auditbeat がサーバーにインストールされ、構成されていることを確認します。
- 専用サーバーまたは Auditbeat とともに Logstash をインストールします。
- Auditbeat 構成ファイルの場所(通常は
/etc/auditbeat/auditbeat.yml
)をメモします。
Google SecOps 用に AWS S3 バケットと IAM を構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- 後で参照できるように、バケットの名前とリージョンを保存します(例:
elastic-auditbeat-logs
)。 - IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成したユーザーを選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] として [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [.csv ファイルをダウンロード] をクリックし、[アクセスキー] と [シークレット アクセスキー] を保存して、今後の参照に備えます。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションの [権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索します。
- ポリシーを選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
Logstash に送信するように Auditbeat を構成する
- Auditbeat 構成ファイル
/etc/auditbeat/auditbeat.yml
を編集します。 - 既存の出力構成(Elasticsearch など)をコメントアウトします。
Logstash 出力構成を追加します。
# ==================== Outputs ==================== output.logstash: hosts: ["localhost:5044"] # If Logstash is on a different server, use its IP/hostname # hosts: ["logstash-server:5044"] # Optional: Enable load balancing if using multiple Logstash instances loadbalance: true # Optional: Configure bulk settings (default is 2048) bulk_max_size: 2048 # Optional: Configure SSL if needed # ssl.enabled: true # ssl.certificate_authorities: ["/path/to/ca.crt"]
Auditbeat を再起動して変更を適用します。
sudo systemctl restart auditbeat
Logstash パイプラインを構成する
新しい Logstash パイプライン構成ファイル
/etc/logstash/conf.d/auditbeat-to-s3.conf
を作成します。input { beats { port => 5044 # Optional: Configure SSL # ssl => true # ssl_certificate => "/path/to/server.crt" # ssl_key => "/path/to/server.key" } } filter { # Add any necessary transformations here # The data should remain in raw JSON format for Chronicle parsing # Optional: Add metadata for debugging mutate { add_field => { "[@metadata][pipeline]" => "auditbeat-to-s3" } } } output { s3 { # AWS credentials access_key_id => "YOUR_AWS_ACCESS_KEY_ID" secret_access_key => "YOUR_AWS_SECRET_ACCESS_KEY" # S3 bucket configuration region => "us-east-1" # Replace with your bucket region bucket => "elastic-auditbeat-logs" # Replace with your bucket name # Organize logs by date using Logstash timestamp interpolation prefix => "auditbeat/%{+YYYY}/%{+MM}/%{+dd}/" # File rotation settings size_file => 10485760 # 10MB files time_file => 5 # Rotate every 5 minutes # Compression for cost optimization encoding => "gzip" # Output format - keep as JSON for Chronicle codec => "json_lines" # Optional: Server-side encryption # server_side_encryption => true # server_side_encryption_algorithm => "AES256" } # Optional: Keep a local copy for debugging # stdout { # codec => rubydebug # } }
YOUR_AWS_ACCESS_KEY_ID
とYOUR_AWS_SECRET_ACCESS_KEY
は、実際の AWS 認証情報に置き換えます。- S3 構成に合わせて
region
とbucket
の値を更新します。 - Logstash を起動または再起動します。
sudo systemctl restart logstash
(省略可)Google SecOps 用の読み取り専用の IAM ユーザーと鍵を作成する
- AWS コンソール > IAM > ユーザーに移動します。
- [ユーザーを追加] をクリックします。
- 次の構成の詳細を入力します。
- ユーザー: 「
secops-reader
」と入力します。 - アクセスの種類: [アクセスキー - プログラムによるアクセス] を選択します。
- ユーザー: 「
- [ユーザーを作成] をクリックします。
- 最小限の読み取りポリシー(カスタム)を関連付ける: [ユーザー] > [secops-reader] > [権限] > [権限を追加] > [ポリシーを直接関連付ける] > [ポリシーを作成]。
JSON:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::elastic-auditbeat-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::elastic-auditbeat-logs" } ] }
名前 =
secops-reader-policy
。[ポリシーを作成> 検索/選択> 次へ> 権限を追加] をクリックします。
secops-reader
のアクセスキーを作成します。[セキュリティ認証情報] > [アクセスキー] に移動します。[アクセスキーを作成] をクリックします。
.CSV
をダウンロードします。(これらの値はフィードに貼り付けます)。
Elastic Auditbeat のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [+ 新しいフィードを追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Elastic Auditbeat Logs
)。 - [ソースタイプ] として [Amazon S3 V2] を選択します。
- [ログタイプ] として [Elastic Audit Beats] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- S3 URI:
s3://elastic-auditbeat-logs/auditbeat/
- Source deletion options: 必要に応じて削除オプションを選択します。
- ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
- アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
- シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
- アセットの名前空間: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- S3 URI:
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
@timestamp |
metadata.event_timestamp |
イベントのタイムスタンプは @timestamp フィールドから解析されます。 |
agent.id |
observer.asset_id |
「agent_id: 」の接頭辞が付いています。 |
agent.type |
observer.application |
オブザーバー アプリケーションはエージェント タイプに設定されます。 |
agent.version |
observer.platform_version |
オブザーバー プラットフォームのバージョンは、エージェントのバージョンに設定されます。 |
client.bytes |
principal.labels |
キー「Bytes」のラベルとして追加されます。文字列に変換されます。 |
client.ip |
principal.ip |
プリンシパル IP がクライアント IP に設定されます。 |
client.packets |
principal.labels |
キー「Packets」のラベルとして追加されます。文字列に変換されます。 |
client.port |
principal.port |
プリンシパル ポートはクライアント ポートに設定されます。整数に変換されます。 |
cloud.availability_zone |
principal.cloud.availability_zone |
プリンシパル クラウドの可用性ゾーンがクラウドの可用性ゾーンに設定されます。 |
cloud.instance.id |
principal.resource.id |
プリンシパル リソース ID はクラウド インスタンス ID に設定されます。 |
cloud.machine.type |
principal.resource.resource_subtype |
プリンシパル リソース サブタイプは、クラウド マシンタイプに設定されます。 |
cloud.region |
principal.cloud.availability_zone |
クラウド リージョンが存在する場合、アベイラビリティ ゾーンはオーバーライドされます。 |
destination.bytes |
target.labels |
キー「Bytes」のラベルとして追加されます。文字列に変換されます。 |
destination.ip |
target.ip |
ターゲット IP は宛先 IP に設定されます。 |
destination.packets |
target.labels |
キー「Packets」のラベルとして追加されます。文字列に変換されます。 |
destination.port |
target.port |
ターゲット ポートは宛先ポートに設定されます。整数に変換されます。 |
ecs.version |
metadata.product_version |
存在する場合は、jsonPayload.@metadata.version の値をオーバーライドします。 |
event1.category |
security_result.category_details |
すべての値が category_details に追加されます。 |
event1.duration |
network.session_duration.seconds |
整数に変換されます。 |
event1.id |
metadata.product_log_id |
メタデータ プロダクトログ ID がイベント ID に設定されます。 |
event1.outcome |
extensions.auth.auth_details |
認証の詳細はイベントの結果に設定されます。 |
file.extension |
target.file.mime_type |
ターゲット ファイルの MIME タイプはファイル拡張子に設定されます。 |
file.hash.sha1 |
target.file.sha1 |
ターゲット ファイルの SHA-1 は、ファイルの SHA-1 ハッシュに設定されます。 |
file.path |
target.file.full_path |
ターゲット ファイルのフルパスがパスに設定されます。 |
file.size |
target.file.size |
uinteger に変換されます。 |
group.id |
principal.group.product_object_id |
プリンシパル グループの商品オブジェクト ID がグループ ID に設定されます。 |
group.name |
principal.group.group_display_name |
プリンシパル グループの表示名はグループ名に設定されます。 |
host.architecture |
principal.asset.hardware.cpu_platform |
一時変数 hardware.cpu_platform に保存され、principal.asset.hardware に統合されます。 |
host.hostname |
principal.hostname |
プリンシパルのホスト名はホストのホスト名に設定されます。 |
host.id |
principal.asset.asset_id |
「Host Id: 」の接頭辞が付いています。 |
host.ip |
principal.asset.ip |
すべての値がプリンシパル アセットの IP に追加されます。 |
host.mac |
principal.mac |
ダッシュはコロンに置き換えられます。 |
host.name |
principal.hostname 、observer.hostname |
存在する場合は、host.hostname の値をオーバーライドします。 |
host.os.kernel |
principal.platform_patch_level |
プリンシパル プラットフォームのパッチレベルは、ホスト OS カーネルに設定されます。 |
host.os.version |
principal.platform_version |
プリンシパル プラットフォーム バージョンは、ホスト OS バージョンに設定されます。一時変数 host_os_version に保存されます。 |
httpRequest.remoteIp |
target.ip |
この値が存在し、他のターゲット IP が設定されていない場合は、この値が使用されます。 |
httpRequest.requestMethod |
network.http.method |
ネットワーク HTTP メソッドが HTTP リクエスト メソッドに設定されます。 |
httpRequest.requestSize |
network.sent_bytes |
uinteger に変換されます。 |
httpRequest.requestUrl |
network.http.referral_url |
ネットワーク HTTP リファラル URL が HTTP リクエスト URL に設定されます。 |
httpRequest.responseSize |
network.received_bytes |
uinteger に変換されます。 |
httpRequest.serverIp |
principal.ip |
この値が存在し、他のプリンシパル IP が設定されていない場合は、この値が使用されます。 |
httpRequest.status |
network.http.response_code |
整数に変換されます。 |
httpRequest.userAgent |
network.http.user_agent |
ネットワーク HTTP ユーザー エージェントが HTTP リクエスト ユーザー エージェントに設定されます。 |
insertId |
network.session_id |
ネットワーク セッション ID は挿入 ID に設定されます。 |
jsonPayload.@metadata.beat |
metadata.product_event_type |
メタデータ プロダクト イベントタイプはメタデータ ビートに設定されます。 |
jsonPayload.@metadata.version |
metadata.product_version |
メタデータ プロダクト バージョンがメタデータ バージョンに設定されます。 |
jsonPayload.destination.ip |
target.ip |
この値が存在し、他のターゲット IP が設定されていない場合は、この値が使用されます。 |
jsonPayload.destination.port |
target.port |
この値が存在し、他のターゲット ポートが設定されていない場合は、この値が使用されます。整数に変換されます。 |
jsonPayload.event1.category |
security_result.category_details |
すべての値が category_details に追加されます。 |
jsonPayload.file.path |
target.file.full_path |
この値が存在し、他のターゲット パスが設定されていない場合は、この値が使用されます。 |
jsonPayload.process.executable |
principal.process.file.full_path 、target.process.file.full_path |
他の値が存在しない場合に、プリンシパルとターゲット プロセスの両方のフルパスを設定するために使用されます。 |
jsonPayload.process.name |
principal.application |
この値が存在し、他のプリンシパル アプリケーションが設定されていない場合、この値が使用されます。 |
jsonPayload.process.parent.pid |
principal.process.pid |
存在し、他のプリンシパル プロセス PID が設定されていない場合、この値が使用されます。文字列に変換されます。 |
jsonPayload.process.parent.ppid |
principal.process.parent_process.pid |
この値が存在し、他のプリンシパルの親プロセス PID が設定されていない場合、この値が使用されます。文字列に変換されます。 |
jsonPayload.process.parent.process.executable |
principal.process.file.full_path |
この値が存在し、他のプリンシパル プロセスのフルパスが設定されていない場合、この値が使用されます。 |
jsonPayload.process.parent.process.exe |
principal.process.file.full_path |
この値が存在し、他のプリンシパル プロセスのフルパスが設定されていない場合、この値が使用されます。 |
jsonPayload.process.parent.process.title |
principal.process.command_line |
この値が存在し、他のプリンシパル プロセス コマンドラインが設定されていない場合、この値が使用されます。 |
jsonPayload.process.pid |
target.process.pid |
ターゲット プロセスの PID が JSON ペイロードのプロセス PID に設定されます。 |
jsonPayload.process.title |
target.process.command_line |
ターゲット プロセスのコマンドラインは、JSON ペイロードのプロセス タイトルに設定されます。 |
jsonPayload.user.id |
target.user.userid |
この値が存在し、他のターゲット ユーザー ID が設定されていない場合は、この値が使用されます。文字列に変換されます。 |
jsonPayload.user.name |
target.user.user_display_name |
この値が存在し、他のターゲット ユーザーの表示名が設定されていない場合は、この値が使用されます。 |
msg |
metadata.description |
メタデータの説明がメッセージに設定されます。 |
network.bytes |
network.sent_bytes |
uinteger に変換されます。 |
network.community_id |
network.community_id |
ネットワーク コミュニティ ID は、ネットワーク コミュニティ ID に設定されます。 |
network.transport |
network.ip_protocol |
大文字に変換されました。 |
package.description |
security_result.description |
セキュリティ結果の説明は、パッケージの説明に設定されます。 |
package.name |
security_result.rule_name |
セキュリティ結果のルール名はパッケージ名に設定されます。 |
package.reference |
security_result.about.url |
セキュリティ結果の URL がパッケージ参照に設定されます。 |
package.size |
security_result.about.file.size |
uinteger に変換されます。 |
package.type |
security_result.about.file.mime_type 、security_result.rule_type |
セキュリティ結果の MIME タイプとルールタイプはパッケージ タイプに設定されます。 |
process.created |
principal.asset.creation_time |
存在する場合、この値が使用されます。ISO8601 として解析されます。 |
process.entity_id |
principal.process.product_specific_process_id |
「Process:」の接頭辞が付いています。 |
process.executable |
principal.process.file.full_path 、target.process.file.full_path |
他の値が存在しない場合に、プリンシパルとターゲット プロセスの両方のフルパスを設定するために使用されます。 |
process.hash.sha1 |
principal.process.file.sha1 |
プリンシパル プロセスの SHA-1 がプロセス SHA-1 ハッシュに設定されます。 |
process.name |
principal.application |
この値が存在し、他のプリンシパル アプリケーションが設定されていない場合、この値が使用されます。 |
process.pid |
principal.process.pid |
存在し、他のプリンシパル プロセス PID が設定されていない場合、この値が使用されます。文字列に変換されます。 |
process.ppid |
principal.process.parent_process.pid |
この値が存在し、他のプリンシパルの親プロセス PID が設定されていない場合、この値が使用されます。文字列に変換されます。 |
process.start |
principal.asset.creation_time |
process.created が存在せず、このフィールドが存在する場合、この値が使用されます。ISO8601 として解析されます。 |
resource.labels.backend_service_name |
target.resource.name |
ターゲット リソース名は、リソース バックエンド サービス名に設定されます。 |
resource.labels.forwarding_rule_name |
target.resource.attribute.labels |
キー「Forwarding rule name」のラベルとして追加されます。 |
resource.labels.project_id |
target.resource.product_object_id |
ターゲット リソース プロダクト オブジェクト ID がリソース プロジェクト ID に設定されます。 |
resource.labels.target_proxy_name |
target.resource.attribute.labels |
キー「Target proxy name」のラベルとして追加されます。 |
resource.labels.url_map_name |
target.resource.attribute.labels |
キー「URL map name」のラベルとして追加されます。 |
server.bytes |
intermediary.labels |
キー「Bytes」のラベルとして追加されます。文字列に変換されます。 |
server.ip |
intermediary.ip |
仲介 IP はサーバー IP に設定されます。 |
server.packets |
intermediary.labels |
キー「Packets」のラベルとして追加されます。文字列に変換されます。 |
server.port |
intermediary.port |
仲介ポートはサーバーポートに設定されます。整数に変換されます。 |
service.type |
target.application |
ターゲット アプリケーションはサービスタイプに設定されます。 |
source.bytes |
src.labels |
キー「Bytes」のラベルとして追加されます。文字列に変換されます。 |
source.ip |
src.ip |
送信元 IP が送信元 IP に設定されます。 |
source.packets |
src.labels |
キー「Packets」のラベルとして追加されます。文字列に変換されます。 |
source.port |
src.port |
送信元ポートは送信元ポートに設定されます。整数に変換されます。 |
system.audit.host.boottime |
about.asset.last_boot_time |
ISO8601 として解析されます。 |
system.audit.host.hostname |
about.hostname |
about hostname がシステム監査ホストのホスト名に設定されます。 |
system.audit.host.id |
principal.user.userid |
プリンシパル ユーザー ID はシステム監査ホスト ID に設定されます。 |
system.audit.host.mac.0 |
about.mac |
about MAC アドレスは、最初のシステム監査ホストの MAC アドレスに設定されます。 |
trace |
target.process.file.full_path |
この値が存在し、他のターゲット プロセスのフルパスが設定されていない場合は、この値が使用されます。 |
user.effective.id |
target.user.userid |
この値が存在し、他のターゲット ユーザー ID が設定されていない場合は、この値が使用されます。 |
user.effective.name |
target.user.user_display_name |
この値が存在し、他のターゲット ユーザーの表示名が設定されていない場合は、この値が使用されます。 |
user.id |
target.user.userid |
この値が存在し、他のターゲット ユーザー ID が設定されていない場合は、この値が使用されます。文字列に変換されます。 |
user.name |
target.user.user_display_name |
この値が存在し、他のターゲット ユーザーの表示名が設定されていない場合は、この値が使用されます。 |
なし | metadata.event_type |
最初は「GENERIC_EVENT」に設定されます。パーサーコードのコメントに記載されているロジックに基づいて変更されました。 |
なし | metadata.log_type |
「ELASTIC_AUDITBEAT」に設定されます。 |
なし | metadata.product_name |
「Auditbeat」に設定します。 |
なし | metadata.vendor_name |
「Elastic」に設定します。 |
なし | extensions.auth.type |
USER_LOGIN イベントと USER_LOGOUT イベントの場合は、「AUTHTYPE_UNSPECIFIED」に設定されます。 |
auditd.data.syscall |
metadata.product_event_type |
メタデータ プロダクト イベントタイプは auditd syscall に設定されます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。