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 Admin Console do Okta 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 > Adicionar novo
- Central de conteúdo > Pacotes de conteúdo > Começar
Como configurar o feed do Okta
Para configurar esse tipo de registro, siga estas etapas:
- Clique no pacote Okta.
- Localize o logtype Okta.
Especifique valores para os seguintes campos:
- Tipo de origem: API de terceiros (recomendado)
- 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.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Namespace do recurso: namespace associado ao feed.
- Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Clique em Criar feed.
Para mais informações sobre como configurar vários feeds para diferentes tipos de registros nessa família de produtos, consulte Configurar feeds por produto.
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.