Coletar registros do Okta
Este documento explica como transferir registros do Okta para o Google Security Operations usando a API 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 os campos do Okta para equivalentes do UDM, enriquecendo os dados com agentes de usuário 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
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você tem acesso privilegiado ao Okta.
Configurar o Okta
Para configurar o SSO do Okta, conclua as seguintes tarefas:
Criar um usuário administrativo do Okta com privilégios de leitura somente
- Faça login no console do 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 pelo 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 Console do administrador do Okta com o usuário administrador somente leitura.
- Acesse Segurança > API > Tokens.
- Clique em Criar token.
- Dê um nome significativo para o 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 um feed no Google SecOps para processar registros do Okta
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- No campo Nome do feed, insira um nome para o feed (por exemplo, Okta Logs).
- 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 de recursos: o namespace de recursos.
- Rótulos de ingestão: o rótulo aplicado aos eventos desse 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.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
actor.alternateId |
principal.user.email_addresses |
Extraídos 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 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 |
Mapeado e analisado diretamente. |
client.zone |
additional.fields.value.string_value |
Mapeado diretamente como valor de string com a chave zone em additional.fields . |
debugContext.debugData.behaviors |
security_result.description , security_result.detection_fields |
Mapeado diretamente à 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 de 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ções. |
request.ipChain.n.ip |
intermediary.ip |
Endereços IP de intermediários na cadeia de solicitações. |
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 |
Mapeado 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 |
Mapeado com base no tipo de destino. |
target.n.type |
target.user.attribute.roles.name / target.resource.resource_subtype / target.resource_ancestors.resource_subtype |
Mapeado com base no tipo de destino. |
transaction.id |
network.session_id |
Mapeado diretamente. |
transaction.type |
additional.fields.value.string_value |
Mapeado diretamente como 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 . |
N/A | is_alert |
Defina como verdadeiro para eventos security.threat.detected e user.account.report_suspicious_activity_by_enduser . |
N/A | is_significant |
Defina como verdadeiro para eventos security.threat.detected e user.account.report_suspicious_activity_by_enduser . |
Alterações
2024-05-16
- Se
is_alert
for verdadeiro eis_significant
for verdadeiro, definasecurity_result.alert_state
comoALERTING
.
2024-03-05
- O campo
security_result.action
foi atualizado para indicar se o tráfego foi permitido ou bloqueado.
2024-02-16
Correção de bugs:
- Quando
target.0.type
éUser
ouAppUser
,target.0.alternateId
é mapeado paratarget.user.userid
. - Quando
target.1.type
éUser
ouAppUser
,target.1.alternateId
é mapeado paratarget.user.userid
.
2023-12-14
securityContext.asNumber
foi mapeado parasecurity_result.detection_fields
.legacyEventType
foi mapeado parasecurity_result.detection_fields
.conditional_check
foi adicionado antes de definirmetadata.event_type
.
2023-06-28
- O valor completo do
debugContext.debugData.suspiciousActivityEventType
foi mapeado parasecurity_result.detection_fields
. - O valor completo do
debugContext.debugData.logOnlySecurityData.behaviors.New Device
foi mapeado parasecurity_result.detection_fields
.
2023-06-09
- O campo
debugContext.debugData.deviceFingerprint
é mapeado paratarget.asset.asset_id
. - O valor completo de
debugContext.debugData.risk.reasons
foi mapeado parasecurity_result.detection_fields
.
2023-05-17
- O campo "authenticationContext.externalSessionId" está mapeado para "network.parent_session_id".
- O campo "debugContext.debugData.pushOnlyResponseType" é mapeado para "security_result.detection_fields.key/value".
- O campo "debugContext.debugData.factor" é mapeado para "security_result.detection_fields.key/value".
- O campo "debugContext.debugData.factorIntent" é mapeado para "security_result.detection_fields.key/value".
- O campo "debugContext.debugData.pushWithNumberChallengeResponseType" é mapeado para "security_result.detection_fields.key/value".
- O campo "debugContext.debugData.dtHash" é mapeado para "security_result.detection_fields.key/value".
- O campo "client.userAgent.rawUserAgent" é mapeado para "network.http.user_agent".
- O mapeamento foi alterado de "ALLOW_WITH_MODIFICATION" para o valor de enumeração "CHALLENGE" em "security_result.action".
- Para o eventType 'system.api_token.create', mude metadata.event_type de 'USER_UNCATEGORIZED' para 'RESOURCE_CREATION'.
2023-04-28
Correção de bugs:
- O mapeamento de
security_result.threat_status
paraACTIVE
foi modificado quandodebugContext.debugData.threatSuspected
étrue
ou mapeado paraFALSE_POSITIVE
.
2023-03-24
- Os campos
logOnlySecurityData
foram mapeados parasecurity_result.detection_fields
. - Além disso, resolvemos o erro de análise adicionando
DEFERRED
à lista de ações.
2023-04-11
- Os campos que são mapeados para
http.user_agent
foram mapeados parahttp.parsed_user_agent
. target.displayName
foi mapeado paratarget.resource_ancestors.name
.targetfield.detailEntry.methodTypeUsed
foi mapeado paratarget.resource_ancestors.attribute.labels
.targetfield.detailEntry.methodUsedVerifiedProperties
foi mapeado paratarget.resource_ancestors.attribute.labels
.
2023-02-20
metadata.event_type
mudou deUSER_LOGIN
paraSTATUS_UPDATE
, em queeventType
éuser.authentication.auth_via_AD_agent
2022-12-14
debugContext.debugData.changedAttributes
foi mapeado parasecurity_result.detection_fields
.- Foi adicionada uma verificação de valor nulo para
detail.actor.alternateId
.
2022-11-17
- O campo
target[n].alternateId
é mapeado paratarget.resource.attribute.labels
. - O campo
detail.target.0.alternateId
é mapeado paratarget.resource.attribute.labels
.
2022-11-08
Correção de bugs:
- Foi adicionada uma condição para a verificação de e-mail adequada do campo
user_email
. - Foi adicionada uma verificação para o campo
Action1
que não está emRATE_LIMIT
. - Adição de verificação nula e desconhecida para
actor.displayName
.
2022-11-04
- Foi adicionado suporte a registros com vários eventos.
2022-10-15
signOnModeType
mapeado parasecurity_result.detection_fields
.authenticationProvider
mapeado parasecurity_result.detection_fields
.credentialProvider
mapeado parasecurity_result.detection_fields
.device
mapeado paraadditional.fields
.zone
mapeado paraadditional.fields
.type
mapeado paraadditional.fields
.
2022-10-14
Correção de bugs:
- Adição de uma verificação condicional para "principal.user.email_addresses" e "target.user.email_addresses".
- Adição de um grok para verificar se o ip_address é válido para o campo "request.ipChain.0.ip" mapeado para "principal.ip".
- A condição on_error foi adicionada ao campo "debugContext.debugData.url" mapeado para "target.url".
2022-10-03
client.userAgent.os
foi mapeado paraprincipal.platform
.client.device
foi mapeado paraprincipal.asset.type
.anonymized IP
mapeado (string fixada) para security_result.detection_fields.key, em que o valor "securityContext.isProxy" é correspondente a security_result.detection_fields.value.
16/09/2022
- "securityContext.asOrg" mapeado para "security_result.category_details".
- "securityContext.isProxy" mapeado para "security_result.detection_fields".
- "securityContext.domain" mapeado para "security_result.detection_fields".
- "securityContext.isp" mapeado para "security_result.detection_fields".
- "debugContext.debugData.risk.level" mapeado para "security_result.severity".
- 'debugContext.debugData.risk.reasons' mapeado para 'security_result.detection_fields'.
2022-08-12
- Os registros recém-ingeridos foram analisados e mapeados para os seguintes campos:
- "detail.uuid" mapeado para "metadata.product_log_id".
- "detail.eventType" mapeado para "metadata.product_event_type"
- "detail.actor.id" mapeado para "principal.user.product_object_id".
- if 'detail.actor.alternateId' mapped to 'principal.user.userid' else
- "detail.actor.alternateId" mapeado para "principal.user.email_addresses".
- "detail.actor.displayName" mapeado para "principal.user.user_display_name".
- "detail.actor.type" mapeado para ".principal.user.attribute.roles".
- "detail.client.ipChain.0.ip" mapeado para "principal.ip".
- "detail.client.ipChain.0.geographicalContext.state" mapeado para "principal.location.state".
- "detail.client.ipChain.0.geographicalContext.city" mapeado para "principal.location.city".
- "detail.client.ipChain.0.geographicalContext.country" mapeado para "principal.location.country_or_region".
- "detail.debugContext.debugData.requestUri" mapeado para "target.url".
- "detail.target.0.type" mapeado para "target.resource.resource_subtype".
- "detail.target.0.id" mapeado para "target.resource.resource.product_object_id".
- "detail.target.0.displayName" mapeado para "target.resource.resource_subtype".
- "detail.target.0.detailEntry.policyType" mapeado para "target.resource_ancestors.attribute.labels".
- "detail.outcome.reason" mapeado para "security_result.category_details".
- "detail.debugContext.debugData.threatSuspected" mapeado para "security_result.detection_fields".
- "detail.displayMessage" mapeado para "security_result.summary".
- "detail.outcome.result" mapeado para "security_result.action".
- "detail.severity" mapeado para "security_result.severity".
- "detail.transaction.id" mapeado para "network.session_id".
- "detail.debugContext.debugData.requestUri" mapeado para "extensions.auth.auth_details".
2022-07-08
- O mapeamento de
actor.type
foi modificado deprincipal.user.role_name
paraprincipal.user.attribute.roles
. - O mapeamento de
target.0.type
foi modificado detarget.user.role_name
paratarget.user.attribute.roles
. - O mapeamento de
target.1.type
foi modificado detarget.user.role_name
paratarget.user.attribute.roles
.
2022-06-15
Melhoria:
- para
target.0.type
==Token
. target.0.detailEntry.clientAppId
foi mapeado paratarget.asset_id
.- Adicionamos uma verificação condicional para o campo "transaction.id" mapeado para o campo "network.session_id" do UDM.
2022-06-03
Melhoria:
- Mapeamos debugContext.debugData.privilegeGranted para target.user.attribute.roles.name.
- O debugContext.debugData.requestUri foi mapeado para extensions.auth.auth_details.
- Mapeamos debugContext.debugData.suspiciousActivityEventId, debugContext.debugData.threatDetections e debugContext.debugData.threatSuspected para security_result.detection_fields.
2022-03-22
Melhoria:
- debugContext.debugData.behaviors mapeado para security_result.description.
- debugContext.debugData.threatSuspected mapeado para security_result.threat_status.
- debugContext.debugData.risk mapeado para security_result.severity.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.