Coletar registros do Okta
Este documento explica como ingerir registros do Okta no Google Security Operations usando a API do Okta. O analisador extrai registros do sistema, processando eventos únicos e em lote em uma matriz JSON. Ele normaliza os dados no formato UDM, mapeando campos do Okta para equivalentes da UDM, enriquecendo os dados com user agents analisados, informações geográficas e detalhes de autenticação, além de gerar eventos de resultados de segurança com base em resultados e informações de risco.
Antes de começar
- Instância do Google SecOps
- Acesso privilegiado ao Okta
Como configurar o Okta
Para configurar o SSO do Okta, conclua as seguintes tarefas:
Criar um usuário administrativo do Okta com privilégios somente leitura
- Faça login no console de administrador do Okta.
Crie um usuário padrão.
- Acesse Diretório > Pessoas.
- Clique em Adicionar pessoa e preencha os campos obrigatórios.
Selecione Segurança > Administradores.
Clique em Adicionar administrador.
No campo Atribuição de administrador por administrador, encontre o usuário padrão.
Na seção papéis, selecione Administrador somente leitura na lista.
Saia da conta de administrador.
Receber chave da API
- Faça login no Okta Administrator Console com o usuário administrador somente leitura.
- Acesse Segurança > API > Tokens.
- Clique em Criar token.
- Dê um nome significativo ao token.
- Informe a zona de IP em que a API será usada. Se não tiver certeza, selecione qualquer IP.
- Clique em Criar token.
- Copie a chave de API.
- Clique em OK, entendi.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em Configurações do SIEM > Feeds
Para configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
Para configurar um único feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed, por exemplo, Registros do Okta.
- Selecione API de terceiros como o Tipo de origem.
- Selecione Okta como o Tipo de registro.
- Clique em Próxima.
- Especifique valores para os seguintes parâmetros de entrada:
- Cabeçalho HTTP de autenticação: insira a chave de API do Okta no seguinte formato:
Authorization:<API_KEY>
. - Nome do host da API: especifique o nome de domínio do host do Okta (por exemplo,
<your-domain>.okta.com
). - Namespace do recurso: o namespace do recurso.
- Rótulos de ingestão: o rótulo aplicado aos eventos deste feed.
- Cabeçalho HTTP de autenticação: insira a chave de API do Okta no seguinte formato:
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- Cabeçalhos HTTP de autenticação: usados para autenticar na API de alertas/ameaças e indicadores estáticos do SentinelOne no formato
key:value
. - Nome do host da API: o nome de domínio totalmente qualificado da API do SentinelOne.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: método usado para coletar registros no Google SecOps.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
actor.alternateId |
principal.user.email_addresses |
Extraído de actor.alternateId se for um endereço de e-mail. Se não for um endereço de e-mail, será usado como principal.user.userid . |
actor.displayName |
principal.user.user_display_name |
Mapeado diretamente. |
actor.id |
principal.user.product_object_id |
Mapeado diretamente. |
actor.type |
principal.user.attribute.roles.name |
Mapeado diretamente. |
authenticationContext.authenticationProvider |
security_result.detection_fields.value |
Mapeado diretamente, com a chave authenticationProvider . |
authenticationContext.credentialProvider |
security_result.detection_fields.value |
Mapeado diretamente, com a chave credentialProvider . |
authenticationContext.credentialType |
extensions.auth.mechanism |
Usado para derivar o mecanismo de autenticação (OTP, USERNAME_PASSWORD, LOCAL). |
authenticationContext.externalSessionId |
network.parent_session_id |
Mapeado diretamente. |
client.device |
principal.asset.type / additional.fields.value.string_value |
Mapeado para principal.asset.type (WORKSTATION, MOBILE, ROLE_UNSPECIFIED) com base no valor. Também mapeado como valor de string com a chave device em additional.fields . |
client.geographicalContext.city |
principal.location.city |
Mapeado diretamente. |
client.geographicalContext.country |
principal.location.country_or_region |
Mapeado diretamente. |
client.geographicalContext.geolocation.lat |
principal.location.region_latitude |
Mapeado diretamente. |
client.geographicalContext.geolocation.lon |
principal.location.region_longitude |
Mapeado diretamente. |
client.geographicalContext.postalCode |
additional.fields.value.string_value |
Mapeado diretamente como um valor de string com a chave Postal code em additional.fields . |
client.geographicalContext.state |
principal.location.state |
Mapeado diretamente. |
client.ipAddress |
principal.ip , principal.asset.ip |
Mapeado diretamente. |
client.userAgent.browser |
target.resource.attribute.labels.value |
Mapeado diretamente, com a chave Browser . |
client.userAgent.os |
principal.platform |
Mapeado para a plataforma (LINUX, WINDOWS, MAC) com base no valor. |
client.userAgent.rawUserAgent |
network.http.user_agent , network.http.parsed_user_agent |
Mapeados e analisados diretamente. |
client.zone |
additional.fields.value.string_value |
Mapeado diretamente como um valor de string com a chave zone em additional.fields . |
debugContext.debugData.behaviors |
security_result.description , security_result.detection_fields |
Mapeado diretamente para a descrição. Os comportamentos individuais são extraídos e adicionados como campos de detecção. |
debugContext.debugData.changedAttributes |
security_result.detection_fields.value |
Mapeado diretamente, com a chave changedAttributes . |
debugContext.debugData.clientAddress |
principal.ip , principal.asset.ip |
Mapeado diretamente se request.ipChain e client.ipAddress estiverem ausentes. |
debugContext.debugData.deviceFingerprint |
target.asset.asset_id |
Mapeado diretamente, prefixado com device_finger_print: . |
debugContext.debugData.dtHash |
security_result.detection_fields.value |
Mapeado diretamente, com a chave dtHash . |
debugContext.debugData.factor |
security_result.detection_fields.value |
Mapeado diretamente, com a chave factor . |
debugContext.debugData.factorIntent |
security_result.detection_fields.value |
Mapeado diretamente, com a chave factorIntent . |
debugContext.debugData.logOnlySecurityData.risk.reasons |
security_result.detection_fields.value |
Mapeado diretamente, com a chave Risk Reasons . |
debugContext.debugData.privilegeGranted |
target.user.attribute.roles |
Divididos em privilégios individuais e adicionados como funções com nome e descrição. |
debugContext.debugData.pushOnlyResponseType |
security_result.detection_fields.value |
Mapeado diretamente, com a chave pushOnlyResponseType . |
debugContext.debugData.pushWithNumberChallengeResponseType |
security_result.detection_fields.value |
Mapeado diretamente, com a chave pushWithNumberChallengeResponseType . |
debugContext.debugData.requestUri |
extensions.auth.auth_details |
Mapeado diretamente. |
debugContext.debugData.suspiciousActivityEventId |
security_result.detection_fields.value |
Mapeado diretamente, com a chave suspiciousActivityEventId . |
debugContext.debugData.suspiciousActivityEventType |
security_result.detection_fields.value |
Mapeado diretamente, com a chave suspiciousActivityEventType . |
debugContext.debugData.threatDetections |
security_result.detection_fields.value |
Mapeado diretamente, com a chave threatDetections . |
debugContext.debugData.threatSuspected |
security_result.detection_fields.value , security_result.threat_status |
Mapeado como um campo de detecção com a chave threatSuspected . Usado para derivar o status da ameaça (ACTIVE ou FALSE_POSITIVE). |
debugContext.debugData.url |
target.url |
Mapeado diretamente. |
displayMessage |
security_result.summary |
Mapeado diretamente. |
eventType |
metadata.product_event_type , metadata.event_type |
Mapeado diretamente para product_event_type . Usado para derivar event_type (USER_LOGIN, USER_LOGOUT, USER_CHANGE_PASSWORD, USER_CHANGE_PERMISSIONS, USER_DELETION, GROUP_MODIFICATION, SETTING_MODIFICATION, SCHEDULED_TASK_ENABLE, RESOURCE_CREATION, USER_UNCATEGORIZED). |
legacyEventType |
security_result.detection_fields.value |
Mapeado diretamente, com a chave legacyEventType . |
outcome.reason |
security_result.category_details |
Mapeado diretamente. |
outcome.result |
security_result.action |
Mapeado para ação (ALLOW, CHALLENGE, BLOCK) com base no valor. |
published |
metadata.event_timestamp |
Analisado para carimbo de data/hora. |
request.ipChain.n.geographicalContext |
intermediary.location |
Contexto geográfico dos IPs intermediários na cadeia de solicitação. |
request.ipChain.n.ip |
intermediary.ip |
Endereços IP de intermediários na cadeia de solicitação. |
securityContext.asNumber |
security_result.detection_fields.value |
Mapeado diretamente, com a chave asNumber . |
securityContext.asOrg |
security_result.detection_fields.value |
Mapeado diretamente, com a chave asOrg . |
securityContext.domain |
security_result.detection_fields.value |
Mapeado diretamente, com a chave domain . |
securityContext.isp |
security_result.detection_fields.value |
Mapeado diretamente, com a chave isp . |
securityContext.isProxy |
security_result.detection_fields.value |
Mapeado diretamente, com a chave anonymized IP . |
target.n.alternateId |
target.user.email_addresses / target.user.userid |
Se for um endereço de e-mail, mapeado para target.user.email_addresses . Se não for um endereço de e-mail, será usado como target.user.userid . |
target.n.detailEntry.clientAppId |
target.asset_id |
Mapeado diretamente, prefixado com Client_app_id: . |
target.n.detailEntry.methodTypeUsed |
target.resource_ancestors.attribute.labels.value |
Mapeado diretamente, com a chave methodTypeUsed quando o tipo de destino é AuthenticatorEnrollment. |
target.n.detailEntry.methodUsedVerifiedProperties |
target.resource_ancestors.attribute.labels.value |
Mapeado diretamente, com a chave methodUsedVerifiedProperties quando o tipo de destino é AuthenticatorEnrollment. |
target.n.detailEntry.policyType |
target.resource_ancestors.attribute.labels.value |
Mapeado diretamente, com a chave Policy Type . |
target.n.detailEntry.signOnModeType |
security_result.detection_fields.value |
Mapeado diretamente, com a chave signOnModeType . |
target.n.displayName |
target.user.user_display_name / target.application / target.resource.name |
Mapeamento com base no tipo de destino. |
target.n.id |
target.user.product_object_id / target.resource.product_object_id / target.resource_ancestors.product_object_id |
Mapeamento com base no tipo de destino. |
target.n.type |
target.user.attribute.roles.name / target.resource.resource_subtype / target.resource_ancestors.resource_subtype |
Mapeamento com base no tipo de destino. |
transaction.id |
network.session_id |
Mapeado diretamente. |
transaction.type |
additional.fields.value.string_value |
Mapeado diretamente como um valor de string com a chave type em additional.fields . |
uuid |
metadata.product_log_id |
Mapeado diretamente. |
N/A | metadata.vendor_name |
Defina como Okta . |
N/A | metadata.product_name |
Defina como Okta . |
N/A | extensions.auth.type |
Defina como SSO . |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.