Ansible AWX のログを収集する
概要
このパーサーは、Ansible AWX から JSON 形式のログデータを抽出し、Unified Data Model(UDM)に変換します。さまざまなログ形式を処理し、タイムスタンプ、IP アドレス、ホスト情報、イベントの詳細などの関連フィールドを抽出し、対応する UDM フィールドにマッピングします。また、特定のエッジケースを処理し、ラベルとメタデータでデータを拡充します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス。
- Ansible AWX への特権アクセス。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
フィードを構成する手順は次のとおりです。
- [SIEM Settings] > [Feeds] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Ansible AWX Logs)。
- [ソースタイプ] として [Webhook] を選択します。
- [Log type] として [Ansible AWX] を選択します。
- [次へ] をクリックします。
- 省略可: 次の入力パラメータの値を指定します。
- Split delimiter: ログ行を区切るために使用される区切り文字(
\n
など)。
- Split delimiter: ログ行を区切るために使用される区切り文字(
- [次へ] をクリックします。
- [Finalize] 画面でフィードの設定を確認し、[Submit] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- 秘密鍵をコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
- [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL をクライアント アプリケーション内で指定する必要があります。
- [完了] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- Split delimiter: ログ行を区切るために使用される区切り文字(
\n
など)。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- アセットの名前空間: フィードに関連付けられた名前空間。
Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
[秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
秘密鍵をコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
[詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL をクライアント アプリケーション内で指定する必要があります。
Webhook フィード用の API キーを作成する
Google Cloud コンソール > [認証情報] に移動します。
[認証情報を作成] をクリックして [API キー] を選択します。
API キーのアクセスを Google Security Operations API に制限します。
エンドポイント URL を指定する
- クライアント アプリケーション内で、Webhook フィードで提供される HTTPS エンドポイント URL を指定します。
次の形式でカスタム ヘッダーの一部として API キーと秘密鍵を指定して、認証を有効にします。
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
推奨事項: API キーは URL 内ではなくヘッダーとして指定してください。Webhook クライアントがカスタム ヘッダーをサポートしていない場合は、次の形式のクエリ パラメータを使用して API キーと秘密鍵を指定できます。
ENDPOINT_URL?key=API_KEY&secret=SECRET
以下を置き換えます。
ENDPOINT_URL
: フィード エンドポイントの URL。API_KEY
: Google Security Operations に対する認証に使用する API キー。SECRET
: フィードの認証用に生成した秘密鍵。
Ansible AWX で Webhook を構成する
- AWX インスタンスにログインします。
- [管理] の [通知] セクションに移動します。
- [追加] をクリックします。
Webhook の設定を構成します。
- 名前: Webhook のわかりやすい名前を指定します(例: Google SecOps Webhook)。
- タイプ: リストから [Webhook] を選択します。
- ターゲット URL: Google SecOps API エンドポイント URL を入力します。
- HTTP Method: [POST] を選択します。
省略可: HTTP ヘッダー: 認証またはコンテンツ タイプに必要なヘッダーを追加します。たとえば、署名なしトークンを含む
Authorization
ヘッダーを含める必要がある場合があります。特定のヘッダー要件については、Google SecOps のドキュメントをご覧ください。[保存] をクリックして、Webhook を作成します。
[リソース] の [プロジェクト] に移動します。
Webhook を関連付けるプロジェクトを選択します。
選択したプロジェクト内で、[通知] タブに移動します。
先ほど作成した Webhook 通知の Start | Success | Failure で、どのトリガーをオンにするかを選択します。
通知は、プロジェクトに関連付けられているすべてのテンプレートに適用されるようになります。各テンプレートの [通知] フィールドに移動して、手動で無効にできます。
UDM マッピング テーブル
ログフィールド | UDM マッピング | 論理 |
---|---|---|
agent.ephemeral_id |
observer.labels.value |
未加工ログの agent.ephemeral_id の値。 |
agent.hostname |
observer.hostname |
未加工ログの agent.hostname の値。 |
agent.id |
observer.asset_id |
「filebeat:」と未加工ログの agent.id の値を連結したものです。 |
agent.name |
observer.user.userid |
未加工ログの agent.name の値。 |
agent.type |
observer.application |
未加工ログの agent.type の値。 |
agent.version |
observer.platform_version |
未加工ログの agent.version の値。 |
cloud.availability_zone |
principal.resource.attribute.labels.value |
未加工ログの cloud.availability_zone の値。 |
cloud.instance.id |
principal.resource.product_object_id |
未加工ログの cloud.instance.id の値。 |
cloud.instance.name |
principal.resource.name |
未加工ログの cloud.instance.name の値。 |
cloud.machine.type |
principal.resource.attribute.labels.value |
未加工ログの cloud.machine.type の値。 |
cloud.provider |
principal.resource.attribute.labels.value |
未加工ログの cloud.provider の値。 |
event1 |
metadata.description |
未加工ログの event1 の値。event1 が存在しない場合は、message の値が使用されます。 |
event1_data.host |
principal.hostname |
未加工ログの event1_data.host の値。host_name と host が存在しない場合のフォールバックとして使用されます。 |
event1_data.remote_addr |
principal.ip |
grok パターンを使用して event1_data.remote_addr から抽出された IP アドレス。 |
event1_data.task |
security_result.detection_fields.value |
未加工ログの event1_data.task の値。 |
event1_data.task_path |
principal.process.file.full_path |
未加工ログの event1_data.task_path の値。 |
event1_data.task_uuid |
security_result.detection_fields.value |
未加工ログの event1_data.task_uuid の値。 |
event1_data.uuid |
metadata.product_log_id |
未加工ログの event1_data.uuid の値。 |
event1_display |
security_result.description |
未加工ログの event1_display の値。 |
host |
principal.hostname |
未加工ログの host の値。host_name が存在しない場合、代替として使用されます。数値の場合は文字列に変換されます。 |
host.architecture |
target.asset.hardware.cpu_platform |
未加工ログの host.architecture の値。 |
host.fqdn |
target.administrative_domain |
未加工ログの host.fqdn の値。 |
host.hostname |
target.hostname |
未加工ログの host.hostname の値。 |
host.id |
target.asset.asset_id |
「Host Id: 」と未加工ログの host.id の値を連結した値。 |
host.ip |
target.asset.ip |
未加工ログの host.ip 配列の値。 |
host.mac |
target.mac |
未加工ログの host.mac 配列の値。 |
host.os.codename |
target.asset.attribute.labels.value |
未加工ログの host.os.codename の値。 |
host.os.kernel |
target.platform_patch_level |
未加工ログの host.os.kernel の値。 |
host.os.name |
target.asset.attribute.labels.value |
未加工ログの host.os.name の値。 |
host.os.platform |
target.platform |
host.os.platform の値が「debian」の場合、UDM フィールドは「LINUX」に設定されます。 |
host.os.version |
target.platform_version |
未加工ログの host.os.version の値。 |
host_name |
principal.hostname |
未加工ログの host_name の値。 |
input.type |
network.ip_protocol |
input.type の値が「tcp」の場合、UDM フィールドは「TCP」に設定されます。 |
level |
security_result.severity |
level の値に基づいて、「DEBUG」、「INFO」、「AUDIT」は「INFORMATIONAL」に、「ERROR」は「ERROR」に、「WARNING」は「MEDIUM」にマッピングされます。 |
level |
security_result.severity_details |
未加工ログの level の値。 |
log.source.address |
principal.ip |
grok パターンを使用して log.source.address から抽出された IP アドレス。 |
log.source.address |
principal.port |
grok パターンを使用して log.source.address から抽出されたポート。 |
logger_name |
intermediary.application |
未加工ログの logger_name の値。 |
message |
metadata.description |
未加工ログの message の値。event1 が存在しない場合、代替として使用されます。 |
metadata.event_type |
metadata.event_type |
特定のフィールドの有無に基づいてパーサー ロジックによって決定されます。log.source.address と host.ip が存在する場合は「NETWORK_CONNECTION」。principal_hostname または event1_data.remote_addr が存在する場合は「STATUS_UPDATE」。それ以外の場合は「GENERIC_EVENT」。 |
metadata.log_type |
metadata.log_type |
「ANSIBLE_AWX」にハードコードされています。 |
metadata.product_name |
metadata.product_name |
「ANSIBLE_AWX」にハードコードされています。 |
metadata.vendor_name |
metadata.vendor_name |
「ANSIBLE_AWX」にハードコードされています。 |
parent_uuid |
security_result.detection_fields.value |
未加工ログの parent_uuid の値。 |
principal.resource.resource_type |
principal.resource.resource_type |
cloud.instance.name が存在する場合は「VIRTUAL_MACHINE」にハードコードされました。 |
observer.labels.key |
observer.labels.key |
「ephemeral_id」にハードコードされています。 |
principal.resource.attribute.labels.key |
principal.resource.attribute.labels.key |
マッピングされるフィールドに応じて、「machine_type」、「provider」、「availability_zone」にハードコードされます。 |
security_result.detection_fields.key |
security_result.detection_fields.key |
マッピングされるフィールドに応じて、「parent_uuid」、「task」、「task_uuid」にハードコードされます。 |
target.asset.attribute.labels.key |
target.asset.attribute.labels.key |
マッピングされるフィールドに応じて、「codename」または「os_name」にハードコードされます。 |
timestamp |
metadata.event_timestamp |
未加工ログの timestamp の値。解析され、タイムスタンプに変換されます。 |
timestamp |
timestamp |
未加工ログの timestamp の値。解析され、タイムスタンプに変換されます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。