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 バケットを作成する
- Google Cloud コンソール に移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、Cloud Storage > バケット に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前を入力します(例: jamf-security-cloud-logs)ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン) ロケーション ロケーションを選択します(例: us-central1)ストレージ クラス Standard(頻繁にアクセスするログにおすすめ) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
JAMF Security Cloud のログを Google Cloud Storage にエクスポートする
JAMF Security Cloud は、イベントデータをクラウド ストレージの宛先にストリーミングすることをサポートしています。JAMF Security Cloud ポータルでデータ エクスポートを構成します。
- JAMF Security Cloud ポータルにログインします。
- Integrations > Data Streams に移動します。
- [Add Stream] をクリックします。
- サポートされている宛先タイプを選択します。JAMF Data Streams は、AWS S3 エンドポイントと汎用 HTTP エンドポイントをネイティブにサポートしています。ログを Google Cloud Storage に配信するには、GCS に書き込む Cloud Run 関数を使用する汎用 HTTP エンドポイントを使用するか、S3 互換の中間宛先を構成します。
- 次の構成情報を提供してください。
- ストリーム名: わかりやすい名前を入力します(例:
Chronicle GCS Export) - GCS bucket name: バケット名を入力します(例:
jamf-security-cloud-logs) - Path prefix: フォルダの接頭辞を入力します(例:
jamf-security-cloud/) - Output format: [JSON] を選択します(Chronicle の取り込みにおすすめ)
- ストリーム名: わかりやすい名前を入力します(例:
- GCS バケットへの書き込みアクセス権を持つ GCP サービス アカウント認証情報 JSON キーをアップロードまたは貼り付けます。
- エクスポートするイベントタイプを選択します。
- 脅威イベント(ネットワークの脅威、フィッシング、マルウェア)
- デバイス コンプライアンス イベント
- DNS セキュリティ イベント
- アプリのリスク イベント
- [保存](または [作成])をクリックします。
- 指定した接頭辞の GCS バケットにログファイルが表示されることを確認します。
- エクスポートに使用する GCP サービス アカウントに、ターゲット バケットに対するStorage Object Creator ロールがあることを確認します。
- ログファイルは JSON 形式で書き込まれ、各ファイルには 1 つ以上のイベントレコードが含まれています。
Google SecOps サービス アカウントを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [フィード] に移動します。
- [新しいフィードを追加] をクリックします。
- [単一フィードを設定] をクリックします。
- [Source type] として [Google Cloud Storage V2] を選択します。
- [Log type] として [JAMF Security Cloud] を選択します。
[サービス アカウントを取得する] をクリックします。一意のサービス アカウントのメールアドレスが表示されます。例:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comこのメールアドレスをコピーします。次のステップでこれを使用します。
- Google SecOps インスタンスごとに一意のサービス アカウントがあります。他のドキュメントや例のサービス アカウントは使用しないでください。
Google SecOps サービス アカウントに IAM 権限を付与する
- [Cloud Storage] > [バケット] に移動します。
- バケット名をクリックします。
- [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成情報を提供してください。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます
- ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します
- [保存] をクリックします。
- 削除オプション(転送されたファイルを削除)を使用する場合は、ストレージ オブジェクト閲覧者ではなく、ストレージ オブジェクト管理者 ロールを付与します。
JAMF Security Cloud のログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しいフィードを追加] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
JAMF Security Cloud logs)。 - [Source type] として [Google Cloud Storage V2] を選択します。
- [Log type] として [JAMF Security Cloud] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
フィールド 値 Storage bucket URI gs://jamf-security-cloud-logs/jamf-security-cloud/Source Deletion Option 必要に応じて削除オプションを選択します Maximum File Age (Days) デフォルトは 180 日です アセットの名前空間 アセットの名前空間 Ingestion labels このフィードのイベントに適用されるラベル jamf-security-cloud-logsは、実際の GCS バケット名に置き換えます。- URI の末尾には必ずスラッシュ(
/)を含めてください。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
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」に設定 |
さらにサポートが必要な場合コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。