Jamf Security Cloud のログを収集する
このドキュメントでは、 Google Cloud Storage または Amazon S3 を使用して Jamf Security Cloud ログを Google Security Operations に取り込む方法について説明します。Jamf Security Cloud は、Apple デバイス向けのモバイル脅威防御およびエンドポイント セキュリティ プラットフォームです。DNS レイヤ保護、フィッシング防止、コンテンツ フィルタリング、デバイス リスク評価を網羅する脅威検出、コンプライアンス、デバイス セキュリティ イベントログを生成します。Jamf Security Cloud は、データ ストリームを使用してログをエクスポートします。各データ ストリーム構成は、1 つのデータ型を 1 つの宛先に送信します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Jamf Security Cloud ポータルへの特権アクセス
- 方法 1: Google Cloud(Google Cloud Storage、Cloud Run)への特権アクセス
- 方法 2: AWS(S3、IAM)への特権アクセス
エクスポートするデータ ストリームのタイプを選択する
Jamf Security Cloud パーサーは、6 つのデータ ストリーム タイプすべてをサポートしています。取り込むデータ型ごとに個別のデータ ストリーム構成を作成します。
- 脅威イベント: 悪意のあるネットワーク通信、マルウェア、危険なアプリなど、検出された脅威イベント
- ネットワーク トラフィック: 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 フィードを使用してバケットを取り込みます。
Google Cloud Storage バケットを作成する
- Google Cloud コンソールに移動します。
- プロジェクトを選択するか、新しいプロジェクトを作成します。
- ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
- [バケットを作成] をクリックします。
次の構成情報を提供してください。
設定 値 バケットに名前を付ける グローバルに一意の名前( jamf-security-cloud-logsなど)を入力します。ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン)。 ロケーション ロケーションを選択します(例: us-central1)。ストレージ クラス Standard(頻繁にアクセスされるログにおすすめ) アクセス制御 均一(推奨) 保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする [作成] をクリックします。
Cloud Run functions のサービス アカウントを作成する
- GCP Console で、[IAM と管理>サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- 次の構成の詳細を指定します。
- サービス アカウント名: 「
jamf-sc-receiver-sa」と入力します。 - サービス アカウントの説明:
Service account for the Cloud Run function that receives Jamf Security Cloud eventsと入力します。
- サービス アカウント名: 「
- [作成して続行] をクリックします。
- [完了] をクリックします。
サービス アカウントにバケットへのアクセス権を付与する
- [Cloud Storage] > [バケット] に移動します。
- バケット名をクリックします。
- [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
jamf-sc-receiver-sa@PROJECT_ID.iam.gserviceaccount.com)を入力します。 - ロールを割り当てる: [ストレージ オブジェクト管理者] を選択します。
- プリンシパルを追加: サービス アカウントのメールアドレス(例:
- [保存] をクリックします。
イベントを受信する Cloud Run 関数を作成する
- 強力な認証トークンを生成し、後で参照できるように保存します(例:
openssl rand -hex 32を実行します)。Jamf Security Cloud はこのトークンをリクエスト ヘッダーで送信します。関数は、このトークンがないリクエストを拒否します。 - GCP Console で、[Cloud Run] に移動します。
- [サービスを作成] をクリックします。
- [関数] を選択します(インライン エディタを使用して関数を作成します)。
[構成] セクションで、次の構成の詳細を指定します。
設定 値 サービス名 jamf-sc-receiverリージョン Cloud Storage バケットと一致するリージョンを選択します(例: us-central1)。ランタイム [Python 3.12] 以降を選択します。 [認証] で、[未認証の呼び出しを許可] を選択します。
[コンテナ、ネットワーキング、セキュリティ] を開きます。
[セキュリティ] タブに移動します。
- サービス アカウント:
jamf-sc-receiver-saを選択します。
- サービス アカウント:
[コンテナ] タブに移動します。
- [変数とシークレット] をクリックします。
- 環境変数ごとに [+ 変数を追加] をクリックします。
変数名 値の例 説明 GCS_BUCKETjamf-security-cloud-logsCloud Storage バケットの名前 GCS_PREFIXjamf-security-cloud/ログファイルの接頭辞 AUTH_TOKEN<your-generated-token>Jamf Security Cloud が X-Auth-Tokenヘッダーで送信するトークン[作成] をクリックします。
サービスが作成されるまで待ちます。サービスを作成すると、インライン コードエディタが自動的に開きます。
[エントリ ポイント] フィールドに「main」と入力します。
インライン コードエディタで、次の 2 つのファイルを作成します。
最初のファイル: 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)2 つ目のファイル: requirements.txt
functions-framework==3.* google-cloud-storage==2.*
[保存して再デプロイ] をクリックします。
サービス URL(
https://jamf-sc-receiver-abc123-uc.a.run.appなど)をコピーして保存します。次のセクションでホスト名を使用します。
Jamf Security Cloud で汎用 HTTP データ ストリームを構成する
- Jamf Security Cloud ポータルにログインします。
- [インテグレーション> データ ストリーム] に移動します。
- [新しい構成] をクリックします。
- データ ストリームのタイプ([脅威イベント] など)を選択します。
- データ ストリームのターゲット タイプとして [Generic HTTP] を選択します。
- [続行] をクリックします。
- 次の構成の詳細を指定します。
- Protocol: [https] を選択します。
- Server Hostname/IP: Cloud Run サービスのホスト名(
jamf-sc-receiver-abc123-uc.a.run.appなど)を入力します。 - ポート: 「
443」と入力します。 - エンドポイント: 「
/」と入力します。 - 追加のヘッダー: [ヘッダーを追加] をクリックし、名前
X-Auth-Tokenを入力して、生成されたトークンを値として入力します。
- [Test Configuration] をクリックし、テストが成功したことを確認します。
- [構成を有効にする] 切り替えボタンをクリックして、データ ストリームを有効にします。
- [保存] をクリックします。
- エクスポートする追加のデータ ストリーム タイプごとに、上記の手順を繰り返します。
Google SecOps サービス アカウントを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [JAMF Security Cloud] を選択します。
[サービス アカウントを取得する] をクリックします。一意のサービス アカウントのメールアドレスが表示されます(例:)。
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comこのメールアドレスをコピーします。これを次のステップで使用します。
Google SecOps サービス アカウントにバケットへのアクセス権を付与する
- [Cloud Storage] > [バケット] に移動します。
- バケット名をクリックします。
- [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- 次の構成の詳細を指定します。
- プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
- ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
[保存] をクリックします。
Google Cloud Storage から取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Jamf Security Cloud logs)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [JAMF Security Cloud] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
フィールド 値 ストレージ バケット URI gs://jamf-security-cloud-logs/jamf-security-cloud/ソース削除オプション 必要に応じて削除オプションを選択します。 最大ファイル経過日数 デフォルトは 180 日 アセットの名前空間 アセットの名前空間 取り込みラベル このフィードのイベントに適用されるラベル jamf-security-cloud-logsは、実際のバケット名に置き換えます。- URI の末尾には必ず末尾のスラッシュ(
/)を含めてください。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
方法 2: Amazon S3
Jamf Security Cloud Data Streams がネイティブでサポートするクラウド ストレージの宛先は、お客様所有の AWS S3 のみです。Jamf Security Cloud はイベントを S3 バケットに直接書き込み、Google SecOps は Amazon S3 V2 フィードを使用してイベントを取り込みます。
Jamf Security Cloud 用に AWS S3 バケットと IAM ロールを構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- バケットの名前とリージョンを後で参照できるように保存します(例:
jamf-security-cloud-logs)。 Jamf Security Cloud がバケットにデータをアップロードするために引き受ける IAM ロールを作成します。このロールには、バケットに対する
s3:PutObject権限と、信頼できるエンティティとしてリストされている Jamf の AWS アカウントが必要です。IAM ロール
ARNを保存して、後で参照できるようにします。
Jamf Security Cloud でお客様所有の AWS S3 データ ストリームを構成する
- Jamf Security Cloud ポータルにログインします。
- [インテグレーション> データ ストリーム] に移動します。
- [新しい構成] をクリックします。
- データ ストリームのタイプ([脅威イベント] など)を選択します。
- データ ストリームのターゲット タイプとして [Customer-owned AWS S3] を選択します。
- [続行] をクリックします。
- 次の構成の詳細を指定します。
- Amazon S3 バケット名: バケット名(
jamf-security-cloud-logsなど)を入力します。 - Jamf が想定する IAM ロール: Jamf Security Cloud 用に作成した IAM ロールの ARN を入力します。
- リージョン: S3 バケットのリージョンを選択します。
- Amazon S3 バケット名: バケット名(
- [構成を作成] をクリックします。
省略可: [詳細設定] で、メッセージ形式として [JSON] を選択します。
[構成を有効にする] 切り替えボタンをクリックして、データ ストリームを有効にします。
[保存] をクリックします。
エクスポートする追加のデータ ストリーム タイプごとに、上記の手順を繰り返します。
Google SecOps の IAM ユーザーとアクセスキーを作成する
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成したユーザーを選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] で [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- 省略可: 説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [.csv ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、今後の参照に備えます。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで、[権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索します。
- ポリシーを選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
Amazon S3 から取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Jamf Security Cloud logs)。 - [ソースタイプ] として [Amazon S3 V2] を選択します。
- [ログタイプ] として [JAMF Security Cloud] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
フィールド 値 S3 URI s3://jamf-security-cloud-logs/ソース削除オプション 必要に応じて削除オプションを選択します。 最大ファイル経過日数 デフォルトは 180 日 アクセスキー ID S3 バケットにアクセスできるユーザー アクセスキー シークレット アクセスキー S3 バケットにアクセスできるユーザーのシークレット キー アセットの名前空間 アセットの名前空間 取り込みラベル このフィードのイベントに適用されるラベル jamf-security-cloud-logsは、実際の S3 バケット名に置き換えます。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
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 のプロフェッショナルから回答を得ることができます。