Coletar registros de alerta do Palo Alto Prisma Cloud
Visão geral
Esse analisador extrai registros de alerta do Palo Alto Prisma Cloud no formato JSON e os transforma no UDM. O analisador executa a normalização de dados, as conversões de tipo e a lógica condicional para preencher os campos apropriados do UDM. Ele também processa estruturas e matrizes JSON aninhadas nos dados de registro para extrair informações relevantes.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você tem acesso privilegiado ao Palo Alto Prisma Cloud.
Configurar um feed no Google SecOps para processar alertas do Prisma Cloud da Palo Alto
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, PAN Prisma Cloud Alerts).
- Selecione Webhook como o Tipo de origem.
- Selecione Payload do Palo Alto Prisma Cloud Alerts como o Tipo de registro.
- Clique em Próxima.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
. - Namespace de recursos: o namespace de recursos.
- Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar esse feed.
- Copie e armazene a chave secreta. Não é possível acessar essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas essa ação torna a chave secreta anterior obsoleta.
- Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
- Clique em Concluído.
Criar uma chave de API para o feed de webhook
Acesse o console do Google Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especificar o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
Ative a autenticação especificando a chave de API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendação: especifique a chave de API como um cabeçalho em vez de especificar no URL.
Se o cliente do webhook não tiver suporte a cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua:
ENDPOINT_URL
: o URL do endpoint do feed.API_KEY
: a chave de API para autenticação no Google Security Operations.SECRET
: a chave secreta que você gerou para autenticar o feed.
Configurar o webhook do Palo Alto Prisma Cloud para o Google SecOps
- Faça login no Prisma Cloud da Palo Alto.
- Selecione Configurações > Integrações e notificações ((and_then)) Integrações.
- Clique em Adicionar integração.
- Selecione Webhook.
- Especifique valores para os seguintes parâmetros de entrada:
- Nome da integração: forneça um nome exclusivo e descritivo (por exemplo, Google SecOps).
- URL do webhook: insira o ENDPOINT_URL.
- Opcional: forneça uma descrição da integração.
- Opcional: ative Custom Payload > clique em Next para revisar o payload personalizado.
- Clique em Próxima.
- Teste e salve a integração.
Configurar alertas do Prisma Cloud da Palo Alto Networks
- No console do Prisma Cloud da Palo Alto, acesse Alerts > View Alert Rules.
- Selecione uma regra de alerta para editar.
- Opcional: crie um novo alerta para a Infraestrutura do Cloud.
- Opcional: crie um novo alerta para carga de trabalho do Cloud.
- Acesse Configurar notificações.
- Selecione Webhook.
- Opcional: selecione os canais para receber notificações de alertas acionados pela regra de alerta.
- Clique em Próxima.
- Clique em Salvar.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
accountId |
target.resource.id |
O valor de accountId do registro bruto. |
accountId |
target.resource.product_object_id |
O valor de accountId do registro bruto. Isso substitui o campo resource.id descontinuado. |
alertId |
security_result.detection_fields[].key |
A chave está definida como "alert id". |
alertId |
security_result.detection_fields[].value |
O valor de alertId do registro bruto. |
alertRuleId |
security_result.rule_id |
O valor de alertRuleId do registro bruto. |
alertRuleName |
security_result.rule_name |
O valor de alertRuleName do registro bruto. |
alertStatus |
security_result.detection_fields[].key |
A chave está definida como "status do alerta". |
alertStatus |
security_result.detection_fields[].value |
O valor de alertStatus do registro bruto. |
alertTs |
security_result.detection_fields[].key |
A chave está definida como "alertTs". |
alertTs |
security_result.detection_fields[].value |
O valor de alertTs do registro bruto, convertido em uma string. |
callbackUrl |
metadata.url_back_to_product |
O valor de callbackUrl do registro bruto. |
cloudType |
principal.cloud.environment |
Se cloudType for "gcp" (sem distinção entre maiúsculas e minúsculas), o valor será definido como "GOOGLE_CLOUD_PLATFORM". |
complianceMetadata[].complianceId |
security_result.detection_fields[].key |
A chave está definida como "complianceId". |
complianceMetadata[].complianceId |
security_result.detection_fields[].value |
O valor de complianceMetadata[].complianceId do registro bruto. |
complianceMetadata[].customAssigned |
security_result.detection_fields[].key |
A chave está definida como "customAssigned". |
complianceMetadata[].customAssigned |
security_result.detection_fields[].value |
O valor de complianceMetadata[].customAssigned do registro bruto, convertido em uma string. |
complianceMetadata[].policyId |
security_result.detection_fields[].key |
A chave está definida como "ID da política". |
complianceMetadata[].policyId |
security_result.detection_fields[].value |
O valor de complianceMetadata[].policyId do registro bruto. |
complianceMetadata[].requirementId |
security_result.rule_id |
O valor de complianceMetadata[].requirementId do registro bruto. |
complianceMetadata[].requirementName |
security_result.summary |
O valor de complianceMetadata[].requirementName do registro bruto. |
complianceMetadata[].requirementViewOrder |
security_result.detection_fields[].key |
A chave é definida como "requirementViewOrder". |
complianceMetadata[].requirementViewOrder |
security_result.detection_fields[].value |
O valor de complianceMetadata[].requirementViewOrder do registro bruto, convertido em uma string. |
complianceMetadata[].sectionDescription |
security_result.detection_fields[].key |
A chave está definida como "sectionDescription". |
complianceMetadata[].sectionDescription |
security_result.detection_fields[].value |
O valor de complianceMetadata[].sectionDescription do registro bruto. |
complianceMetadata[].sectionId |
security_result.detection_fields[].key |
A chave é definida como "sectionId". |
complianceMetadata[].sectionId |
security_result.detection_fields[].value |
O valor de complianceMetadata[].sectionId do registro bruto. |
complianceMetadata[].sectionLabel |
security_result.detection_fields[].key |
A chave é definida como "sectionLabel". |
complianceMetadata[].sectionLabel |
security_result.detection_fields[].value |
O valor de complianceMetadata[].sectionLabel do registro bruto. |
complianceMetadata[].sectionViewOrder |
security_result.detection_fields[].key |
A chave está definida como "sectionViewOrder". |
complianceMetadata[].sectionViewOrder |
security_result.detection_fields[].value |
O valor de complianceMetadata[].sectionViewOrder do registro bruto, convertido em uma string. |
complianceMetadata[].standardDescription |
security_result.detection_fields[].key |
A chave está definida como "standardDescription". |
complianceMetadata[].standardDescription |
security_result.detection_fields[].value |
O valor de complianceMetadata[].standardDescription do registro bruto. |
complianceMetadata[].standardName |
security_result.rule_name |
O valor de complianceMetadata[].standardName do registro bruto. |
complianceMetadata[].systemDefault |
security_result.detection_fields[].key |
A chave está definida como "systemDefault". |
complianceMetadata[].systemDefault |
security_result.detection_fields[].value |
O valor de complianceMetadata[].systemDefault do registro bruto, convertido em uma string. |
create_time |
metadata.event_timestamp , events[].timestamp |
O valor de create_time do registro bruto. |
data.allocationId |
principal.resource.product_object_id |
O valor de data.allocationId do registro bruto. |
data.publicIp |
principal.ip |
O valor de data.publicIp do registro bruto. |
deleted |
additional.fields[].key |
A chave está definida como "excluída". |
deleted |
additional.fields[].value.string_value |
O valor de deleted do registro bruto, convertido em uma string. |
description |
metadata.description |
O valor de description do registro bruto. |
firstSeen |
principal.asset.first_seen_time |
O valor de firstSeen do registro bruto, analisado como um carimbo de data/hora (formato UNIX_MS ou UNIX). |
hasFinding |
security_result.detection_fields[].key |
A chave está definida como "hasFinding". |
hasFinding |
security_result.detection_fields[].value |
O valor de hasFinding do registro bruto, convertido em uma string. |
lastSeen |
principal.asset.last_discover_time |
O valor de lastSeen do registro bruto, analisado como um carimbo de data/hora (formato UNIX_MS ou UNIX). |
N/A | metadata.event_type |
Defina como "USER_RESOURCE_ACCESS" se não for substituído por um tipo de evento específico do registro. Caso contrário, defina como "GENERIC_EVENT". |
N/A | metadata.product_name |
Fixado em "CASB". |
N/A | metadata.vendor_name |
Fixado em "Palo Alto Networks". |
policyDescription |
security_result.detection_fields[].key |
A chave está definida como "policyDescription". |
policyDescription |
security_result.detection_fields[].value |
O valor de policyDescription do registro bruto. |
policyId |
security_result.detection_fields[].key |
A chave está definida como "ID da política". |
policyId |
security_result.detection_fields[].value |
O valor de policyId do registro bruto. |
policyLabels |
additional.fields[].key |
A chave está definida como "policyLabels". |
policyLabels |
additional.fields[].value.string_value |
O valor de policyLabels do registro bruto. |
policyName |
security_result.description |
O valor de policyName do registro bruto. |
policyRecommendation |
security_result.detection_fields[].key |
A chave está definida como "recomendação de política". |
policyRecommendation |
security_result.detection_fields[].value |
O valor de policyRecommendation do registro bruto. |
policyType |
security_result.detection_fields[].key |
A chave está definida como "Tipo de política". |
policyType |
security_result.detection_fields[].value |
O valor de policyType do registro bruto. |
reason |
security_result.summary |
O valor de reason do registro bruto. |
recommendation |
security_result.detection_fields[].key |
A chave está definida como "Recomendação". |
recommendation |
security_result.detection_fields[].value |
O valor de recommendation do registro bruto. |
resource.additionalInfo |
principal.resource.attribute.labels[].key |
A chave está definida como "resource additionalInfo". |
resource.additionalInfo |
principal.resource.attribute.labels[].value |
O valor de resource.additionalInfo do registro bruto. |
resource.cloudAccountGroups |
principal.resource.attribute.labels[].key |
A chave está definida como "resource cloudAccountGroups {index}". |
resource.cloudAccountGroups |
principal.resource.attribute.labels[].value |
O valor de resource.cloudAccountGroups[] do registro bruto. |
resource.cloudType |
principal.resource.attribute.labels[].key |
A chave é definida como "resource cloudType". |
resource.cloudType |
principal.resource.attribute.labels[].value |
O valor de resource.cloudType do registro bruto. |
resource.data |
principal.resource.attribute.labels[].key |
A chave é definida como "resource data {nested_key}". |
resource.data |
principal.resource.attribute.labels[].value |
O valor de resource.data[] do registro bruto. |
resource.id |
principal.resource.product_object_id |
O valor de resource.id do registro bruto. |
resource.name |
principal.resource.name |
O valor de resource.name do registro bruto. |
resource.region |
principal.location.country_or_region |
O valor de resource.region do registro bruto. |
resource.regionId |
principal.cloud.availability_zone |
O valor de resource.regionId do registro bruto. |
resource.resourceApiName |
principal.resource.attribute.labels[].key |
A chave é definida como "resource resourceApiName". |
resource.resourceApiName |
principal.resource.attribute.labels[].value |
O valor de resource.resourceApiName do registro bruto. |
resource.resourceTags |
principal.resource.attribute.labels[].key |
A chave está definida como "resource resourceTags {nested_key}". |
resource.resourceTags |
principal.resource.attribute.labels[].value |
O valor de resource.resourceTags[] do registro bruto. |
resource.resourceTs |
principal.resource.attribute.labels[].key |
A chave está definida como "resource resourceTs". |
resource.resourceTs |
principal.resource.attribute.labels[].value |
O valor de resource.resourceTs do registro bruto. |
resource.resourceType |
principal.resource.attribute.labels[].key |
A chave é definida como "resource resourceType". |
resource.resourceType |
principal.resource.attribute.labels[].value |
O valor de resource.resourceType do registro bruto. |
resource.rrn |
principal.resource.attribute.labels[].key |
A chave está definida como "resource rrn". |
resource.rrn |
principal.resource.attribute.labels[].value |
O valor de resource.rrn do registro bruto. |
resource.url |
principal.url |
O valor de resource.url do registro bruto. |
resourceCloudService |
principal.resource.attribute.labels[].key |
A chave está definida como "serviço de nuvem de recurso". |
resourceCloudService |
principal.resource.attribute.labels[].value |
O valor de resourceCloudService do registro bruto. |
resourceName |
principal.resource.name |
O valor de resourceName do registro bruto. |
resourceRegion |
principal.location.country_or_region |
O valor de resourceRegion do registro bruto. |
resourceRegionId |
principal.cloud.availability_zone |
O valor de resourceRegionId do registro bruto. |
resourceType |
target.resource.resource_subtype |
O valor de resourceType do registro bruto. |
severity |
security_result.severity |
O valor de severity do registro bruto, convertido em maiúsculas. Mapeado para valores de gravidade do UDM (CRÍTICO, ALTO, MÉDIO, BAIXO, INFORMATIVO). |
source |
principal.application |
O valor de source do registro bruto. |
unifiedAssetId |
principal.asset.asset_id |
O valor de unifiedAssetId do registro bruto, com prefixo "ASSETID:". |
Alterações
2023-12-10
- Um padrão Grok foi adicionado para extrair a parte JSON.
- "resourceId" foi mapeado para "principal.resource.product_object_id".
- "accountId" foi mapeado para "target.resource.product_object_id".
- "alertRuleName" foi mapeado para "security_result.rule_name".
- Mapeamos "accountName" para "target.resource.name".
- O mapeamento de "hasFinding" para "security_result.detection_fields" foi feito.
- "resourceRegionId" foi mapeado para "principal.cloud.availability_zone".
- Mapeamos "source" para "principal.application".
- "callbackUrl" foi associado a "metadata.url_back_to_product".
- "alertRuleId" foi associado a "security_result.rule_id".
- O "alertId" foi mapeado para "security_result.detection_fields".
- "policyLabels" foi associado a "additional.fields".
- "policyName" foi associado a "security_result.description".
- "resourceName" foi associado a "principal.resource.name".
- "resourceRegion" foi mapeado para "principal.location.country_or_region".
- "policyDescription" foi associado a "security_result.detection_fields".
- "policyRecommendation" foi mapeado para "security_result.detection_fields".
- Mapeamos "resourceCloudService" para "principal.resource.attribute.labels".
- "resource.url" foi associado a "principal.url".
- "alertTs" foi mapeado para "security_result.detection_fields".
- "firstSeen" foi mapeado para "principal.asset.first_seen_time".
- "lastSeen" foi mapeado para "principal.asset.last_discover_time".
- O "reason" foi mapeado para "security_result.summary".
- "alertStatus" foi associado a "security_result.detection_fields".
- Se o valor de "severity" for "HIGH", defina "security_result.severity" como "HIGH".
- Se o valor de "cloudType" for "gcp", defina "principal.cloud.environment" como "GOOGLE_CLOUD_PLATFORM".
2023-08-17
- Parser recém-criado.