Coletar registros do Jamf Security Cloud
Este documento explica como ingerir registros do Jamf Security Cloud no Google Security Operations usando o Google Cloud Storage ou o Amazon S3. O Jamf Security Cloud é uma plataforma de defesa contra ameaças móveis e segurança de endpoint para dispositivos Apple. Ele gera registros de eventos de detecção de ameaças, compliance e segurança do dispositivo que abrangem proteção da camada de DNS, prevenção contra phishing, filtragem de conteúdo e avaliação de risco do dispositivo. O Jamf Security Cloud exporta registros usando o Data Streams. Cada configuração de fluxo de dados envia exatamente um tipo de dado para um destino.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Acesso privilegiado ao portal do Jamf Security Cloud
- Para o método 1: acesso privilegiado a Google Cloud (Google Cloud Storage, Cloud Run)
- Para o método 2: acesso privilegiado à AWS (S3, IAM)
Selecionar os tipos de fluxos de dados para exportar
O analisador da Jamf Security Cloud é compatível com todos os seis tipos de fluxo de dados. Crie uma configuração de fluxo de dados separada para cada tipo de dado que você quer ingerir:
- Eventos de ameaça: eventos de ameaça detectados, incluindo comunicações de rede maliciosas, malware e apps arriscados
- Tráfego de rede: registros de tráfego de rede processados pela infraestrutura de rede da Jamf.
- Eventos de acesso: solicitações permitidas e negadas das políticas de acesso de rede Zero Trust (ZTNA) do Jamf Connect.
- Dados do dispositivo: informações sobre dispositivos
- Insights de apps: informações sobre aplicativos instalados em dispositivos
- Dados de vulnerabilidade: detalhes sobre cada vulnerabilidade descoberta e o dispositivo em que ela foi encontrada.
Método 1: Google Cloud Armazenamento
O Jamf Security Cloud não tem um destino de armazenamento Google Cloud integrado, e a Jamf informa que o envio de dados diretamente para o Google SecOps usando a integração HTTP não é compatível. Esse método usa o destino de fluxo de dados HTTP genérico para enviar eventos a uma função do Cloud Run de sua propriedade, que os grava em um bucket do Google Cloud Storage. Em seguida, o Google SecOps ingere o bucket usando um feed do Google Cloud Storage V2.
Criar um bucket do Google Cloud Storage
- Acesse o console doGoogle Cloud .
- Selecione um projeto ou crie um novo.
- No menu de navegação, acesse Cloud Storage > Buckets.
- Clique em Criar bucket.
Informe os seguintes detalhes de configuração:
Configuração Valor Nomeie seu bucket Insira um nome exclusivo globalmente, por exemplo, jamf-security-cloud-logs.Tipo de local Escolha de acordo com suas necessidades (região, birregional, multirregional) Local Selecione o local (por exemplo, us-central1).Classe de armazenamento Padrão (recomendado para registros acessados com frequência) Controle de acesso Uniforme (recomendado) Ferramentas de proteção Opcional: ativar o controle de versões de objetos ou a política de retenção Clique em Criar.
Criar uma conta de serviço para a função do Cloud Run
- No Console do GCP, acesse IAM e administrador > Contas de serviço.
- Clique em Criar conta de serviço.
- Informe os seguintes detalhes de configuração:
- Nome da conta de serviço: insira
jamf-sc-receiver-sa - Descrição da conta de serviço: digite
Service account for the Cloud Run function that receives Jamf Security Cloud events
- Nome da conta de serviço: insira
- Clique em Criar e continuar.
- Clique em Concluído.
Conceder à conta de serviço acesso ao bucket
- Acesse Cloud Storage > Buckets.
- Clique no nome do bucket.
- Acesse a guia Permissões.
- Clique em Conceder acesso.
- Informe os seguintes detalhes de configuração:
- Adicionar principais: insira o e-mail da conta de serviço (por exemplo,
jamf-sc-receiver-sa@PROJECT_ID.iam.gserviceaccount.com). - Atribuir papéis: selecione Administrador de objetos do Storage.
- Adicionar principais: insira o e-mail da conta de serviço (por exemplo,
- Clique em Salvar.
Criar a função do Cloud Run para receber eventos
- Gere um token de autenticação forte e salve-o para referência futura. Por exemplo, execute
openssl rand -hex 32. O Jamf Security Cloud envia esse token em um cabeçalho da solicitação, e a função rejeita solicitações sem ele. - No console do GCP, acesse o Cloud Run.
- Clique em Criar serviço.
- Selecione Função (use um editor in-line para criar uma função).
Na seção Configurar, forneça os seguintes detalhes de configuração:
Configuração Valor Nome do serviço jamf-sc-receiverRegião Selecione a região correspondente ao seu bucket do Cloud Storage (por exemplo, us-central1).Ambiente de execução Selecione Python 3.12 ou uma versão mais recente. Na seção Autenticação, selecione Permitir invocações não autenticadas.
Abra Contêineres, rede, segurança.
Acesse a guia Segurança:
- Conta de serviço: selecione
jamf-sc-receiver-sa
- Conta de serviço: selecione
Acesse a guia Contêineres:
- Clique em Variáveis e secrets.
- Clique em + Adicionar variável para cada variável de ambiente:
Nome da variável Valor de exemplo Descrição GCS_BUCKETjamf-security-cloud-logsNome do bucket do Cloud Storage GCS_PREFIXjamf-security-cloud/Prefixo para arquivos de registro AUTH_TOKEN<your-generated-token>Token que a Jamf Security Cloud envia no cabeçalho X-Auth-Token.Clique em Criar.
Aguarde a criação do serviço. Depois que o serviço é criado, o editor de código inline é aberto automaticamente.
Insira main no campo Ponto de entrada.
No editor de código em linha, crie dois arquivos:
Primeiro arquivo: 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)Segundo arquivo: requirements.txt
functions-framework==3.* google-cloud-storage==2.*
Clique em Salvar e implantar novamente.
Copie e salve o URL do serviço (por exemplo,
https://jamf-sc-receiver-abc123-uc.a.run.app). Você vai usar o nome do host na próxima seção.
Configurar um fluxo de dados HTTP genérico no Jamf Security Cloud
- Faça login no portal do Jamf Security Cloud.
- Acesse Integrações > Fluxos de dados.
- Clique em Nova configuração.
- Selecione o tipo de fluxo de dados (por exemplo, Eventos de ameaça).
- Selecione HTTP genérico como o tipo de destino do fluxo de dados.
- Clique em Continuar.
- Informe os seguintes detalhes de configuração:
- Protocolo: selecione https
- Nome do host/IP do servidor: digite o nome do host do serviço do Cloud Run (por exemplo,
jamf-sc-receiver-abc123-uc.a.run.app). - Porta: insira
443. - Endpoint: insira
/ - Outros cabeçalhos: clique em Adicionar cabeçalho e insira o nome
X-Auth-Tokencom o token gerado como valor.
- Clique em Testar configuração e verifique se o teste foi concluído.
- Clique no botão Ativar configuração para ativar o fluxo de dados.
- Clique em Salvar.
- Repita essas etapas para cada tipo de fluxo de dados adicional que você quer exportar.
Recuperar a conta de serviço do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- Selecione Google Cloud Storage V2 como o Tipo de origem.
- Selecione JAMF Security Cloud como o Tipo de registro.
Clique em Receber conta de serviço. Um e-mail exclusivo da conta de serviço será exibido, por exemplo:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopie o endereço de e-mail. Ela será usada na próxima etapa.
Conceda à conta de serviço do Google SecOps acesso ao bucket
- Acesse Cloud Storage > Buckets.
- Clique no nome do bucket.
- Acesse a guia Permissões.
- Clique em Conceder acesso.
- Informe os seguintes detalhes de configuração:
- Adicionar principais: cole o e-mail da conta de serviço do Google SecOps.
- Atribuir papéis: selecione Leitor de objetos do Storage.
Clique em Salvar.
Configurar um feed no Google SecOps para ingerir dados do Google Cloud Storage
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Jamf Security Cloud logs). - Selecione Google Cloud Storage V2 como o Tipo de origem.
- Selecione JAMF Security Cloud como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
Campo Valor URI do bucket de armazenamento gs://jamf-security-cloud-logs/jamf-security-cloud/Opção de exclusão da origem Selecione a opção de exclusão de acordo com sua preferência Idade máxima do arquivo (dias) O padrão é 180 dias Namespace do recurso O namespace do recurso Rótulos de ingestão O rótulo a ser aplicado aos eventos deste feed - Substitua
jamf-security-cloud-logspelo nome real do bucket. - Sempre inclua a barra final (
/) no fim do URI.
- Substitua
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Método 2: Amazon S3
O AWS S3 de propriedade do cliente é o único destino de armazenamento em nuvem compatível nativamente com os fluxos de dados do Jamf Security Cloud. O Jamf Security Cloud grava eventos diretamente no seu bucket do S3, e o Google SecOps os ingere usando um feed do Amazon S3 V2.
Configurar o bucket do AWS S3 e a função do IAM para o Jamf Security Cloud
- Crie um bucket do Amazon S3 seguindo este guia do usuário: Como criar um bucket
- Salve o Nome e a Região do bucket para referência futura (por exemplo,
jamf-security-cloud-logs). Crie uma função do IAM que o Jamf Security Cloud assume para fazer upload de dados para o bucket. A função exige a permissão
s3:PutObjectno bucket e a conta da AWS da Jamf listada como uma entidade confiável.Salve a função do IAM
ARNpara referência futura.
Configurar um fluxo de dados do AWS S3 de propriedade do cliente no Jamf Security Cloud
- Faça login no portal do Jamf Security Cloud.
- Acesse Integrações > Fluxos de dados.
- Clique em Nova configuração.
- Selecione o tipo de fluxo de dados (por exemplo, Eventos de ameaça).
- Selecione AWS S3 de propriedade do cliente como o tipo de destino do fluxo de dados.
- Clique em Continuar.
- Informe os seguintes detalhes de configuração:
- Nome do bucket do Amazon S3: insira o nome do bucket (por exemplo,
jamf-security-cloud-logs). - Papel do IAM assumido pelo Jamf: insira o ARN do papel do IAM que você criou para o Jamf Security Cloud.
- Região: selecione a região do bucket do S3.
- Nome do bucket do Amazon S3: insira o nome do bucket (por exemplo,
- Clique em Criar configuração.
Opcional: em Configurações avançadas, selecione JSON como o formato da mensagem.
Clique no botão Ativar configuração para ativar o fluxo de dados.
Clique em Salvar.
Repita essas etapas para cada tipo de fluxo de dados adicional que você quer exportar.
Criar um usuário e uma chave de acesso do IAM para o Google SecOps
- Crie um usuário seguindo este guia: Como criar um usuário do IAM.
- Selecione o usuário criado.
- Selecione a guia Credenciais de segurança.
- Clique em Criar chave de acesso na seção Chaves de acesso.
- Selecione Serviço de terceiros como o Caso de uso.
- Clique em Próxima.
- Opcional: adicione uma tag de descrição.
- Clique em Criar chave de acesso.
- Clique em Baixar arquivo .csv para salvar a Chave de acesso e a Chave de acesso secreta para referência futura.
- Clique em Concluído.
- Selecione a guia Permissões.
- Clique em Adicionar permissões na seção Políticas de permissões.
- Selecione Adicionar permissões.
- Selecione Anexar políticas diretamente.
- Pesquise a política AmazonS3FullAccess.
- Selecione a política.
- Clique em Próxima.
- Clique em Adicionar permissões
Configurar um feed no Google SecOps para fazer a ingestão do Amazon S3
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Jamf Security Cloud logs). - Selecione Amazon S3 V2 como o Tipo de origem.
- Selecione JAMF Security Cloud como o Tipo de registro.
- Clique em Próxima.
Especifique valores para os seguintes parâmetros de entrada:
Campo Valor URI do S3 s3://jamf-security-cloud-logs/Opção de exclusão da origem Selecione a opção de exclusão de acordo com sua preferência Idade máxima do arquivo (dias) O padrão é 180 dias ID da chave de acesso Chave de acesso do usuário com acesso ao bucket do S3 Chave de acesso secreta Chave secreta do usuário com acesso ao bucket do S3 Namespace do recurso O namespace do recurso Rótulos de ingestão O rótulo a ser aplicado aos eventos deste feed - Substitua
jamf-security-cloud-logspelo nome real do bucket do S3.
- Substitua
Clique em Próxima.
Revise a nova configuração do feed na tela Finalizar e clique em Enviar.
Tabela de mapeamento de UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
accessPoint_label |
additional.fields |
Mesclado |
action_label |
additional.fields |
Mesclado |
activated_label |
additional.fields |
Mesclado |
alertId_label |
additional.fields |
Mesclado |
appName_label |
additional.fields |
Mesclado |
appRiskIndexThreshold_label |
additional.fields |
Mesclado |
appVersion_label |
additional.fields |
Mesclado |
app_id_label |
additional.fields |
Mesclado |
carrierName_label |
additional.fields |
Mesclado |
category_label |
additional.fields |
Mesclado |
deploymentState_label |
additional.fields |
Mesclado |
developer_label |
additional.fields |
Mesclado |
deviceId_label |
additional.fields |
Mesclado |
deviceModel_label |
additional.fields |
Mesclado |
deviceName_label |
additional.fields |
Mesclado |
deviceRiskIndex_label |
additional.fields |
Mesclado |
device_os_label |
additional.fields |
Mesclado |
device_user_name_label |
additional.fields |
Mesclado |
eventTimeUtcMs_label |
additional.fields |
Mesclado |
eventType_label |
additional.fields |
Mesclado |
hwPlatform_label |
additional.fields |
Mesclado |
imei_label |
additional.fields |
Mesclado |
installationTimeUtcMs_label |
additional.fields |
Mesclado |
installedBy_label |
additional.fields |
Mesclado |
isoCountryCode_label |
additional.fields |
Mesclado |
lastMdmCheckInUtcMs_label |
additional.fields |
Mesclado |
lastNetworkTrafficUtcMs_label |
additional.fields |
Mesclado |
lastUpdatedUtcMs_label |
additional.fields |
Mesclado |
loc_isoCountryCode_label |
additional.fields |
Mesclado |
mcc_label |
additional.fields |
Mesclado |
mdmId_label |
additional.fields |
Mesclado |
mnc_label |
additional.fields |
Mesclado |
osVersion_label |
additional.fields |
Mesclado |
packageName_label |
additional.fields |
Mesclado |
parentId_label |
additional.fields |
Mesclado |
parentId_label_1 |
additional.fields |
Mesclado |
platform_label |
additional.fields |
Mesclado |
profileId_label |
additional.fields |
Mesclado |
profileName_label |
additional.fields |
Mesclado |
profileStatus_label |
additional.fields |
Mesclado |
recordType_label |
additional.fields |
Mesclado |
resellerId_label |
additional.fields |
Mesclado |
routeName_label |
additional.fields |
Mesclado |
signatureId_id_label |
additional.fields |
Mesclado |
signatureId_name_label |
additional.fields |
Mesclado |
softwareId_label |
additional.fields |
Mesclado |
softwareName_label |
additional.fields |
Mesclado |
softwareVersion_label |
additional.fields |
Mesclado |
ssid_label |
additional.fields |
Mesclado |
system_label |
additional.fields |
Mesclado |
threat_result_label |
additional.fields |
Mesclado |
triggerTimeUtcMs_label |
additional.fields |
Mesclado |
triggerType_label |
additional.fields |
Mesclado |
types_list |
additional.fields |
Mesclado |
userId_label |
additional.fields |
Mesclado |
user_tld_label |
additional.fields |
Mesclado |
vpnActive_label |
additional.fields |
Mesclado |
wanderaAppVersion_label |
additional.fields |
Mesclado |
wifiActive_label |
additional.fields |
Mesclado |
event_data.receiptTime |
metadata.collected_timestamp |
Mapeado diretamente |
event_data.cve.description |
metadata.description |
Mapeado diretamente |
event_data_event_dataType_description |
metadata.description |
Mapeado diretamente |
event_data.timestamp |
metadata.event_timestamp |
Analisado como yyyy-MM-ddTHH:mm:ss.SSSZ |
has_principal |
metadata.event_type |
Mapeado: true → STATUS_UPDATE |
has_user |
metadata.event_type |
Mapeado: true → USER_UNCATEGORIZED |
event_data.md1.product |
metadata.product_event_type |
Mapeado diretamente |
md1.product |
metadata.product_event_type |
Mapeado diretamente |
event_data.device.externalId |
metadata.product_log_id |
Mapeado diretamente |
event_data.externalId |
metadata.product_log_id |
Mapeado diretamente |
md1.product |
metadata.product_name |
Mapeado diretamente |
event_data.md1.schemaVersion |
metadata.product_version |
Mapeado diretamente |
schemaVersion |
metadata.product_version |
Mapeado diretamente |
dns_answers |
network.dns.answers |
Mesclado |
dns_questions |
network.dns.questions |
Mesclado |
event_data.domain |
principal.administrative_domain |
Mapeado diretamente |
event_data.application |
principal.application |
Mapeado diretamente |
event_data.hostName |
principal.asset.hostname |
Mapeado diretamente |
event_data.source.ip |
principal.asset.ip |
Mesclado |
event_data.device.userDeviceName |
principal.hostname |
Mapeado diretamente |
event_data.hostName |
principal.hostname |
Mapeado diretamente |
event_data.source.ip |
principal.ip |
Mesclado |
event_data.source.port |
principal.port |
Renomeado/mapeado |
event_data_event_dataType_id |
principal.process.pid |
Mapeado diretamente |
event_data.cve.consoleUrl |
principal.url |
Mapeado diretamente |
event_data.event_dataUrl |
principal.url |
Mapeado diretamente |
device.user.email |
principal.user.email_addresses |
Mesclado |
event_data.user.userEmail |
principal.user.email_addresses |
Mesclado |
event_data.account.name |
principal.user.user_display_name |
Mapeado diretamente |
event_data.user.userName |
principal.user.user_display_name |
Mapeado diretamente |
customer.customerId |
principal.user.userid |
Mapeado diretamente |
customerId |
principal.user.userid |
Mapeado diretamente |
device.user.email |
principal.user.userid |
Mapeado diretamente |
event_data.account.customerId |
principal.user.userid |
Mapeado diretamente |
event_data.customerId |
principal.user.userid |
Mapeado diretamente |
actionforBlocked |
security_result.action |
Mesclado |
event_data_event_dataType_name |
security_result.description |
Mapeado diretamente |
attribution_label |
security_result.detection_fields |
Mesclado |
baseScore_label |
security_result.detection_fields |
Mesclado |
cve_id_label |
security_result.detection_fields |
Mesclado |
exploitAvailable_label |
security_result.detection_fields |
Mesclado |
permission_label |
security_result.detection_fields |
Mesclado |
threats_label |
security_result.detection_fields |
Mesclado |
event_data.cve.severity |
security_result.severity |
Mapeado diretamente |
event_data.blockReason |
security_result.summary |
Mapeado diretamente |
event_data.cve.cveDetailUrl |
security_result.url_back_to_product |
Mapeado diretamente |
event_data.device.deviceId |
target.asset.asset_id |
Mapeado diretamente |
event_data.destination.name |
target.asset.hostname |
Mapeado diretamente |
device.carrier.ipAddress |
target.asset.ip |
Mesclado |
device.network.assignedIp |
target.asset.ip |
Mesclado |
device.network.publicIp |
target.asset.ip |
Mesclado |
event_data.destination.ip |
target.asset.ip |
Mesclado |
event_data.destinationIp |
target.asset.ip |
Mesclado |
ip |
target.asset.ip |
Mesclado |
app_id_md5 |
target.file.md5 |
Mapeado diretamente |
app_id_sha1 |
target.file.sha1 |
Mapeado diretamente |
app_id_sha256 |
target.file.sha256 |
Mapeado diretamente |
event_data.destination.name |
target.hostname |
Mapeado diretamente |
device.carrier.ipAddress |
target.ip |
Mesclado |
device.network.assignedIp |
target.ip |
Mesclado |
device.network.publicIp |
target.ip |
Mesclado |
event_data.destination.ip |
target.ip |
Mesclado |
event_data.destinationIp |
target.ip |
Mesclado |
ip |
target.ip |
Mesclado |
device.location.countryName |
target.location.country_or_region |
Mapeado diretamente |
event_data.location |
target.location.name |
Mapeado diretamente |
device.hw.wifiMacAddress |
target.mac |
Mesclado |
device.network.bssid |
target.mac |
Mesclado |
event_data.accessPointBssid |
target.mac |
Mesclado |
event_data_device_os_osVersion |
target.platform_version |
Mapeado diretamente |
event_data.destination.port |
target.port |
Renomeado/mapeado |
event_data.device.deviceName |
target.resource.name |
Mapeado diretamente |
event_data.user.email |
target.user.email_addresses |
Mesclado |
event_data.user.email |
target.user.userid |
Mapeado diretamente |
event_data.user.name |
target.user.userid |
Mapeado diretamente |
| N/A | metadata.event_type |
Constante: STATUS_UPDATE |
| N/A | metadata.product_name |
Constante: JAMF_SECURITY_CLOUD |
| N/A | metadata.vendor_name |
Constante: JAMF_SECURITY_CLOUD |
| N/A | security_result.severity |
Constante: INFORMATIONAL |
| N/A | target.platform |
Constante: WINDOWS |
Registro de alterações
Ver o registro de alterações deste analisador
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.