Coletar registros de contexto do usuário do Okta

Compatível com:

Este documento explica como coletar registros de contexto do usuário do Okta configurando um feed do Google Security Operations usando a API de terceiros.

Antes de começar

Verifique se você atende os seguintes pré-requisitos:

  • Uma instância do Google SecOps
  • Acesso privilegiado ao locatário do Okta ou ao Admin Console
  • Privilégios de criação de token de API no Okta

Configurar a lista de permissões de IP

Antes de criar o feed, adicione os intervalos de IP do Google SecOps à lista de permissões nas configurações de firewall ou rede do Okta.

Receber intervalos de IP do Google SecOps

Adicionar intervalos de IP ao contexto do usuário do Okta

  1. Faça login no Admin Console do Okta.
  2. Acesse Segurança > Redes.
  3. Em Restrições de endereço IP, clique em Editar.
  4. Adicione cada intervalo de IP da SecOps do Google na notação CIDR aos endereços IP confiáveis.
  5. Clique em Salvar.

Configurar o acesso à API de contexto do usuário do Okta

Para permitir que o Google SecOps extraia dados de contexto do usuário, crie um token de API com permissões de leitura.

Criar token de API

  1. Faça login no Admin Console do Okta.
  2. Acesse Segurança > API.
  3. Selecione a guia Tokens.
  4. Clique em Criar token.
  5. Informe os seguintes detalhes de configuração:
    • Nome: insira um nome descritivo, por exemplo, Google SecOps Integration.
    • Descrição (opcional): insira uma descrição.
  6. Clique em Criar token.

Registrar credenciais de API

Depois de criar o token de API, você vai receber a seguinte credencial:

  • Token da API: o valor do seu token da API (por exemplo, 00QCGr-1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1)

Permissões de API necessárias

O token da API requer as seguintes permissões no Okta:

Permissão/papel Nível de acesso Finalidade
Administrador somente leitura Ler Acessar dados do perfil do usuário
Superadministrador Ler Acesso completo a todos os dados do usuário

Configurar feeds

Para configurar um feed, siga estas etapas:

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed (por exemplo, Okta User Context).
  5. Selecione API de terceiros como o Tipo de origem.
  6. Selecione Contexto do usuário do Okta como o Tipo de registro.
  7. Clique em Próxima.
  8. Especifique valores para os seguintes parâmetros de entrada:

    • Cabeçalho HTTP de autenticação: insira as credenciais de autenticação no seguinte formato:

      Authorization:SSWS your-api-token
      
      • Por exemplo: Authorization:SSWS 00QCGr-1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1
    • Nome do host da API: o nome de domínio totalmente qualificado da sua instância do Okta (por exemplo, example.okta.com, não um domínio personalizado que possa estar configurado).

      • Por exemplo: company.okta.com
    • Campo de referência do ID do gerente: ID obrigatório quando você usa um ID que não é do Okta para referenciar gerentes (opcional).

    • Namespace do recurso: o namespace do recurso.

    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos deste feed.

  9. Clique em Próxima.

  10. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Após a configuração, o feed começa a recuperar registros da instância de contexto do usuário do Okta em ordem cronológica.

Endpoints regionais

O Okta usa diferentes endpoints de API com base na região da sua organização:

Região URL de base / nome do host
EUA (padrão) {org-name}.okta.com
UE (EMEA) {org-name}.okta-emea.com
APAC (Ásia-Pacífico) {org-name}.okta.com.au
Pré-lançamento (teste) {org-name}.oktapreview.com

Use o nome do host que corresponde à região da sua instância do Okta.

Limites de taxa de API

A API Okta tem os seguintes limites de taxa:

  • Limite de taxa padrão: 600 solicitações por minuto para a maioria dos endpoints
  • API System Log: 60 solicitações por minuto
  • Endpoints de usuário: 600 solicitações por minuto

O Google SecOps processa automaticamente a limitação de taxa com espera exponencial. Se você tiver problemas, entre em contato com o suporte da Okta para aumentar os limites da API.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
activated event.idm.entity.entity.labels Se activated existir, o valor dele será adicionado como um par de chave-valor com a chave "activated".
created event.idm.entity.entity.labels Se created existir, o valor dele será adicionado como um par de chave-valor com a chave "created".
profile.costCenter event.idm.entity.entity.labels Se profile.costCenter existir, o valor dele será adicionado como um par de chave-valor com a chave "costCenter".
profile.Function event.idm.entity.entity.labels Se profile.Function existir, o valor dele será adicionado como um par de chave-valor com a chave "Function".
statusChanged event.idm.entity.entity.labels Se statusChanged existir, o valor dele será adicionado como um par de chave-valor com a chave "statusChanged".
type.id event.idm.entity.entity.labels Se type.id existir, o valor dele será adicionado como um par de chave-valor com a chave "type_id".
profile.location event.idm.entity.entity.location.name Valor extraído de profile.location.
profile.AD_ObjectGUID event.idm.entity.entity.user.attribute.labels Se profile.AD_ObjectGUID existir, o valor dele será adicionado como um par de chave-valor com a chave "AD_ObjectGUID".
profile.ADpwdLastSet event.idm.entity.entity.user.attribute.labels Se profile.ADpwdLastSet existir, o valor dele será adicionado como um par de chave-valor com a chave "ADpwdLastSet".
profile.AFF_Code event.idm.entity.entity.user.attribute.labels Se profile.AFF_Code existir, o valor dele será adicionado como um par de chave-valor com a chave "AFF_Code".
profile.Desk_Location_WD event.idm.entity.entity.user.attribute.labels Se profile.Desk_Location_WD existir, o valor dele será adicionado como um par de chave-valor com a chave "Desk_Location_WD".
profile.Mailing_Address_WD event.idm.entity.entity.user.attribute.labels Se profile.Mailing_Address_WD existir, o valor dele será adicionado como um par de chave-valor com a chave "Mailing_Address_WD".
profile.Manager_UPN event.idm.entity.entity.user.attribute.labels Se profile.Manager_UPN existir, o valor dele será adicionado como um par de chave-valor com a chave "Manager_UPN".
profile.PRIVATE_CONF_Profile event.idm.entity.entity.user.attribute.labels Se profile.PRIVATE_CONF_Profile existir, o valor dele será adicionado como um par de chave-valor com a chave "PRIVATE_CONF_Profile".
profile.Region_WD event.idm.entity.entity.user.attribute.labels Se profile.Region_WD existir, o valor dele será adicionado como um par de chave-valor com a chave "Region_WD".
profile.Subsidiary_Company event.idm.entity.entity.user.attribute.labels Se profile.Subsidiary_Company existir, o valor dele será adicionado como um par de chave-valor com a chave "Subsidiary_Company".
profile.Telephone_Work event.idm.entity.entity.user.attribute.labels Se profile.Telephone_Work existir, o valor dele será adicionado como um par de chave-valor com a chave "Telephone_Work".
profile.Temp_WD_Primary_Email event.idm.entity.entity.user.attribute.labels Se profile.Temp_WD_Primary_Email existir, o valor dele será adicionado como um par de chave-valor com a chave "Temp_WD_Primary_Email".
profile.VMware_WS1_Username event.idm.entity.entity.user.attribute.labels Se profile.VMware_WS1_Username existir, o valor dele será adicionado como um par de chave-valor com a chave "VMware_WS1_Username".
profile.Work_Street_Address_WD event.idm.entity.entity.user.attribute.labels Se profile.Work_Street_Address_WD existir, o valor dele será adicionado como um par de chave-valor com a chave "Work_Street_Address_WD".
profile.Workato_WD_Primary_Email event.idm.entity.entity.user.attribute.labels Se profile.Workato_WD_Primary_Email existir, o valor dele será adicionado como um par de chave-valor com a chave "Workato_WD_Primary_Email".
profile.Workday_ID event.idm.entity.entity.user.attribute.labels Se profile.Workday_ID existir, o valor dele será adicionado como um par de chave-valor com a chave "Workday_ID".
profile.Worker_Type_WD event.idm.entity.entity.user.attribute.labels Se profile.Worker_Type_WD existir, o valor dele será adicionado como um par de chave-valor com a chave "Worker_Type_WD".
profile.businessUnit event.idm.entity.entity.user.attribute.labels Se profile.businessUnit existir, o valor dele será adicionado como um par de chave-valor com a chave "businessUnit".
profile.companyName event.idm.entity.entity.user.attribute.labels Se profile.companyName existir, o valor dele será adicionado como um par de chave-valor com a chave "companyName".
profile.contingentSupplierName event.idm.entity.entity.user.attribute.labels Se profile.contingentSupplierName existir, o valor dele será adicionado como um par de chave-valor com a chave "contingentSupplierName".
profile.conversationId event.idm.entity.entity.user.attribute.labels Se profile.conversationId existir, o valor dele será adicionado como um par de chave-valor com a chave "conversationId".
profile.distinguishedName event.idm.entity.entity.user.attribute.labels Se profile.distinguishedName existir, o valor dele será adicionado como um par de chave-valor com a chave "distinguishedName".
profile.division event.idm.entity.entity.user.attribute.labels Se profile.division existir, o valor dele será adicionado como um par de chave-valor com a chave "division".
profile.emailPrefix event.idm.entity.entity.user.attribute.labels Se profile.emailPrefix existir, o valor dele será adicionado como um par de chave-valor com a chave "emailPrefix".
profile.employeeType event.idm.entity.entity.user.attribute.labels Se profile.employeeType existir, o valor dele será adicionado como um par de chave-valor com a chave "employeeType".
profile.homePostalAddress event.idm.entity.entity.user.attribute.labels Se profile.homePostalAddress existir, o valor dele será adicionado como um par de chave-valor com a chave "homePostalAddress".
profile.isManager event.idm.entity.entity.user.attribute.labels Se profile.isManager existir, o valor dele será adicionado como um par de chave-valor com a chave "isManager".
lastLogin event.idm.entity.entity.user.attribute.labels Se lastLogin existir, o valor dele será adicionado como um par de chave-valor com a chave "lastLogin".
profile.leaveOfAbsence event.idm.entity.entity.user.attribute.labels Se profile.leaveOfAbsence existir, o valor dele será adicionado como um par de chave-valor com a chave "leaveOfAbsence".
profile.managerDn event.idm.entity.entity.user.attribute.labels Se profile.managerDn existir, o valor dele será adicionado como um par de chave-valor com a chave "managerDn".
profile.payGroup event.idm.entity.entity.user.attribute.labels Se profile.payGroup existir, o valor dele será adicionado como um par de chave-valor com a chave "payGroup".
profile.wdemployeeID event.idm.entity.entity.user.attribute.labels Se profile.wdemployeeID existir, o valor dele será adicionado como um par de chave-valor com a chave "wdemployeeID".
profile.zipCode event.idm.entity.entity.user.attribute.labels Se profile.zipCode existir, o valor dele será adicionado como um par de chave-valor com a chave "zipCode".
profile.userType event.idm.entity.entity.user.attribute.roles Se profile.userType existir, o valor dele será adicionado a uma matriz de funções.
profile.organization, profile.company event.idm.entity.entity.user.company_name Valor extraído de profile.organization ou profile.company se o primeiro não estiver presente.
profile.department event.idm.entity.entity.user.department Valor extraído de profile.department.
profile.email, profile.secondEmail, profile.login event.idm.entity.entity.user.email_addresses Os valores de profile.email, profile.secondEmail e profile.login (se for um e-mail e não um duplicado) são mesclados nesse campo.
profile.employeeNumber event.idm.entity.entity.user.employee_id Valor extraído de profile.employeeNumber.
profile.firstName, profile.Preferred_First_Name event.idm.entity.entity.user.first_name Valor extraído de profile.firstName ou profile.Preferred_First_Name se o primeiro não estiver presente.
profile.EmployeeWorkGroup event.idm.entity.entity.user.group_identifiers Valor extraído de profile.EmployeeWorkGroup.
profile.HireDate, profile.hiredate event.idm.entity.entity.user.hire_date O valor é analisado de profile.HireDate ou profile.hiredate se o primeiro não estiver presente.
profile.lastName, profile.preferred_Last_Name event.idm.entity.entity.user.last_name Valor extraído de profile.lastName se profile.lastName ou profile.preferred_Last_Name existir.
lastLogin event.idm.entity.entity.user.last_login_time O valor é analisado de lastLogin.
passwordChanged event.idm.entity.entity.user.last_password_change_time O valor é analisado de passwordChanged.
profile.manager, profile.managerEmail, profile.managerId event.idm.entity.entity.user.managers Preenchido com um objeto que contém user_display_name de profile.manager, email_addresses de profile.managerEmail e employee_id de profile.managerId.
profile.city, profile.firstBaseCity event.idm.entity.entity.user.office_address.city Valor extraído de profile.city ou profile.firstBaseCity se o primeiro não estiver presente.
profile.countryCode, profile.country event.idm.entity.entity.user.office_address.country_or_region Valor extraído de profile.countryCode ou profile.country se o primeiro não estiver presente.
profile.streetAddress event.idm.entity.entity.user.personal_address.name Valor extraído de profile.streetAddress.
profile.state event.idm.entity.entity.user.personal_address.state Valor extraído de profile.state.
profile.primaryPhone, profile.mobilePhone, profile.mobile event.idm.entity.entity.user.phone_numbers Os valores de profile.primaryPhone, profile.mobilePhone e profile.mobile são mesclados nesse campo.
profile.terminationDate, profile.terminationdate event.idm.entity.entity.user.termination_date O valor é analisado de profile.terminationDate ou profile.terminationdate se o primeiro não estiver presente.
profile.title event.idm.entity.entity.user.title Valor extraído de profile.title.
status event.idm.entity.entity.user.user_authentication_status Mapeado de status: ACTIVE/RECOVERY/LOCKED_OUT/PASSWORD_EXPIRED -> ACTIVE; SUSPENDED -> SUSPENDED; DEPROVISIONED -> DELETED; caso contrário, UNKNOWN_AUTHENTICATION_STATUS.
profile.displayName event.idm.entity.entity.user.user_display_name Valor extraído de profile.displayName.
profile.samAccountName, profile.samaccountname, profile.login, profile.ldapUid event.idm.entity.entity.user.userid Preenchido com precedência: profile.samAccountName, profile.samaccountname, profile.login (se não for um e-mail), profile.ldapUid (se profile.login não for um e-mail).
event.idm.entity.metadata.entity_type Defina como USER.
id event.idm.entity.metadata.product_entity_id Valor extraído de id.
event.idm.entity.metadata.product_name Defina como Identity Cloud.
event.idm.entity.metadata.vendor_name Defina como Okta.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.