收集 Jamf Security Cloud 日志

支持的平台:

本文档介绍了如何使用 Google Cloud Storage 或 Amazon S3 将 Jamf Security Cloud 日志注入到 Google Security Operations 中。Jamf Security Cloud 是一款适用于 Apple 设备的移动威胁防御和端点安全平台。它会生成威胁检测、合规性和设备安全事件日志,涵盖 DNS 层保护、钓鱼式攻击防范、内容过滤和设备风险评估。Jamf Security Cloud 使用 Data Streams 导出日志。每个数据流配置都将一种数据类型发送到一个目标位置。

准备工作

请确保满足以下前提条件:

  • 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 存储桶。然后,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. 依次前往 SIEM 设置 > Feed
  3. 点击添加新 Feed
  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 Storage 注入数据

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  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. 最终确定界面中查看新的 Feed 配置,然后点击提交

方法 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. 创建 Jamf Security Cloud 用于将数据上传到存储桶的 IAM 角色。该角色需要存储桶的 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. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  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 Access Key 具有 S3 存储桶访问权限的用户密钥
    资产命名空间 资源命名空间
    注入标签 要应用于相应 Feed 中事件的标签
    • jamf-security-cloud-logs 替换为您的实际 S3 存储桶名称。
  9. 点击下一步

  10. 最终确定界面中查看新的 Feed 配置,然后点击提交

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 已映射:trueSTATUS_UPDATE
has_user metadata.event_type 已映射:trueUSER_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 专业人士的解答。