Pular para o conteúdo principal

Logs do sistema Okta

info

Visualização

O Lakewatch está em Visualização privada. Para solicitar acesso, entre em contato com a equipe da sua account Databricks.

O Lakewatch fornece um conector de API para ingerir logs do sistema do Okta. Este artigo aborda pré-requisitos, instruções de configuração, esquemas de conector e observáveis de analisador do Lakewatch.

Pré-requisitos​

O conector requer:

  1. Serverless Lakeflow Spark Declarative Pipelines habilitado em seu workspace.
  2. Unity Catalog, com privilégios para criar ou usar uma conexão do Unity Catalog. Consulte Permissões de conexão.
  3. Uma account de superadministrador do Okta ativa, administrador de organização ou administrador somente leitura. O Databricks recomenda o uso de uma account de administrador somente leitura para acesso de privilégio mínimo ao Log do Sistema.
  4. Acesso ao Console de Administração do Okta.
nota

Um token de API tem as mesmas permissões que o administrador que o cria. Se as permissões desse administrador forem alteradas ou se a account for desativada, o token será afetado. Para obter detalhes, consulte Gerenciar tokens da API Okta.

Limitações conhecidas​

  • O SCD tipo 2 não é suportado, pois os logs do sistema Okta são apenas de acréscimo.
  • O conector suporta apenas autenticação por token da API.
  • A busca retroativa histórica não pode exceder os 90 dias que o Okta retém os Logs do Sistema. Consulte Escolher até que ponto ingerir.

Configurar Okta para ingestão​

  1. Faça login no console de administração do Okta com a account de administrador que possui o token.
  2. Acesse Segurança > API .
  3. Clique na tab Tokens .
  4. Clique em Criar token .
  5. Insira um nome para o token.
  6. Para As chamadas de API feitas com este token devem originar-se de , selecione Qualquer IP .
  7. Clique em Criar token .
  8. Copie o token de API SSWS exibido. O Okta não exibirá o token novamente.
  9. Anote o seu domínio organizacional Okta, como company-name.okta.com.
  10. Na Tokens tab, confirme se o Função do token é Superadministrador , Administrador da organização ou Administrador somente leitura .

Para mais informações, consulte Gerenciar tokens de API do Okta.

dica

Ao criar uma conexão por meio da interface do usuário do Lakewatch, você precisará do Domínio e do Token da API de SSWS coletados acima.

Os passos seguintes​

Após concluir a configuração acima, crie uma fonte de dados com o conector Okta na interface do usuário do Lakewatch. Veja conectores de API para obter instruções.


Esquemas do conector e do Lakewatch​

O conector ingere a seguinte tabela de origem do esquema de origem default:

Tabela de origem

Dados do Okta

Analisador Lakewatch integrado

system_logs

Eventos de segurança de Log do Sistema Okta

okta_system_log

Tabela de origem

Dados do Okta

Analisador Lakewatch integrado

system_logs

Eventos de segurança de Log do Sistema Okta

okta_system_log

O conector grava a tabela de origem no destino bruto da fonte de dados. O analisador integrado grava uma tabela analisada separada nomeada após o analisador, a menos que você defina um destino analisado ao configurar a fonte de dados.

Colunas gerenciadas pelo Lakewatch​

O conector adiciona as seguintes colunas a cada linha de origem bruta:

  • lw_id: Uma string não nula que o Lakewatch usa como key primária. O conector deriva um ID estável e ordenável por tempo dos campos Okta published e uuid. O ID suporta desduplicação em sincronizações incrementais.
  • time: Um timestamp não nulo analisado de published como um timestamp RFC 3339. O conector usa o valor published da origem para ordenação incremental.

A tabela analisada leva o lw_id adiante. O analisador também atribui a coluna time analisada e adiciona:

  • lw_meta: Metadados padrão de processamento do Lakewatch.
  • lw_observables: Valores extraídos de campos marcados como observáveis de segurança no analisador.

Para obter mais informações, consulte Referência do analisador.

Esquema de tabela de conector bruto​

O esquema a seguir combina os campos padrão do Lakeflow Connect com as colunas lw_id e time exclusivas do Lakewatch. Para definições de campo aninhadas, consulte a referência da API de Log do Sistema Okta.

Esquema

Coluna

Tipo de dados

lw_id

STRING

time

TIMESTAMP

uuid

STRING

published

TIMESTAMP

eventType

STRING

version

STRING

severity

STRING

legacyEventType

STRING

displayMessage

STRING

actor

STRUCT<id: STRING, displayName: STRING, type: STRING, alternateId: STRING, detailEntry: MAP<STRING, STRING>>

authenticationContext

STRUCT<authenticationProvider: STRING, authenticationStep: INT, credentialProvider: STRING, credentialType: STRING, interface: STRING, externalSessionId: STRING, issuer: STRUCT<id: STRING, type: STRING>>

client

STRUCT<id: STRING, ipAddress: STRING, userAgent: STRUCT<rawUserAgent: STRING, os: STRING, browser: STRING>, zone: STRING, device: STRING, geographicalContext: STRUCT<city: STRING, state: STRING, country: STRING, postalCode: STRING, geolocation: STRUCT<lat: DOUBLE, lon: DOUBLE>>>

debugContext

STRUCT<debugData: MAP<STRING, STRING>>

outcome

STRUCT<result: STRING, reason: STRING>

device

STRUCT<id: STRING, name: STRING, os_platform: STRING, os_version: STRING, managed: BOOLEAN, registered: BOOLEAN, device_integrator: STRING, disk_encryption_type: STRING, screen_lock_type: STRING, jailbreak: BOOLEAN, secure_hardware_present: BOOLEAN>

transaction

STRUCT<type: STRING, id: STRING, detail: MAP<STRING, STRING>>

request

STRUCT<ipChain: ARRAY<STRUCT<ip: STRING, geographicalContext: STRUCT<city: STRING, state: STRING, country: STRING, postalCode: STRING, geolocation: STRUCT<lat: DOUBLE, lon: DOUBLE>>, version: STRING, source: STRING, ipDetails: STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, ipServiceCategories: ARRAY<STRUCT<isAnonymous: BOOLEAN, operator: STRING, type: STRING>>>>>>

target

ARRAY<STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>, changeDetails: STRUCT<from: STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>>, to: STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>>>>>

securityContext

STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, isProxy: BOOLEAN, ipDetails: STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, ipServiceCategories: ARRAY<STRUCT<isAnonymous: BOOLEAN, operator: STRING, type: STRING>>>, risk: STRUCT<detectionName: STRING, issuer: STRING, level: STRING, previousLevel: STRING, reasons: ARRAY<STRING>>, UserBehaviours: ARRAY<STRUCT<id: STRING, name: STRING, result: STRING>>>

Coluna

Tipo de dados

lw_id

STRING

time

TIMESTAMP

uuid

STRING

published

TIMESTAMP

eventType

STRING

version

STRING

severity

STRING

legacyEventType

STRING

displayMessage

STRING

actor

STRUCT<id: STRING, displayName: STRING, type: STRING, alternateId: STRING, detailEntry: MAP<STRING, STRING>>

authenticationContext

STRUCT<authenticationProvider: STRING, authenticationStep: INT, credentialProvider: STRING, credentialType: STRING, interface: STRING, externalSessionId: STRING, issuer: STRUCT<id: STRING, type: STRING>>

client

STRUCT<id: STRING, ipAddress: STRING, userAgent: STRUCT<rawUserAgent: STRING, os: STRING, browser: STRING>, zone: STRING, device: STRING, geographicalContext: STRUCT<city: STRING, state: STRING, country: STRING, postalCode: STRING, geolocation: STRUCT<lat: DOUBLE, lon: DOUBLE>>>

debugContext

STRUCT<debugData: MAP<STRING, STRING>>

outcome

STRUCT<result: STRING, reason: STRING>

device

STRUCT<id: STRING, name: STRING, os_platform: STRING, os_version: STRING, managed: BOOLEAN, registered: BOOLEAN, device_integrator: STRING, disk_encryption_type: STRING, screen_lock_type: STRING, jailbreak: BOOLEAN, secure_hardware_present: BOOLEAN>

transaction

STRUCT<type: STRING, id: STRING, detail: MAP<STRING, STRING>>

request

STRUCT<ipChain: ARRAY<STRUCT<ip: STRING, geographicalContext: STRUCT<city: STRING, state: STRING, country: STRING, postalCode: STRING, geolocation: STRUCT<lat: DOUBLE, lon: DOUBLE>>, version: STRING, source: STRING, ipDetails: STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, ipServiceCategories: ARRAY<STRUCT<isAnonymous: BOOLEAN, operator: STRING, type: STRING>>>>>>

target

ARRAY<STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>, changeDetails: STRUCT<from: STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>>, to: STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>>>>>

securityContext

STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, isProxy: BOOLEAN, ipDetails: STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, ipServiceCategories: ARRAY<STRUCT<isAnonymous: BOOLEAN, operator: STRING, type: STRING>>>, risk: STRUCT<detectionName: STRING, issuer: STRING, level: STRING, previousLevel: STRING, reasons: ARRAY<STRING>>, UserBehaviours: ARRAY<STRUCT<id: STRING, name: STRING, result: STRING>>>

Observáveis do analisador​

O analisador okta_system_log grava objetos aninhados como VARIANT e extrai os seguintes campos para lw_observables.

Observáveis

campo

Observável

actor.id

actor_id

actor.alternateId

email

actor.alternateId

actor_id

actor.alternateId

username

client.ipAddress

ip

request.ipChain[].ip

ip

request.ipChain[].ipDetails.domain

domain

target[].id

actor_id

target[].alternateId

email

target[].alternateId

actor_id

target[].alternateId

username

securityContext.domain

domain

securityContext.ipDetails.domain

domain

campo

Observável

actor.id

actor_id

actor.alternateId

email

actor.alternateId

actor_id

actor.alternateId

username

client.ipAddress

ip

request.ipChain[].ip

ip

request.ipChain[].ipDetails.domain

domain

target[].id

actor_id

target[].alternateId

email

target[].alternateId

actor_id

target[].alternateId

username

securityContext.domain

domain

securityContext.ipDetails.domain

domain


Solução de problemas​

Recebo erros de limite de taxa ao ingerir dados.​

  1. No Painel de administração do Okta, vá para Segurança >> API .
  2. Na tab tokens, encontre o token da API que você usou para autenticar no Databricks.
  3. Clique no nome do tokens e, na seção Limites de taxa de tokens , clique em Editar e aumente o controle deslizante para mais de 50% do limite de taxa de cada API.