收集 Jamf Security Cloud 記錄
本文說明如何使用 Google Cloud 儲存空間或 Amazon S3,將 Jamf Security Cloud 記錄檔擷取至 Google Security Operations。Jamf Security Cloud 是適用於 Apple 裝置的行動威脅防禦和端點安全平台。這項服務會產生威脅偵測、法規遵循和裝置安全事件記錄,涵蓋 DNS 層級防護、網路釣魚防範、內容篩選和裝置風險評估。Jamf Security Cloud 會使用資料串流匯出記錄。每項資料串流設定都會將一種資料類型傳送至一個目的地。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- Jamf Security Cloud 入口網站的特殊存取權
- 方法 1:Google Cloud 的特殊存取權 (Google Cloud Storage、Cloud Run)
- 方法 2:AWS (S3、IAM) 的特殊存取權
選取要匯出的資料串流類型
Jamf Security Cloud 剖析器支援所有六種資料串流類型。為要擷取的每種資料類型建立個別的資料串流設定:
- 威脅事件:偵測到的威脅事件,包括惡意網路通訊、惡意軟體和危險應用程式
- 網路流量:由 Jamf 網路基礎架構處理的網路流量記錄
- 存取事件:Jamf Connect 零信任網路存取 (ZTNA) 政策允許和拒絕的要求
- 裝置資料:裝置相關資訊
- 應用程式洞察:裝置上安裝的應用程式相關資訊
- 安全漏洞資料:每個發現的安全漏洞和發現安全漏洞的裝置詳細資料
方法 1: Google Cloud 儲存
Jamf Security Cloud 沒有內建 Google Cloud 儲存目的地,且 Jamf 指出系統不支援使用 HTTP 整合功能直接將資料傳送至 Google SecOps。這個方法會使用一般 HTTP 資料串流目標,將事件傳送至您擁有的 Cloud Run 函式,然後將事件寫入 Google Cloud Storage bucket。Google SecOps 接著會使用 Google Cloud Storage V2 資訊提供擷取值區。
建立 Google Cloud 儲存空間 bucket
- 前往 Google Cloud 控制台。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 jamf-security-cloud-logs)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或保留政策 點選「建立」。
為 Cloud Run 函式建立服務帳戶
- 在 GCP 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
- 按一下「Create Service Account」(建立服務帳戶)。
- 提供下列設定詳細資料:
- 服務帳戶名稱:輸入
jamf-sc-receiver-sa - 服務帳戶說明:輸入
Service account for the Cloud Run function that receives Jamf Security Cloud events
- 服務帳戶名稱:輸入
- 按一下「建立並繼續」。
- 按一下「完成」。
授予服務帳戶 bucket 存取權
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱。
- 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 提供下列設定詳細資料:
- 新增主體:輸入服務帳戶電子郵件地址 (例如
jamf-sc-receiver-sa@PROJECT_ID.iam.gserviceaccount.com) - 指派角色:選取「Storage 物件管理員」
- 新增主體:輸入服務帳戶電子郵件地址 (例如
- 按一下 [儲存]。
建立 Cloud Run 函式來接收事件
- 產生強效驗證權杖並儲存,以供日後參考 (例如執行
openssl rand -hex 32)。Jamf Security Cloud 會在要求標頭中傳送這個權杖,函式會拒絕沒有權杖的要求。 - 前往 GCP Console 的「Cloud Run」。
- 按一下「Create service」(建立服務)。
- 選取「函式」 (使用內嵌編輯器建立函式)。
在「設定」部分,提供下列設定詳細資料:
設定 值 服務名稱 jamf-sc-receiver區域 選取與 Cloud Storage bucket 相符的區域 (例如 us-central1)執行階段 選取 Python 3.12 以上版本 在「Authentication」(驗證) 部分中,選取「Allow unauthenticated invocations」(允許未經驗證的叫用)。
展開「Containers, Networking, Security」(容器、網路、安全性)。
前往「安全性」分頁:
- 服務帳戶:選取
jamf-sc-receiver-sa
- 服務帳戶:選取
前往「容器」分頁:
- 按一下「變數與密鑰」。
- 針對每個環境變數,按一下「+ 新增變數」:
變數名稱 範例值 說明 GCS_BUCKETjamf-security-cloud-logsCloud Storage Bucket 名稱 GCS_PREFIXjamf-security-cloud/記錄檔的前置字串 AUTH_TOKEN<your-generated-token>Jamf Security Cloud 在 X-Auth-Token標頭中傳送的權杖點選「建立」。
等待服務建立完成。服務建立完成後,系統會自動開啟內嵌程式碼編輯器。
在「進入點」欄位中輸入「main」。
在內嵌程式碼編輯器中,建立兩個檔案:
第一個檔案:main.py
import hashlib import os from datetime import datetime, timezone import functions_framework from google.cloud import storage BUCKET = os.environ["GCS_BUCKET"] PREFIX = os.environ.get("GCS_PREFIX", "jamf-security-cloud/") AUTH_TOKEN = os.environ["AUTH_TOKEN"] storage_client = storage.Client() @functions_framework.http def main(request): if request.headers.get("X-Auth-Token") != AUTH_TOKEN: return ("Unauthorized", 401) body = request.get_data() if not body: return ("OK", 200) now = datetime.now(timezone.utc) digest = hashlib.sha256(body).hexdigest()[:12] object_name = f"{PREFIX}{now:%Y/%m/%d}/{now:%Y%m%dT%H%M%S%f}_{digest}.json" storage_client.bucket(BUCKET).blob(object_name).upload_from_string( body, content_type="application/json" ) return ("OK", 200)第二個檔案:requirements.txt
functions-framework==3.* google-cloud-storage==2.*
按一下「儲存並重新部署」。
複製並儲存服務 URL (例如
https://jamf-sc-receiver-abc123-uc.a.run.app)。您會在下一節使用主機名稱。
在 Jamf Security Cloud 中設定一般 HTTP 資料串流
- 登入 Jamf Security Cloud 入口網站。
- 依序前往「整合」>「資料串流」。
- 按一下「新的設定」。
- 選取資料串流類型 (例如「威脅事件」)。
- 選取「一般 HTTP」做為資料串流目標類型。
- 按一下「繼續」。
- 提供下列設定詳細資料:
- 通訊協定:選取「https」
- 伺服器主機名稱/IP:輸入 Cloud Run 服務主機名稱 (例如
jamf-sc-receiver-abc123-uc.a.run.app) - 通訊埠:輸入
443 - 端點:輸入
/ - 其他標頭:按一下「新增標頭」,然後輸入名稱
X-Auth-Token,並將產生的權杖設為值
- 按一下「測試設定」,並確認測試成功。
- 按一下「啟用設定」切換鈕,啟用資料串流。
- 按一下 [儲存]。
- 如要匯出其他資料串流類型,請重複上述步驟。
擷取 Google SecOps 服務帳戶
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「JAMF Security Cloud」做為「記錄類型」。
按一下「取得服務帳戶」。系統會顯示專屬服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,您會在下一個步驟中使用此項目。
授予 Google SecOps 服務帳戶值區存取權
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱。
- 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址
- 指派角色:選取「Storage 物件檢視者」
按一下 [儲存]。
在 Google SecOps 中設定動態饋給,從 Google Cloud 儲存空間擷取資料
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Jamf Security Cloud logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「JAMF Security Cloud」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
欄位 值 儲存空間 bucket URI gs://jamf-security-cloud-logs/jamf-security-cloud/刪除來源的選項 根據偏好選取刪除選項 檔案存在時間上限 (天) 預設值為 180 天 資產命名空間 資產命名空間 擷取標籤 要套用至這個動態饋給事件的標籤 - 請將
jamf-security-cloud-logs替換成實際值區名稱。 - 請務必在 URI 結尾加上尾端斜線 (
/)。
- 請將
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
方法 2:Amazon S3
Jamf Security Cloud Data Streams 原生支援的雲端儲存空間目的地只有客戶擁有的 AWS S3。Jamf Security Cloud 會將事件直接寫入 S3 bucket,而 Google SecOps 則會使用 Amazon S3 V2 資訊提供來擷取這些事件。
為 Jamf Security Cloud 設定 AWS S3 值區和 IAM 角色
- 按照這份使用者指南建立 Amazon S3 bucket:建立 bucket
- 請儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如
jamf-security-cloud-logs)。 建立 Jamf Security Cloud 承擔的 IAM 角色,以便將資料上傳至 bucket。這個角色需要值區的
s3:PutObject權限,且 Jamf 的 AWS 帳戶必須列為信任的實體。請儲存 IAM 角色
ARN,以供日後參考。
在 Jamf Security Cloud 中設定客戶擁有的 AWS S3 資料串流
- 登入 Jamf Security Cloud 入口網站。
- 依序前往「整合」>「資料串流」。
- 按一下「新的設定」。
- 選取資料串流類型 (例如「威脅事件」)。
- 選取「客戶擁有的 AWS S3」做為資料串流目標類型。
- 按一下「繼續」。
- 提供下列設定詳細資料:
- Amazon S3 bucket name:輸入 bucket 名稱 (例如
jamf-security-cloud-logs) - Jamf 承擔的 IAM 角色:輸入您為 Jamf Security Cloud 建立的 IAM 角色 ARN
- 區域:選取 S3 值區的區域
- Amazon S3 bucket name:輸入 bucket 名稱 (例如
- 按一下「建立設定」。
選用:在「進階設定」中,選取「JSON」做為訊息格式。
按一下「啟用設定」切換鈕,啟用資料串流。
按一下 [儲存]。
如要匯出其他資料串流類型,請重複上述步驟。
為 Google SecOps 建立 IAM 使用者和存取金鑰
- 請按照這份使用者指南建立使用者:建立 IAM 使用者。
- 選取建立的「使用者」。
- 選取「安全憑證」分頁標籤。
- 在「Access Keys」部分中,按一下「Create Access Key」。
- 選取「第三方服務」做為「用途」。
- 點選「下一步」。
- 選用:新增說明標記。
- 按一下「建立存取金鑰」。
- 按一下「Download .csv file」(下載 .csv 檔案),儲存「Access Key」(存取金鑰) 和「Secret Access Key」(私密存取金鑰),以供日後參考。
- 按一下「完成」。
- 選取 [權限] 分頁標籤。
- 在「Permissions policies」(權限政策) 區段中,按一下「Add permissions」(新增權限)。
- 選取「新增權限」。
- 選取「直接附加政策」。
- 搜尋 AmazonS3FullAccess 政策。
- 選取政策。
- 點選「下一步」。
- 按一下「Add permissions」。
在 Google SecOps 中設定動態饋給,從 Amazon S3 擷取資料
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Jamf Security Cloud logs)。 - 選取「Amazon S3 V2」做為「來源類型」。
- 選取「JAMF Security Cloud」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
欄位 值 S3 URI s3://jamf-security-cloud-logs/來源刪除選項 根據偏好選取刪除選項 檔案存在時間上限 (天) 預設值為 180 天 存取金鑰 ID 具備 S3 bucket 存取權的使用者存取金鑰 存取密鑰 可存取 S3 bucket 的使用者私密金鑰 資產命名空間 資產命名空間 擷取標籤 要套用至這個動態饋給事件的標籤 - 請將
jamf-security-cloud-logs替換成實際的 S3 bucket 名稱。
- 請將
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
accessPoint_label |
additional.fields |
已合併 |
action_label |
additional.fields |
已合併 |
activated_label |
additional.fields |
已合併 |
alertId_label |
additional.fields |
已合併 |
appName_label |
additional.fields |
已合併 |
appRiskIndexThreshold_label |
additional.fields |
已合併 |
appVersion_label |
additional.fields |
已合併 |
app_id_label |
additional.fields |
已合併 |
carrierName_label |
additional.fields |
已合併 |
category_label |
additional.fields |
已合併 |
deploymentState_label |
additional.fields |
已合併 |
developer_label |
additional.fields |
已合併 |
deviceId_label |
additional.fields |
已合併 |
deviceModel_label |
additional.fields |
已合併 |
deviceName_label |
additional.fields |
已合併 |
deviceRiskIndex_label |
additional.fields |
已合併 |
device_os_label |
additional.fields |
已合併 |
device_user_name_label |
additional.fields |
已合併 |
eventTimeUtcMs_label |
additional.fields |
已合併 |
eventType_label |
additional.fields |
已合併 |
hwPlatform_label |
additional.fields |
已合併 |
imei_label |
additional.fields |
已合併 |
installationTimeUtcMs_label |
additional.fields |
已合併 |
installedBy_label |
additional.fields |
已合併 |
isoCountryCode_label |
additional.fields |
已合併 |
lastMdmCheckInUtcMs_label |
additional.fields |
已合併 |
lastNetworkTrafficUtcMs_label |
additional.fields |
已合併 |
lastUpdatedUtcMs_label |
additional.fields |
已合併 |
loc_isoCountryCode_label |
additional.fields |
已合併 |
mcc_label |
additional.fields |
已合併 |
mdmId_label |
additional.fields |
已合併 |
mnc_label |
additional.fields |
已合併 |
osVersion_label |
additional.fields |
已合併 |
packageName_label |
additional.fields |
已合併 |
parentId_label |
additional.fields |
已合併 |
parentId_label_1 |
additional.fields |
已合併 |
platform_label |
additional.fields |
已合併 |
profileId_label |
additional.fields |
已合併 |
profileName_label |
additional.fields |
已合併 |
profileStatus_label |
additional.fields |
已合併 |
recordType_label |
additional.fields |
已合併 |
resellerId_label |
additional.fields |
已合併 |
routeName_label |
additional.fields |
已合併 |
signatureId_id_label |
additional.fields |
已合併 |
signatureId_name_label |
additional.fields |
已合併 |
softwareId_label |
additional.fields |
已合併 |
softwareName_label |
additional.fields |
已合併 |
softwareVersion_label |
additional.fields |
已合併 |
ssid_label |
additional.fields |
已合併 |
system_label |
additional.fields |
已合併 |
threat_result_label |
additional.fields |
已合併 |
triggerTimeUtcMs_label |
additional.fields |
已合併 |
triggerType_label |
additional.fields |
已合併 |
types_list |
additional.fields |
已合併 |
userId_label |
additional.fields |
已合併 |
user_tld_label |
additional.fields |
已合併 |
vpnActive_label |
additional.fields |
已合併 |
wanderaAppVersion_label |
additional.fields |
已合併 |
wifiActive_label |
additional.fields |
已合併 |
event_data.receiptTime |
metadata.collected_timestamp |
直接對應 |
event_data.cve.description |
metadata.description |
直接對應 |
event_data_event_dataType_description |
metadata.description |
直接對應 |
event_data.timestamp |
metadata.event_timestamp |
已剖析為 yyyy-MM-ddTHH:mm:ss.SSSZ |
has_principal |
metadata.event_type |
已對應:true → STATUS_UPDATE |
has_user |
metadata.event_type |
已對應:true → USER_UNCATEGORIZED |
event_data.md1.product |
metadata.product_event_type |
直接對應 |
md1.product |
metadata.product_event_type |
直接對應 |
event_data.device.externalId |
metadata.product_log_id |
直接對應 |
event_data.externalId |
metadata.product_log_id |
直接對應 |
md1.product |
metadata.product_name |
直接對應 |
event_data.md1.schemaVersion |
metadata.product_version |
直接對應 |
schemaVersion |
metadata.product_version |
直接對應 |
dns_answers |
network.dns.answers |
已合併 |
dns_questions |
network.dns.questions |
已合併 |
event_data.domain |
principal.administrative_domain |
直接對應 |
event_data.application |
principal.application |
直接對應 |
event_data.hostName |
principal.asset.hostname |
直接對應 |
event_data.source.ip |
principal.asset.ip |
已合併 |
event_data.device.userDeviceName |
principal.hostname |
直接對應 |
event_data.hostName |
principal.hostname |
直接對應 |
event_data.source.ip |
principal.ip |
已合併 |
event_data.source.port |
principal.port |
已重新命名/對應 |
event_data_event_dataType_id |
principal.process.pid |
直接對應 |
event_data.cve.consoleUrl |
principal.url |
直接對應 |
event_data.event_dataUrl |
principal.url |
直接對應 |
device.user.email |
principal.user.email_addresses |
已合併 |
event_data.user.userEmail |
principal.user.email_addresses |
已合併 |
event_data.account.name |
principal.user.user_display_name |
直接對應 |
event_data.user.userName |
principal.user.user_display_name |
直接對應 |
customer.customerId |
principal.user.userid |
直接對應 |
customerId |
principal.user.userid |
直接對應 |
device.user.email |
principal.user.userid |
直接對應 |
event_data.account.customerId |
principal.user.userid |
直接對應 |
event_data.customerId |
principal.user.userid |
直接對應 |
actionforBlocked |
security_result.action |
已合併 |
event_data_event_dataType_name |
security_result.description |
直接對應 |
attribution_label |
security_result.detection_fields |
已合併 |
baseScore_label |
security_result.detection_fields |
已合併 |
cve_id_label |
security_result.detection_fields |
已合併 |
exploitAvailable_label |
security_result.detection_fields |
已合併 |
permission_label |
security_result.detection_fields |
已合併 |
threats_label |
security_result.detection_fields |
已合併 |
event_data.cve.severity |
security_result.severity |
直接對應 |
event_data.blockReason |
security_result.summary |
直接對應 |
event_data.cve.cveDetailUrl |
security_result.url_back_to_product |
直接對應 |
event_data.device.deviceId |
target.asset.asset_id |
直接對應 |
event_data.destination.name |
target.asset.hostname |
直接對應 |
device.carrier.ipAddress |
target.asset.ip |
已合併 |
device.network.assignedIp |
target.asset.ip |
已合併 |
device.network.publicIp |
target.asset.ip |
已合併 |
event_data.destination.ip |
target.asset.ip |
已合併 |
event_data.destinationIp |
target.asset.ip |
已合併 |
ip |
target.asset.ip |
已合併 |
app_id_md5 |
target.file.md5 |
直接對應 |
app_id_sha1 |
target.file.sha1 |
直接對應 |
app_id_sha256 |
target.file.sha256 |
直接對應 |
event_data.destination.name |
target.hostname |
直接對應 |
device.carrier.ipAddress |
target.ip |
已合併 |
device.network.assignedIp |
target.ip |
已合併 |
device.network.publicIp |
target.ip |
已合併 |
event_data.destination.ip |
target.ip |
已合併 |
event_data.destinationIp |
target.ip |
已合併 |
ip |
target.ip |
已合併 |
device.location.countryName |
target.location.country_or_region |
直接對應 |
event_data.location |
target.location.name |
直接對應 |
device.hw.wifiMacAddress |
target.mac |
已合併 |
device.network.bssid |
target.mac |
已合併 |
event_data.accessPointBssid |
target.mac |
已合併 |
event_data_device_os_osVersion |
target.platform_version |
直接對應 |
event_data.destination.port |
target.port |
已重新命名/對應 |
event_data.device.deviceName |
target.resource.name |
直接對應 |
event_data.user.email |
target.user.email_addresses |
已合併 |
event_data.user.email |
target.user.userid |
直接對應 |
event_data.user.name |
target.user.userid |
直接對應 |
| 不適用 | metadata.event_type |
常數:STATUS_UPDATE |
| 不適用 | metadata.product_name |
常數:JAMF_SECURITY_CLOUD |
| 不適用 | metadata.vendor_name |
常數:JAMF_SECURITY_CLOUD |
| 不適用 | security_result.severity |
常數:INFORMATIONAL |
| 不適用 | target.platform |
常數:WINDOWS |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。