收集 JAMF Security Cloud 日志
支持:
Google SecOps
SIEM
本文档介绍了如何使用 Google Cloud Storage V2 将 JAMF Security Cloud 日志注入 Google Security Operations。
JAMF Security Cloud 是适用于 Apple 设备的移动威胁防御和端点安全平台。它会生成威胁检测、合规性和设备安全事件日志,涵盖 DNS 层保护、钓鱼式攻击防护、内容过滤和设备风险评估。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 启用了 Cloud Storage API 的 GCP 项目
- 创建和管理 GCS 存储分区和 IAM 政策的权限
- 对 JAMF Security Cloud 门户(Jamf Threat Defense 或 Jamf Protect 控制台)的特权访问权限
创建 Google Cloud Storage 存储桶
- 前往 Google Cloud 控制台。
- 选择您的项目或创建新项目。
- 在导航菜单中,前往 Cloud Storage > 存储分区。
- 点击创建存储桶 。
提供以下配置详细信息:
设置 值 指定存储桶的名称 输入全局唯一的名称(例如 jamf-security-cloud-logs)位置类型 根据您的需求进行选择(区域、双区域、多区域) 位置 选择位置(例如 us-central1)存储类别 标准(建议用于经常访问的日志) 访问权限控制 统一(推荐) 保护工具 可选:启用对象版本控制或保留政策 点击创建 。
将 JAMF Security Cloud 日志导出到 Google Cloud Storage
JAMF Security Cloud 支持将事件数据流式传输到云存储目标位置。在 JAMF Security Cloud 门户中配置数据导出。
- 登录 JAMF Security Cloud 门户。
- 前往集成 > 数据流。
- 点击添加数据流 。
- 选择受支持的目标类型。JAMF Data Streams 原生支持 AWS S3 和通用 HTTP 端点。如需将日志传送到 Google Cloud Storage,您可以使用带有写入 GCS 的 Cloud Run 函数的通用 HTTP 端点,也可以配置与 S3 兼容的中间目标位置。
- 提供以下配置详细信息:
- 数据流名称:输入描述性名称(例如
Chronicle GCS Export) - GCS 存储桶名称:输入存储桶名称(例如
jamf-security-cloud-logs) - 路径前缀:输入文件夹前缀(例如
jamf-security-cloud/) - 输出格式:选择 JSON(建议用于 Chronicle 注入)
- 数据流名称:输入描述性名称(例如
- 上传或粘贴具有对 GCS 存储桶的写入权限的 GCP 服务帐号凭据 JSON 密钥。
- 选择要导出的事件类型:
- 威胁事件(网络威胁、钓鱼式攻击、恶意软件)
- 设备合规性事件
- DNS 安全事件
- 应用风险事件
- 点击保存 (或创建 )。
- 验证日志文件是否开始出现在指定前缀下的 GCS 存储桶中。
- 确保用于导出的 GCP 服务帐号对目标存储桶具有 Storage Object Creator 角色。
- 日志文件以 JSON 格式写入,每个文件包含一个或多个事件记录。
检索 Google SecOps 服务帐号
- 登录 Google SecOps 控制台。
- 前往 SIEM 设置 > Feed。
- 点击 Add New Feed (添加新 Feed)。
- 点击配置单个 Feed 。
- 选择 Google Cloud Storage V2 作为来源类型 。
- 选择 JAMF Security Cloud 作为日志类型 。
点击 Get Service Account (获取服务账号)。系统会显示一个唯一的服务帐号电子邮件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com复制此电子邮件地址。您将在下一步骤中用到它。
- 每个 Google SecOps 实例都有一个唯一的服务帐号。请勿使用其他文档或示例中的服务账号。
向 Google SecOps 服务帐号授予 IAM 权限
- 前往 Cloud Storage > 存储分区。
- 点击您的存储桶名称。
- 前往权限 标签页。
- 点击授予访问权限 。
- 提供以下配置详细信息:
- 添加主账号:粘贴 Google SecOps 服务帐号电子邮件地址
- 分配角色:选择 Storage Object Viewer
- 点击保存 。
- 如果您打算使用删除选项(删除已传输的文件),请授予 Storage Object Admin 角色,而不是 Storage Object Viewer。
在 Google SecOps 中配置 Feed 以注入 JAMF Security Cloud 日志
- 前往 SIEM 设置 > Feed。
- 点击 Add New Feed (添加新 Feed)。
- 点击配置单个 Feed 。
- 在 Feed 名称 字段中,输入 Feed 的名称(例如
JAMF Security Cloud logs)。 - 选择 Google Cloud Storage V2 作为来源类型 。
- 选择 JAMF Security Cloud 作为日志类型 。
- 点击下一步 。
为以下输入参数指定值:
字段 值 存储桶 URI gs://jamf-security-cloud-logs/jamf-security-cloud/来源删除选项 根据您的偏好选择删除选项 文件最长保留时间(天) 默认值为 180 天 资产命名空间 资产命名空间 注入标签 要应用于此 Feed 中的事件的标签 - 将
jamf-security-cloud-logs替换为实际的 GCS 存储桶名称。 - 请务必在 URI 末尾添加尾随斜杠 (
/)。
- 将
点击下一步 。
在最终确定 屏幕中查看新的 Feed 配置,然后点击提交 。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| event_data.account.parentId, event_data.action, event_data.device.os, event_data.dns.recordType, event_data.riskDetails.appRiskIndexThreshold, event_data.riskDetails.deviceRiskIndex, event_data.routeName, event_data.signatureId.id, event_data.signatureId.name, event_data.threat.result, event_data.tld, customer.parentId, customer.resellerId, device.deviceId, device.deviceName, device.carrier.carrierName, device.carrier.isoCountryCode, device.carrier.mcc, device.carrier.mnc, device.hw.deviceModel, device.hw.hwPlatform, device.hw.imei, device.hw.platform, device.lastNetworkTrafficUtcMs, device.lastUpdatedUtcMs, device.location.isoCountryCode, device.mdm.lastMdmCheckInUtcMs, device.mdm.mdmId, device.network.ssid, device.os.osVersion, device.state.activated, device.state.deploymentState, device.state.vpnActive, device.state.wifiActive, device.user.id, device.user.name, device.wanderaApp.version, trigger.triggerTimeUtcMs, trigger.triggerType, app.appId.packageName, app.appId.appName, app.appId.appVersion, app.category.label, app.category.system, app.installation.installationTimeUtcMs, app.installation.installedBy, app.developer, app.threats, app.permissions, event_data.accessPoint, event_data.alertId, event_data.event_dataType, event_data.software.softwareId, event_data.software.softwareVersion, event_data.software.softwareName, event_data.cve.id, event_data.cve.baseScore, event_data.cve.exploitAvailable, event_data.cve.attribution, event_data.threat.types, event_data.app.id, event_data.app.name, event_data.app.version | additional.fields | 合并为具有特定键和值的标签(来自来源) |
| event_data.dns.ttl | dns_answers.ttl | 转换为 uinteger |
| event_data.dns.category | dns_questions.name | 直接复制值 |
| event_data.receiptTime | metadata.collected_timestamp | 直接复制值 |
| event_data_event_dataType_description, event_data.cve.description | metadata.description | 如果 event_data_event_dataType_description 不为空,则使用该值,否则使用 event_data.cve.description |
| has_principal, has_user | metadata.event_type | 如果 has_principal 为 true,则设置为 STATUS_UPDATE;如果 has_user 为 true,则设置为 USER_UNCATEGORIZED;否则设置为 GENERIC_EVENT |
| event_data.md1.product, md1.product | metadata.product_event_type | 如果 event_data.md1.product 不为空,则使用该值,否则使用 md1.product |
| event_data.device.externalId, event_data.externalId | metadata.product_log_id | 如果 event_data.device.externalId 不为空,则使用该值,否则使用 event_data.externalId |
| event_data.md1.schemaVersion, schemaVersion | metadata.product_version | 如果 event_data.md1.schemaVersion 不为空,则使用该值,否则使用 schemaVersion |
| dns_answers | network.dns.answers | 从 dns_answers 合并 |
| dns_questions | network.dns.questions | 从 dns_questions 合并 |
| event_data.dns.responseStatus | network.dns.response | 如果为 NOERROR,则设置为 true,否则设置为 false |
| event_data.domain | principal.administrative_domain | 直接复制值 |
| event_data.application | principal.application | 直接复制值 |
| event_data.hostName, event_data.device.userDeviceName | principal.asset.hostname | 如果 event_data.hostName 不为空,则使用该值,否则使用 event_data.device.userDeviceName |
| event_data.source.ip | principal.asset.ip | 直接复制值 |
| event_data.hostName, event_data.device.userDeviceName | principal.hostname | 如果 event_data.hostName 不为空,则使用该值,否则使用 event_data.device.userDeviceName |
| event_data.source.ip | principal.ip | 直接复制值 |
| event_data.source.port | principal.port | 转换为整数 |
| event_data_event_dataType_id | principal.process.pid | 直接复制值 |
| event_data.event_dataUrl, event_data.cve.consoleUrl | principal.url | 如果 event_data.event_dataUrl 不为空,则使用该值,否则使用 event_data.cve.consoleUrl |
| device.user.email | principal.user.email_addresses | 如果与电子邮件正则表达式匹配,则合并 |
| event_data.account.name, event_data.user.userName | principal.user.user_display_name | 如果 event_data.account.name 不为空,则使用该值,否则使用 event_data.user.userName |
| event_data.account.customerId, customer.customerId, event_data.customerId, device.user.email | principal.user.userid | 如果 event_data.account.customerId 不为空,则使用该值,否则如果 customer.customerId 不为空,则使用该值,否则如果 event_data.customerId 不为空,则使用该值,否则如果 device.user.email 不是电子邮件地址,则使用该值 |
| event_data.blocked | security_result.action | 如果为 true,则设置为 BLOCK;如果为 false,则设置为 ALLOW |
| event_data_event_dataType_name | security_result.description | 直接复制值 |
| app.threats, app.permissions, event_data.cve.id, event_data.cve.baseScore, event_data.cve.exploitAvailable, event_data.cve.attribution | security_result.detection_fields | 合并为标签(来自来源) |
| event_data.severity | security_result.severity | 如果为 2,则设置为 INFORMATIONAL;如果为 4,则设置为 LOW;如果为 6,则设置为 MEDIUM;如果为 8,则设置为 HIGH;如果为 10,则设置为 CRITICAL |
| event_data.blockReason | security_result.summary | 直接复制值 |
| event_data.cve.cveDetailUrl | security_result.url_back_to_product | 直接复制值 |
| event_data.device.deviceId | target.asset.asset_id | 与“CS:”前缀连接 |
| event_data.destination.ips, event_data.destinationIp, event_data.destination.ip, device.carrier.ipAddress, device.network.assignedIp, device.network.publicIp | 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 | 直接复制值 |
| event_data.destination.ips, event_data.destinationIp, event_data.destination.ip, device.carrier.ipAddress, device.network.assignedIp, device.network.publicIp | target.ip | 从来源合并 |
| device.location.countryName | target.location.country_or_region | 直接复制值 |
| device.hw.wifiMacAddress, event_data.accessPointBssid, device.network.bssid | target.mac | 从来源合并 |
| event_data.device.osType, event_data_device_os_osType, device.os.osType | target.platform | 如果与 Win 匹配,则设置为 WINDOWS;如果与 IOS 或 MAC_OS 匹配,则设置为 MAC;如果与 Lin 匹配,则设置为 LINUX;否则设置为 UNKNOWN_PLATFORM(先从 event_data 中获取,然后从 device 中获取) |
| event_data_device_os_osVersion, device.os.osVersion | target.platform_version | 如果 event_data_device_os_osVersion 不为空,则使用该值,否则使用 device.os.osVersion |
| 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, event_data.user.name | target.user.userid | 如果 event_data.user.email 不是电子邮件地址,则使用该值,否则使用 event_data.user.name |
| metadata.product_name | 设置为“JAMF_SECURITY_CLOUD” | |
| metadata.vendor_name | 设置为“JAMF_SECURITY_CLOUD” | |
user.userEmail |
principal.user.email_addresses |
从更新日志映射 |
timestamp |
metadata.event_timestamp |
从更新日志映射 |
eventTimeUtcMs |
additional.fields |
从更新日志映射 |
cve.severity |
security_result.severity |
从更新日志映射 |
app.id", "app.name", "app.version |
additional.fields |
从更新日志映射 |