JAMF Security Cloud 로그 수집

다음에서 지원:

이 문서에서는 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 버킷 만들기

  1. Google Cloud 콘솔로 이동합니다.
  2. 프로젝트를 선택하거나 새 프로젝트를 만듭니다.
  3. 탐색 메뉴에서 Cloud Storage> 버킷으로 이동합니다.
  4. 버킷 만들기를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.

    설정
    버킷 이름 지정 전역적으로 고유한 이름 (예: jamf-security-cloud-logs)을 입력합니다.
    위치 유형 필요에 따라 선택 (리전, 이중 리전, 멀티 리전)
    위치 위치를 선택합니다 (예: us-central1).
    스토리지 클래스 Standard (자주 액세스하는 로그에 권장)
    액세스 제어 균일 (권장)
    보호 조치 선택사항: 객체 버전 관리 또는 보관 정책 사용 설정
  6. 만들기를 클릭합니다.

JAMF Security Cloud 로그를 Google Cloud Storage로 내보내기

JAMF Security Cloud는 클라우드 스토리지 대상으로의 이벤트 데이터 스트리밍을 지원합니다. JAMF Security Cloud 포털에서 데이터 내보내기를 구성합니다.

  1. JAMF Security Cloud 포털에 로그인합니다.
  2. 통합 > 데이터 스트림으로 이동합니다.
  3. 스트림 추가를 클릭합니다.
  4. 지원되는 대상 유형을 선택합니다. JAMF Data Streams는 AWS S3 및 일반 HTTP 엔드포인트를 기본적으로 지원합니다. Google Cloud Storage에 로그를 전송하려면 GCS에 쓰는 Cloud Run 함수가 있는 일반 HTTP 엔드포인트를 사용하거나 중간 S3 호환 대상을 구성하면 됩니다.
  5. 다음 구성 세부정보를 제공합니다.
    • 스트림 이름: 설명이 포함된 이름을 입력합니다 (예: Chronicle GCS Export).
    • GCS 버킷 이름: 버킷 이름 (예: jamf-security-cloud-logs)을 입력합니다.
    • 경로 접두사: 폴더 접두사 (예: jamf-security-cloud/)를 입력합니다.
    • 출력 형식: JSON을 선택합니다 (Chronicle 수집에 권장됨).
  6. GCS 버킷에 대한 쓰기 액세스 권한이 있는 GCP 서비스 계정 사용자 인증 정보 JSON 키를 업로드하거나 붙여넣습니다.
  7. 내보낼 이벤트 유형을 선택합니다.
    • 위협 이벤트 (네트워크 위협, 피싱, 멀웨어)
    • 기기 규정 준수 이벤트
    • DNS 보안 이벤트
    • 앱 위험 이벤트
  8. 저장 또는 만들기를 클릭합니다.
  9. 로그 파일이 지정된 접두사 아래의 GCS 버킷에 표시되기 시작하는지 확인합니다.
  • 내보내기에 사용되는 GCP 서비스 계정에 대상 버킷에 대한 스토리지 객체 생성자 역할이 있는지 확인합니다.
  • 로그 파일은 JSON 형식으로 작성되며 각 파일에는 하나 이상의 이벤트 레코드가 포함됩니다.

Google SecOps 서비스 계정 가져오기

  1. Google SecOps 콘솔에 로그인합니다.
  2. SIEM 설정> 피드로 이동합니다.
  3. 새 피드 추가를 클릭합니다.
  4. 단일 피드 구성을 클릭합니다.
  5. 소스 유형으로 Google Cloud Storage V2를 선택합니다.
  6. 로그 유형으로 JAMF Security Cloud를 선택합니다.
  7. 서비스 계정 가져오기를 클릭합니다. 고유한 서비스 계정 이메일이 표시됩니다. 예를 들면 다음과 같습니다.

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 이 이메일 주소를 복사합니다. 다음 단계에서 사용합니다.

  • 각 Google SecOps 인스턴스에는 고유한 서비스 계정이 있습니다. 다른 문서나 예의 서비스 계정을 사용하지 마세요.

Google SecOps 서비스 계정에 IAM 권한 부여

  1. Cloud Storage> 버킷으로 이동합니다.
  2. 버킷 이름을 클릭합니다.
  3. 권한 탭으로 이동합니다.
  4. 액세스 권한 부여를 클릭합니다.
  5. 다음 구성 세부정보를 제공합니다.
    • 주 구성원 추가: Google SecOps 서비스 계정 이메일을 붙여넣습니다.
    • 역할 할당: 스토리지 객체 뷰어를 선택합니다.
  6. 저장을 클릭합니다.
  • 삭제 옵션 (전송된 파일 삭제)을 사용하려면 스토리지 객체 뷰어 대신 스토리지 객체 관리자 역할을 부여하세요.

JAMF Security Cloud 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정> 피드로 이동합니다.
  2. 새 피드 추가를 클릭합니다.
  3. 단일 피드 구성을 클릭합니다.
  4. 피드 이름 필드에 피드 이름을 입력합니다(예: 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일입니다.
    애셋 네임스페이스 애셋 네임스페이스
    수집 라벨 이 피드의 이벤트에 적용할 라벨입니다.
    • jamf-security-cloud-logs을 실제 GCS 버킷 이름으로 바꿉니다.
    • 항상 URI 끝에 후행 슬래시 (/)를 포함합니다.
  9. 다음을 클릭합니다.

  10. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

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 uint로 변환됨
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인 경우 차단, false인 경우 허용으로 설정
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 event_data에서 먼저, 그다음에 기기에서 Win과 일치하는 경우 WINDOWS, IOS 또는 MAC_OS와 일치하는 경우 MAC, Lin과 일치하는 경우 LINUX, 그 외의 경우 UNKNOWN_PLATFORM으로 설정됩니다.
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'로 설정

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.