收集 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 存储桶。然后,Google SecOps 会使用 Google Cloud Storage V2 Feed 注入存储桶。

创建 Google Cloud 存储桶

  1. 前往 Google Cloud 控制台。
  2. 选择您的项目或创建一个新项目。
  3. 在导航菜单中,前往 Cloud Storage > 存储桶。
  4. 点击创建存储分区。
  5. 提供以下配置详细信息:

    设置 值
    指定存储桶的名称 输入一个全局唯一的名称(例如 jamf-security-cloud-logs)
    位置类型 根据您的需求进行选择(单区域、双区域、多区域)
    位置 选择位置(例如 us-central1)
    存储类别 标准(推荐用于频繁访问的日志)
    访问权限控制 统一(推荐)
    保护工具 可选:启用对象版本控制或保留政策
  6. 点击创建。

为 Cloud Run 函数创建服务账号

  1. 在 GCP 控制台中,前往 IAM 和管理 > 服务账号。
  2. 点击创建服务账号。
  3. 提供以下配置详细信息:
    • 服务账号名称:输入 jamf-sc-receiver-sa
    • 服务账号说明:输入 Service account for the Cloud Run function that receives Jamf Security Cloud events
  4. 点击创建并继续。
  5. 点击完成。

向服务账号授予对存储桶的访问权限

  1. 前往 Cloud Storage > 存储桶。
  2. 点击您的存储桶名称。
  3. 前往权限标签页。
  4. 点击授予访问权限。
  5. 提供以下配置详细信息:
    • 添加主账号:输入服务账号邮箱(例如 jamf-sc-receiver-sa@PROJECT_ID.iam.gserviceaccount.com)
    • 分配角色:选择 Storage Object Admin
  6. 点击保存。

创建 Cloud Run 函数以接收事件

  1. 生成一个强身份验证令牌并保存,以供日后参考(例如,运行 openssl rand -hex 32)。Jamf Security Cloud 会在请求标头中发送此令牌,如果请求中不包含此令牌,函数会拒绝该请求。
  2. 在 GCP 控制台中,前往 Cloud Run。
  3. 点击创建服务。
  4. 选择函数(使用直接修改器创建函数)。
  5. 在配置部分中,提供以下配置详细信息:

    设置 值
    Service 名称 jamf-sc-receiver
    区域 选择与您的 Cloud Storage 存储桶匹配的区域(例如 us-central1)
    运行时 选择 Python 3.12 或更高版本
  6. 在身份验证部分中,选择允许未通过身份验证的调用。

  7. 展开容器、网络、安全性。

  8. 前往安全标签页:

    • 服务账号:选择 jamf-sc-receiver-sa
  9. 前往容器标签页:

    1. 点击变量和密钥。
    2. 针对每个环境变量,点击 + 添加变量:
    变量名称 示例值 说明
    GCS_BUCKET jamf-security-cloud-logs Cloud Storage 存储桶名称
    GCS_PREFIX jamf-security-cloud/ 日志文件的前缀
    AUTH_TOKEN <your-generated-token> Jamf Security Cloud 在 X-Auth-Token 标头中发送的令牌
  10. 点击创建。

  11. 等待服务创建完成。创建服务后,内嵌代码编辑器会自动打开。

  12. 在入口点字段中输入 main。

  13. 在内嵌代码编辑器中,创建两个文件:

    • 第一个文件: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.*
      
  14. 点击保存并重新部署。

  15. 复制并保存服务网址(例如 https://jamf-sc-receiver-abc123-uc.a.run.app)。您将在下一部分中使用主机名。

在 Jamf Security Cloud 中配置通用 HTTP 数据流

  1. 登录 Jamf Security Cloud 门户。
  2. 依次前往集成 > 数据流。
  3. 点击新配置。
  4. 选择数据流类型(例如威胁事件)。
  5. 选择通用 HTTP 作为数据流目标类型。
  6. 点击继续。
  7. 提供以下配置详细信息:
    • 协议:选择 https
    • 服务器主机名/IP:输入 Cloud Run 服务主机名(例如 jamf-sc-receiver-abc123-uc.a.run.app)
    • 端口:输入 443
    • 端点:输入 /
    • 其他标头:点击添加标头,然后输入名称 X-Auth-Token,并将生成的令牌作为值
  8. 点击测试配置,并验证测试是否成功。
  9. 点击启用配置切换开关以激活数据流。
  10. 点击保存。
  11. 针对要导出的每种其他数据流类型,重复上述步骤。

检索 Google SecOps 服务账号

  1. 登录 Google SecOps 控制台。
  2. 依次前往设置 > 数据管理 > Feed。如果您使用的是仅 SIEM 平台,请依次前往设置 > Feed。
  3. 点击添加新新闻信息流。
  4. 点击配置单个 Feed。
  5. 选择 Google Cloud Storage V2 作为来源类型。
  6. 选择 JAMF Security Cloud 作为日志类型。
  7. 点击获取服务账号。系统会显示一个专属的服务账号邮箱,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 复制此邮箱。您将在下一步中用到它。

向 Google SecOps 服务账号授予对存储桶的访问权限

  1. 前往 Cloud Storage > 存储桶。
  2. 点击您的存储桶名称。
  3. 前往权限标签页。
  4. 点击授予访问权限。
  5. 提供以下配置详细信息:
    • 添加主账号:粘贴 Google SecOps 服务账号邮箱
    • 分配角色:选择 Storage Object Viewer
  6. 点击保存。

在 Google SecOps 中配置 Feed,以从 Google Cloud 存储空间注入数据

  1. 依次前往设置 > 数据管理 > Feed。如果您使用的是仅 SIEM 平台,请依次前往设置 > Feed。
  2. 点击添加新新闻信息流。
  3. 点击配置单个 Feed。
  4. 在 Feed 名称字段中,输入 Feed 的名称(例如 Jamf Security Cloud logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型。
  6. 选择 JAMF Security Cloud 作为日志类型。
  7. 点击下一步。
  8. 为以下输入参数指定值:

    字段 值
    存储桶 URI gs://jamf-security-cloud-logs/jamf-security-cloud/
    来源删除选项 根据您的偏好选择删除选项
    文件存在时间上限(天数) 默认值为 180 天
    资产命名空间 资产命名空间
    提取标签 要应用于此 Feed 中事件的标签
    • 将 jamf-security-cloud-logs 替换为您的实际存储桶名称。
    • 请务必在 URI 末尾添加尾随斜杠 (/)。
  9. 点击下一步。

  10. 在最终确定界面中查看新的新闻信息流配置,然后点击提交。

方法 2:Amazon S3

客户自有的 AWS S3 是 Jamf Security Cloud Data Streams 原生支持的唯一云端存储空间目标位置。Jamf Security Cloud 会将事件直接写入您的 S3 存储桶,而 Google SecOps 会使用 Amazon S3 V2 Feed 提取这些事件。

为 Jamf Security Cloud 配置 AWS S3 存储桶和 IAM 角色

  1. 按照此用户指南创建 Amazon S3 存储桶:创建存储桶
  2. 保存存储桶名称和区域(例如 jamf-security-cloud-logs),以供日后参考。
  3. 创建一个 IAM 角色,供 Jamf Security Cloud 担任,以便将数据上传到存储桶。该角色需要对存储桶拥有 s3:PutObject 权限,并且 Jamf 的 AWS 账号需要列为可信实体。

  4. 保存 IAM 角色 ARN 以供日后参考。

在 Jamf Security Cloud 中配置客户拥有的 AWS S3 数据流

  1. 登录 Jamf Security Cloud 门户。
  2. 依次前往集成 > 数据流。
  3. 点击新配置。
  4. 选择数据流类型(例如威胁事件)。
  5. 选择客户拥有的 AWS S3 作为数据流目标类型。
  6. 点击继续。
  7. 提供以下配置详细信息:
    • Amazon S3 存储桶名称:输入存储桶名称(例如 jamf-security-cloud-logs)
    • Jamf 担任的 IAM 角色:输入您为 Jamf Security Cloud 创建的 IAM 角色的 ARN
    • 区域:选择 S3 存储桶所在的区域
  8. 点击创建配置。
  9. 可选:在高级设置中,选择 JSON 作为消息格式。

  10. 点击启用配置切换开关以激活数据流。

  11. 点击保存。

  12. 针对要导出的每种其他数据流类型,重复上述步骤。

为 Google SecOps 创建 IAM 用户和访问密钥

  1. 按照此用户指南创建用户:创建 IAM 用户。
  2. 选择创建的用户。
  3. 选择安全凭证标签页。
  4. 点击访问密钥部分中的创建访问密钥。
  5. 选择第三方服务作为用例。
  6. 点击下一步。
  7. 可选:添加说明标签。
  8. 点击创建访问密钥。
  9. 点击下载 .csv 文件,保存访问密钥和访问密钥密码,以供日后参考。
  10. 点击完成。
  11. 选择权限标签页。
  12. 点击权限政策部分中的添加权限。
  13. 选择添加权限。
  14. 选择直接附加政策。
  15. 搜索 AmazonS3FullAccess 政策。
  16. 选择相应政策。
  17. 点击下一步。
  18. 点击添加权限。

在 Google SecOps 中配置 Feed,以从 Amazon S3 注入数据

  1. 依次前往设置 > 数据管理 > Feed。如果您使用的是仅 SIEM 平台,请依次前往设置 > Feed。
  2. 点击添加新新闻信息流。
  3. 点击配置单个 Feed。
  4. 在 Feed 名称字段中,输入 Feed 的名称(例如 Jamf Security Cloud logs)。
  5. 选择 Amazon S3 V2 作为来源类型。
  6. 选择 JAMF Security Cloud 作为日志类型。
  7. 点击下一步。
  8. 为以下输入参数指定值:

    字段 值
    S3 URI s3://jamf-security-cloud-logs/
    来源删除选项 根据您的偏好选择删除选项
    文件存在时间上限(天数) 默认值为 180 天
    访问密钥 ID 具有 S3 存储桶访问权限的用户访问密钥
    Secret 访问密钥 有权访问 S3 存储桶的用户私钥
    资产命名空间 资产命名空间
    提取标签 要应用于此 Feed 中事件的标签
    • 将 jamf-security-cloud-logs 替换为您的实际 S3 存储桶名称。
  9. 点击下一步。

  10. 在最终确定界面中查看新的新闻信息流配置,然后点击提交。

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 专业人士的解答。