收集 Versa Networks Secure Access Service Edge (SASE) 記錄
本文說明如何收集 Versa Networks Secure Access Service Edge (SASE) 記錄。剖析器會在初始 grok 篩選器後擷取鍵/值組合。接著,這些值會對應至統一資料模型 (UDM),處理各種記錄格式 (例如防火牆事件、應用程式記錄和警報記錄),並針對特定欄位 (例如 IP 通訊協定和風險評分) 執行轉換和擴充作業。
事前準備
- 確認您有 Google Security Operations 執行個體。
- 確認您使用的是 Windows 2016 以上版本,或是搭載
systemd
的 Linux 主機。 - 如果透過 Proxy 執行,請確認防火牆通訊埠已開啟。
- 確認您具備 Versa SASE 的特殊權限。
取得 Google SecOps 擷取驗證檔案
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「收集代理程式」。
- 下載擷取驗證檔案。將檔案安全地儲存在要安裝 Bindplane 代理程式的系統上。
取得 Google SecOps 客戶 ID
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「設定檔」。
- 複製並儲存「機構詳細資料」專區中的客戶 ID。
安裝 Bindplane 代理程式
Windows 安裝
- 以系統管理員身分開啟「命令提示字元」或「PowerShell」。
執行下列指令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 安裝
- 開啟具有根層級或 sudo 權限的終端機。
執行下列指令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
其他安裝資源
- 如需其他安裝選項,請參閱這份安裝指南。
設定 Bindplane 代理程式,擷取系統記錄檔並傳送至 Google SecOps
存取設定檔:
- 找出
config.yaml
檔案。通常位於 Linux 的/etc/bindplane-agent/
目錄,或 Windows 的安裝目錄。 - 使用文字編輯器 (例如
nano
、vi
或記事本) 開啟檔案。
- 找出
按照下列方式編輯
config.yaml
檔案:receivers: tcplog: # Replace the port and IP address as required listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: `/path/to/ingestion-authentication-file.json` # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: SYSLOG namespace: versa_networks_sase raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
視基礎架構需求,替換通訊埠和 IP 位址。
將
<customer_id>
替換為實際的客戶 ID。將
/path/to/ingestion-authentication-file.json
更新為「取得 Google SecOps 擷取驗證檔案」一節中儲存驗證檔案的路徑。
重新啟動 Bindplane 代理程式,以套用變更
在 Linux 中,如要重新啟動 Bindplane 代理程式,請執行下列指令:
sudo systemctl restart bindplane-agent
在 Windows 中,如要重新啟動 Bindplane 代理程式,可以使用「服務」主控台,也可以輸入下列指令:
net stop BindPlaneAgent && net start BindPlaneAgent
設定 Versa Networks SASE
管理員必須在每個 Versa Analytics 節點上設定遠端收集器,才能將記錄轉送至第三方系統。
如要設定 Versa Analytics 節點,請按照下列步驟操作:
- 啟用記錄轉送功能
- 啟用工作階段 ID 記錄功能
啟用記錄轉送功能
- 登入 Versa Analytics 伺服器。
- 執行
cli
指令,前往 CLI。 - 執行
configure
指令,切換至「設定模式」,然後輸入load merge terminal
。 複製並貼上下列指令,設定記錄轉送:
- 將
<collector_ip>
和<collector_port>
替換為系統記錄收集器 (Bindplane) 的 IP 位址和通訊埠。
set system analytics log-collector-exporter destination-address <collector_ip> set system analytics log-collector-exporter destination-port <collector_port> set system analytics log-collector-exporter transport tcp set system analytics log-collector-exporter log-types firewall-log set system analytics log-collector-exporter log-types threat-log commit
- 將
儲存設定:
save
啟用工作階段 ID 記錄功能
如要記錄 IP 相關資訊,請啟用工作階段 ID 記錄功能。
- 登入 Versa Director。
- 切換至「導演模式」。
- 依序前往「Configuration」>「Devices」>「Tenant」>「Device」,存取「Appliance View」。
- 依序選取「Configuration」>「Others」>「System」>「Configuration」>「Configuration」。
- 在「參數」窗格中,按一下「編輯」。
- 在「編輯參數」視窗中,選取「LEF」。
在「Firewall」(防火牆) 專區中,選取「Include session ID logging」(包含工作階段 ID 記錄) 核取方塊。
按一下 [確定]。
UDM 對應表
記錄欄位 | UDM 對應 | 邏輯 |
---|---|---|
accCkt |
additional.fields[].key : "accCkt"additional.fields[].value.string_value : accCkt |
直接從 accCkt 欄位取得的值。 |
accCktId |
additional.fields[].key : "accCktId"additional.fields[].value.string_value : accCktId |
直接從 accCktId 欄位取得的值。 |
accCktName |
additional.fields[].key : "accCktName"additional.fields[].value.string_value : accCktName |
直接從 accCktName 欄位取得的值。 |
accessType |
additional.fields[].key : "accessType"additional.fields[].value.string_value : accessType |
直接從 accessType 欄位取得的值。 |
action |
security_result.action :action |
如果 action 、type 、idpAction 、avAction 或 urlAction 為「允許」,則為 ALLOW 。如果 action 、type 、idpAction 、avAction 或 urlAction 為「拒絕」、「捨棄」、「封鎖」或「拒絕」,則為 BLOCK 。如果 idpAction 是其他值,則為 UNKNOWN_ACTION 。 |
alarmCause |
security_result.detection_fields[].key : "alarmCause"security_result.detection_fields[].value : alarmCause |
直接從 alarmCause 欄位取得的值。 |
alarmClass |
security_result.detection_fields[].key :「alarmClass」security_result.detection_fields[].value :alarmClass |
直接從 alarmClass 欄位取得的值。 |
alarmClearable |
security_result.detection_fields[].key : "alarmClearable"security_result.detection_fields[].value : alarmClearable |
直接從 alarmClearable 欄位取得的值。 |
alarmEventType |
metadata.product_event_type :alarmEventType |
直接從 alarmEventType 欄位取得的值。 |
alarmKey |
security_result.detection_fields[].key :「alarmKey」security_result.detection_fields[].value :alarmKey |
直接從 alarmKey 欄位取得的值。 |
alarmKind |
security_result.detection_fields[].key : "alarmKind"security_result.detection_fields[].value : alarmKind |
直接從 alarmKind 欄位取得的值。 |
alarmOwner |
security_result.detection_fields[].key : "alarmOwner"security_result.detection_fields[].value : alarmOwner |
直接從 alarmOwner 欄位取得的值。 |
alarmSeqNo |
security_result.detection_fields[].key : "alarmSeqNo"security_result.detection_fields[].value : alarmSeqNo |
直接從 alarmSeqNo 欄位取得的值。 |
alarmSeverity |
security_result.severity_details :alarmSeverity |
直接從 alarmSeverity 欄位取得的值。 |
alarmText |
security_result.summary :alarmText |
直接從 alarmText 欄位取得的值,並移除雙引號。 |
alarmType |
security_result.description :alarmType |
直接從 alarmType 欄位取得的值。 |
appFamily |
metadata.product_event_type :appFamily security_result.detection_fields[].key :「appFamily」security_result.detection_fields[].value :appFamily |
直接從 appFamily 欄位取得的值。 |
appId |
security_result.detection_fields[].key : "Application ID"security_result.detection_fields[].value : appId |
直接從 appId 欄位取得的值。 |
appIdStr |
security_result.detection_fields[].key : "appIdStr"security_result.detection_fields[].value : appIdStr |
直接從 appIdStr 欄位取得的值。 |
applianceName |
principal.hostname :applianceName |
直接取自 applianceName 、siteName 或 site 欄位的值。 |
appProductivity |
security_result.detection_fields[].key : "appProductivity"security_result.detection_fields[].value : appProductivity |
直接從 appProductivity 欄位取得的值。 |
appRisk |
security_result.severity_details :appRisk |
直接從 appRisk 欄位取得的值。 |
appSubFamily |
security_result.detection_fields[].key : "appSubFamily"security_result.detection_fields[].value : appSubFamily |
直接從 appSubFamily 欄位取得的值。 |
avAccuracy |
additional.fields[].key : "avAccuracy"additional.fields[].value.string_value : avAccuracy |
直接從 avAccuracy 欄位取得的值。 |
avAction |
security_result.action :avAction |
如需邏輯,請參閱 action 。 |
avMalwareName |
security_result.threat_name :avMalwareName |
直接從 avMalwareName 欄位取得的值。 |
avMalwareType |
security_result.category_details :avMalwareType |
直接從 avMalwareType 欄位取得的值。 |
classMsg |
security_result.description :classMsg |
直接從 classMsg 欄位取得的值,並移除雙引號。 |
clientIPv4Address |
target.ip :clientIPv4Address |
直接從 clientIPv4Address 欄位取得的值。 |
destIp |
target.ip :destIp destinationIPv4Address :destIp |
直接從 destIp 欄位取得的值。 |
destinationIPv4Address |
target.ip :destinationIPv4Address |
直接取自 destinationIPv4Address 的值,或從 networkPrefix 欄位衍生而來。 |
destinationIPv6Address |
target.ip :destinationIPv6Address |
直接從 destinationIPv6Address 欄位取得的值。 |
destinationPort |
target.port :destinationPort |
直接從 destinationPort 欄位取得值,並轉換為整數。 |
destinationTransportPort |
target.port :destinationTransportPort |
直接從 destinationTransportPort 欄位取得值,並轉換為整數。 |
deviceKey |
about.resource.attribute.labels[].key : "deviceKey"about.resource.attribute.labels[].value : deviceKey |
如果不是「Unknown」,則直接從 deviceKey 欄位取得值。 |
deviceName |
about.resource.attribute.labels[].key :「deviceName」about.resource.attribute.labels[].value :deviceName |
如果不是「Unknown」,則直接從 deviceName 欄位取得值。 |
duration |
network.session_duration.seconds :duration |
直接從 duration 欄位取得值,並轉換為整數。 |
egressInterfaceName |
additional.fields[].key :「egressInterfaceName」additional.fields[].value.string_value :egressInterfaceName |
直接從 egressInterfaceName 欄位取得的值。 |
event.type |
metadata.event_type :event.type |
如果同時存在 applianceName (或 sourceIPv4Address 、user 、sourceIPv6Address ) 和 destinationIPv4Address (或 remoteSite 、destinationIPv6Address 、clientIPv4Address 、hostname ),則為 NETWORK_CONNECTION 。否則為 STATUS_UPDATE 。如果 applianceName 為空,則為 GENERIC_EVENT 。 |
eventType |
principal.resource.attribute.labels[].key : "eventType"principal.resource.attribute.labels[].value : eventType |
直接從 eventType 欄位取得的值。 |
family |
security_result.detection_fields[].key :「family」security_result.detection_fields[].value :family |
直接從 family 欄位取得的值。 |
fc |
security_result.detection_fields[].key : "ForwardingClass"security_result.detection_fields[].value : fc |
直接從 fc 欄位取得的值。 |
fileTransDir |
additional.fields[].key : "fileTransDir"additional.fields[].value.string_value : fileTransDir |
直接從 fileTransDir 欄位取得的值。 |
filename |
target.file.names :filename |
直接從 filename 欄位取得的值。 |
flowCookie |
metadata.collected_timestamp :flowCookie |
直接從 flowCookie 欄位取得值,並使用 UNIX 格式轉換為時間戳記。 |
flowId |
principal.resource.product_object_id :flowId |
直接從 flowId 欄位取得的值。 |
forwardForwardingClass |
security_result.detection_fields[].key : "forwardForwardingClass"security_result.detection_fields[].value : forwardForwardingClass |
直接從 forwardForwardingClass 欄位取得的值。 |
fromCountry |
principal.location.country_or_region :fromCountry target.location.country_or_region :fromCountry |
直接從 fromCountry 欄位取得的值。 |
fromUser |
principal.user.userid :fromUser |
如果「fromUser 」欄位不為空、不是「unknown」或「Unknown」,則值會直接取自該欄位。 |
fromZone |
additional.fields[].key : "fromZone"additional.fields[].value.string_value : fromZone |
直接從 fromZone 欄位取得的值。 |
generateTime |
metadata.collected_timestamp :generateTime |
直接從 generateTime 欄位取得值,並使用 UNIX 格式轉換為時間戳記。 |
hostname |
target.hostname :hostname |
直接從 hostname 欄位取得的值。 |
httpUrl |
target.url :httpUrl |
直接從 httpUrl 欄位取得的值。 |
icmpTypeIPv4 |
additional.fields[].key : "icmpTypeIPv4"additional.fields[].value.string_value : icmpTypeIPv4 |
直接從 icmpTypeIPv4 欄位取得的值。 |
idpAction |
security_result.action :idpAction |
如需邏輯,請參閱 action 。 |
ingressInterfaceName |
additional.fields[].key : "ingressInterfaceName"additional.fields[].value.string_value : ingressInterfaceName |
直接從 ingressInterfaceName 欄位取得的值。 |
ipsApplication |
additional.fields[].key : "ipsApplication"additional.fields[].value.string_value : ipsApplication |
直接從 ipsApplication 欄位取得的值。 |
ipsDirection |
security_result.detection_fields[].key : "ipsDirection"security_result.detection_fields[].value : ipsDirection |
直接從 ipsDirection 欄位取得的值。 |
ipsProfile |
security_result.detection_fields[].key : "ipsProfile"security_result.detection_fields[].value : ipsProfile |
直接從 ipsProfile 欄位取得的值。 |
ipsProfileRule |
security_result.rule_name :ipsProfileRule |
直接從 ipsProfileRule 欄位取得的值。 |
ipsProtocol |
network.ip_protocol :ipsProtocol |
直接從 ipsProtocol 欄位取得的值。 |
log_type |
metadata.description :log_type metadata.log_type :log_type |
直接從 log_type 欄位取得的值。 |
mstatsTimeBlock |
metadata.collected_timestamp :mstatsTimeBlock |
直接從 mstatsTimeBlock 欄位取得值,並使用 UNIX 格式轉換為時間戳記。 |
mstatsTotRecvdOctets |
network.received_bytes :mstatsTotRecvdOctets |
直接從 mstatsTotRecvdOctets 欄位取得值,並轉換為無正負號整數。 |
mstatsTotSentOctets |
network.sent_bytes :mstatsTotSentOctets |
直接從 mstatsTotSentOctets 欄位取得值,並轉換為無正負號整數。 |
mstatsTotSessCount |
additional.fields[].key : "mstatsTotSessCount"additional.fields[].value.string_value : mstatsTotSessCount |
直接從 mstatsTotSessCount 欄位取得的值。 |
mstatsTotSessDuration |
network.session_duration.seconds :mstatsTotSessDuration |
直接從 mstatsTotSessDuration 欄位取得值,並轉換為整數。 |
mstatsType |
security_result.category_details :mstatsType |
直接從 mstatsType 欄位取得的值。 |
networkPrefix |
target.ip :networkPrefix target.port :networkPrefix |
從 networkPrefix 欄位擷取的 IP 位址。從 networkPrefix 欄位擷取並轉換為整數的連接埠。 |
protocolIdentifier |
network.ip_protocol :protocolIdentifier |
直接從 protocolIdentifier 欄位取得值,轉換為整數,然後使用查閱功能對應至 IP 通訊協定名稱。 |
recvdOctets |
network.received_bytes :recvdOctets |
直接從 recvdOctets 欄位取得值,並轉換為無正負號整數。 |
recvdPackets |
network.received_packets :recvdPackets |
直接從 recvdPackets 欄位取得值,並轉換為整數。 |
remoteSite |
target.hostname :remoteSite |
直接從 remoteSite 欄位取得的值。 |
reverseForwardingClass |
security_result.detection_fields[].key : "reverseForwardingClass"security_result.detection_fields[].value : reverseForwardingClass |
直接從 reverseForwardingClass 欄位取得的值。 |
risk |
security_result.risk_score :risk |
直接從 risk 欄位取得值,並轉換為浮點數。 |
rule |
security_result.rule_name :rule |
直接從 rule 欄位取得的值。 |
sentOctets |
network.sent_bytes :sentOctets |
直接從 sentOctets 欄位取得值,並轉換為無正負號整數。 |
sentPackets |
network.sent_packets :sentPackets |
直接從 sentPackets 欄位取得值,並轉換為整數。 |
serialNum |
security_result.detection_fields[].key : "serialNum"security_result.detection_fields[].value : serialNum |
直接從 serialNum 欄位取得的值。 |
signatureId |
security_result.detection_fields[].key : "signatureID"security_result.detection_fields[].value : signatureId |
直接從 signatureId 欄位取得的值。 |
signatureMsg |
security_result.detection_fields[].key : "signatureMsg"security_result.detection_fields[].value : signatureMsg |
直接從 signatureMsg 欄位取得的值。 |
signaturePriority |
security_result.severity :signaturePriority |
如果 signaturePriority 為「low」(不區分大小寫),則為 LOW 。如果 signaturePriority 為「medium」(不區分大小寫),則 MEDIUM 。如果 signaturePriority 為「high」(不區分大小寫),則為 HIGH 。 |
site |
principal.hostname :site applianceName :site |
直接從 site 欄位取得的值。 |
siteId |
additional.fields[].key : "siteId"additional.fields[].value.string_value : siteId |
直接從 siteId 欄位取得的值。 |
siteName |
principal.hostname :siteName applianceName :siteName |
直接從 siteName 欄位取得的值。 |
sourceIPv4Address |
principal.ip :sourceIPv4Address |
直接從 sourceIPv4Address 欄位取得的值。 |
sourceIPv6Address |
principal.ip :sourceIPv6Address |
直接從 sourceIPv6Address 欄位取得的值。 |
sourcePort |
principal.port :sourcePort |
直接從 sourcePort 欄位取得值,並轉換為整數。 |
sourceTransportPort |
principal.port :sourceTransportPort |
直接從 sourceTransportPort 欄位取得值,並轉換為整數。 |
subFamily |
security_result.detection_fields[].key : "subFamily"security_result.detection_fields[].value : subFamily |
直接從 subFamily 欄位取得的值。 |
tcpConnAborted |
additional.fields[].key : "tcpConnAborted"additional.fields[].value.string_value : tcpConnAborted |
如果 tcpConnAborted 欄位不為空白或「0」,則直接從該欄位取得值。 |
tcpConnRefused |
additional.fields[].key : "tcpConnRefused"additional.fields[].value.string_value : tcpConnRefused |
如果 tcpConnRefused 欄位不為空白或「0」,則直接從該欄位取得值。 |
tcpPktsFwd |
network.sent_packets :tcpPktsFwd |
直接從 tcpPktsFwd 欄位取得值,並轉換為整數。 |
tcpPktsRev |
network.received_packets :tcpPktsRev |
直接從 tcpPktsRev 欄位取得值,並轉換為整數。 |
tcpReXmitFwd |
additional.fields[].key : "tcpReXmitFwd"additional.fields[].value.string_value : tcpReXmitFwd |
如果 tcpReXmitFwd 欄位不為空白或「0」,則直接從該欄位取得值。 |
tcpReXmitRev |
additional.fields[].key : "tcpReXmitRev"additional.fields[].value.string_value : tcpReXmitRev |
如果 tcpReXmitRev 欄位不為空白或「0」,則直接從該欄位取得值。 |
tcpSAA |
additional.fields[].key : "tcpSAA"additional.fields[].value.string_value : tcpSAA |
如果 tcpSAA 欄位不為空白或「0」,則直接從該欄位取得值。 |
tcpSSA |
additional.fields[].key : "tcpSSA"additional.fields[].value.string_value : tcpSSA |
如果 tcpSSA 欄位不為空白或「0」,則直接從該欄位取得值。 |
tcpSessCnt |
additional.fields[].key : "tcpSessCnt"additional.fields[].value.string_value : tcpSessCnt |
直接從 tcpSessCnt 欄位取得的值。 |
tcpSessDur |
network.session_duration.seconds :tcpSessDur |
直接從 tcpSessDur 欄位取得值,並轉換為整數。 |
tcpSynAckReXmit |
additional.fields[].key : "tcpSynAckReXmit"additional.fields[].value.string_value : tcpSynAckReXmit |
如果 tcpSynAckReXmit 欄位不為空白或「0」,則直接從該欄位取得值。 |
tcpSynReXmit |
additional.fields[].key : "tcpSynReXmit"additional.fields[].value.string_value : tcpSynReXmit |
如果 tcpSynReXmit 欄位不為空白或「0」,則直接從該欄位取得值。 |
tcpTWHS |
additional.fields[].key : "tcpTWHS"additional.fields[].value.string_value : tcpTWHS |
如果 tcpTWHS 欄位不為空白或「0」,則直接從該欄位取得值。 |
tenantId |
principal.resource.attribute.labels[].key : "tenantId"principal.resource.attribute.labels[].value : tenantId |
直接從 tenantId 欄位取得的值。 |
tenantName |
observer.hostname :tenantName |
直接從 tenantName 欄位取得的值。 |
threatType |
security_result.detection_fields[].key : "threatType"security_result.detection_fields[].value : threatType |
直接從 threatType 欄位取得的值。 |
toCountry |
target.location.country_or_region :toCountry |
直接從 toCountry 欄位取得的值。 |
toZone |
additional.fields[].key : "toZone"additional.fields[].value.string_value : toZone |
直接從 toZone 欄位取得的值。 |
traffType |
additional.fields[].key : "traffType"additional.fields[].value.string_value : traffType |
直接從 traffType 欄位取得的值。 |
ts |
metadata.event_timestamp :ts |
直接從 ts 欄位取得值,並轉換為時間戳記。 |
type |
security_result.action :type |
如需邏輯,請參閱 action 。 |
urlAction |
security_result.action :urlAction |
如需邏輯,請參閱 action 。 |
urlActionMessage |
security_result.summary :urlActionMessage |
直接從 urlActionMessage 欄位取得的值。 |
urlCategory |
principal.resource.attribute.labels[].key : "urlCategory"principal.resource.attribute.labels[].value : urlCategory |
直接從 urlCategory 欄位取得的值。 |
urlProfile |
additional.fields[].key : "urlProfile"additional.fields[].value.string_value : urlProfile |
直接從 urlProfile 欄位取得的值。 |
urlReputation |
security_result.severity_details :urlReputation |
直接從 urlReputation 欄位取得的值。 |
user |
principal.ip :user |
直接從 user 欄位取得的值。 |
vsnId |
principal.resource.attribute.labels[].key : "vsnId"principal.resource.attribute.labels[].value : vsnId |
直接從 vsnId 欄位取得的值。硬式編碼值。硬式編碼值。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。