Coletar registros do Workday HCM

Compatível com:

Este documento explica como ingerir registros do Workday HCM no Google Security Operations configurando um feed usando a API de terceiros.

O analisador extrai dados do usuário do Workday HCM de registros formatados em JSON. Ele processa várias transformações de dados, incluindo a renomeação de campos, a mesclagem de objetos aninhados, a análise de datas e o preenchimento de campos UDM para atributos do usuário, detalhes de emprego e estrutura organizacional.

Antes de começar

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

  • Uma instância do Google SecOps
  • Acesso privilegiado ao Workday com administrador de segurança ou permissões equivalentes

Configurar a autenticação da API do Workday

Criar um usuário do sistema de integração (ISU)

  1. Faça login no Workday com privilégios administrativos.
  2. Na barra de pesquisa, digite Criar usuário do sistema de integração e selecione a tarefa.
  3. Insira um nome de usuário (por exemplo, ISU_SecOps_HCM).
  4. Defina uma senha.
  5. Defina Minutos de tempo limite da sessão como 0 para evitar que o ISU expire.
  6. Ative a opção Não permitir sessões de interface para aumentar a segurança restringindo os logins da UI.
  7. Acesse a tarefa Manter regras de senha.
  8. Adicione o usuário do sistema de integração ao campo Usuários do sistema isentos da expiração de senha.

Criar um grupo de segurança de integração

  1. Na barra de pesquisa, digite Criar grupo de segurança e selecione a tarefa.
  2. Localize o campo Tipo de grupo de segurança locatário e selecione Grupo de segurança do sistema de integração (sem restrições).
  3. Forneça um nome para o grupo de segurança (por exemplo, ISG_SecOps_HCM).
  4. Clique em OK.
  5. Clique em Editar para o grupo de segurança recém-criado.
  6. Atribua o usuário do sistema de integração da etapa anterior ao grupo de segurança.
  7. Clique em Concluído.

Conceder acesso ao domínio para o grupo de segurança

O feed do Google SecOps recupera dados de quatro endpoints da API REST do Workday. Cada endpoint exige que permissões específicas da política de segurança de domínio sejam concedidas ao grupo de segurança de integração.

  1. Na barra de pesquisa, digite Manter permissões para grupo de segurança e selecione a tarefa.
  2. Escolha o grupo de segurança criado (por exemplo, ISG_SecOps_HCM) na lista Grupo de segurança de origem.
  3. Clique em OK.
  4. Acesse Permissões da política de segurança de domínio.
  5. Adicione o acesso GET para cada um dos seguintes domínios:

    Endpoint da API Políticas de segurança de domínio necessárias
    /workers — lista e perfis de workers Worker Data: Public Worker Reports
    /workers/{id}/timeOffEntries — saldos de folga Worker Data: Time Off (Time Off Balances), Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history — histórico de pessoal do worker Worker Data: Historical Staffing Information
    /supervisoryOrganizations — estrutura da organização Manage: Supervisory Organization ou View: Supervisory Organization
  6. Clique em OK.

  7. Clique em Concluído para salvar as mudanças.

Ativar mudanças na política de segurança

  1. Na barra de pesquisa, digite Ativar mudanças pendentes na política de segurança e selecione a tarefa.
  2. Insira um motivo para a mudança no campo de comentário (por exemplo, Granting API access for Google SecOps HCM integration).
  3. Clique em OK.
  4. Selecione Confirmar e clique em OK.

Registrar o cliente da API para integrações

  1. Na barra de pesquisa, digite Registrar cliente da API para integrações e selecione essa opção.
  2. Clique em Criar.
  3. Informe os seguintes detalhes de configuração:

    • Nome do cliente: insira um nome (por exemplo, Google SecOps HCM Client).
    • Usuário do sistema: selecione o usuário do sistema de integração criado (por exemplo, ISU_SecOps_HCM).
    • Escopo: selecione os seguintes escopos:

      Escopo Necessário para
      Formação de equipes Endpoints /workers e /workers/{id}/history
      Folga e licença Endpoint /workers/{id}/timeOffEntries
      Organizações e funções Endpoint /supervisoryOrganizations
  4. Clique em Salvar.

  5. Clique em OK.

  6. Copie e salve o ID do cliente e a chave secreta do cliente imediatamente.

Gerar token de atualização do OAuth 2.0

  1. Na barra de pesquisa, digite Gerenciar tokens de atualização para integrações e selecione essa opção.
  2. Clique em Gerar novo token de atualização.
  3. No campo Conta do Workday, pesquise e selecione o usuário do sistema de integração (por exemplo, ISU_SecOps_HCM).
  4. Selecione o cliente da API criado e clique em OK.
  5. Copie e salve o token de atualização.

Receber URLs de endpoint de API

  1. Na barra de pesquisa, digite Ver clientes da API e selecione essa opção.
  2. Em Clientes da API para integrações, localize o cliente criado (por exemplo, Google SecOps HCM Client).
  3. Copie e salve os seguintes detalhes:

    • Endpoint de token: o URL para receber um token de acesso (por exemplo, https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token).
    • Endpoint da API REST do Workday: o URL de base para chamadas de API (por exemplo, https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT).

Gerar token de acesso do OAuth

  • Use curl ou um cliente HTTP semelhante para enviar uma solicitação POST ao endpoint de token:

    curl -X POST "https://HOSTNAME/ccx/oauth2/TENANT/token" \
      -d "grant_type=refresh_token" \
      -d "client_id=YOUR_CLIENT_ID" \
      -d "client_secret=YOUR_CLIENT_SECRET" \
      -d "refresh_token=YOUR_REFRESH_TOKEN"
    

Isso retorna um token de acesso (por exemplo, "access_token": "abcd1234"). Copie e salve o token de acesso.

Verificar o acesso à API

  • Antes de configurar o feed, verifique se o ISU tem as permissões necessárias para os endpoints de chave. Substitua as variáveis pelos seus valores reais:

    TOKEN="your-access-token"
    HOST="your-workday-host"
    TENANT="your-tenant"
    
    # Test 1: Workers (should return worker list)
    curl -s -o /dev/null -w "%{http_code}" \
      -H "Authorization: Bearer $TOKEN" \
      "https://$HOST/ccx/api/v1/$TENANT/workers?limit=1"
    
    # Test 2: Time off entries (replace WORKER_ID with an ID from Test 1)
    curl -s -o /dev/null -w "%{http_code}" \
      -H "Authorization: Bearer $TOKEN" \
      "https://$HOST/ccx/api/v1/$TENANT/workers/WORKER_ID/timeOffEntries"
    
    # Test 3: Worker history (replace WORKER_ID with an ID from Test 1)
    curl -s -o /dev/null -w "%{http_code}" \
      -H "Authorization: Bearer $TOKEN" \
      "https://$HOST/ccx/api/v1/$TENANT/workers/WORKER_ID/history"
    
    # Test 4: Supervisory organizations
    curl -s -o /dev/null -w "%{http_code}" \
      -H "Authorization: Bearer $TOKEN" \
      "https://$HOST/ccx/api/v1/$TENANT/supervisoryOrganizations"
    

Cada teste precisa retornar o status HTTP 200. Se algum endpoint retornar 403, consulte a seção Solução de problemas.

Configurar um feed no Google SecOps para ingerir dados do Workday HCM

Configurar o feed

  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, Workday HCM).
  5. Selecione API de terceiros como o Tipo de origem.
  6. Selecione Workday como o Tipo de registro.
  7. Clique em Próxima.

Configurar parâmetros de feed

  1. Especifique valores para os seguintes parâmetros de entrada:

    • Nome do host da API: o nome de domínio totalmente qualificado do endpoint de API REST do Workday (por exemplo, wd2-impl-services1.workday.com).

    • Locatário: o último elemento do caminho do endpoint de API REST do Workday que identifica sua instância do Workday.

    • Token de acesso: o token de acesso do OAuth gerado na seção anterior.

    Opções avançadas:

    • Namespace do recurso: o namespace do recurso.
    • Rótulos de ingestão: o rótulo a ser aplicado aos eventos desse feed.
  2. Clique em Próxima.

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

Solução de problemas

403 Proibido em endpoints específicos

Se o feed relatar erros ou os comandos curl de verificação retornarem 403 para endpoints específicos, o usuário do sistema de integração não terá permissões.

Endpoint com falha Corrigir
/workers/{id}/timeOffEntries Adicione o acesso GET para os domínios Worker Data: Time Off (Time Off Balances) e Worker Data: Time Off (Time Off Balances Manager View). Adicione o escopo Folga e licença ao cliente da API.
/workers/{id}/history Adicione o acesso GET para o domínio Worker Data: Historical Staffing Information. Verifique se o escopo Formação de equipes está atribuído ao cliente da API.
/supervisoryOrganizations Adicione o acesso GET para o domínio Manage: Supervisory Organization ou View: Supervisory Organization. Adicione o escopo Organizações e funções ao cliente da API.

Depois de fazer mudanças de permissão:

  1. Execute Ativar mudanças pendentes na política de segurança no Workday.
  2. Se você adicionou novos escopos ao cliente da API, gere um novo token de atualização em Gerenciar tokens de atualização para integrações e gere um novo token de acesso.
  3. Atualize a configuração do feed com o novo token de acesso, se ele tiver sido alterado.

Erros de autenticação

  • 401 Não autorizado: o token de acesso expirou. Gere um novo token usando o token de atualização e atualize o feed.
  • Cliente inválido: verifique se o ID e a chave secreta do cliente estão corretos.
  • Token de atualização inválido: o token de atualização pode ter sido revogado. Gere um novo em Gerenciar tokens de atualização para integrações.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
@timestamp metadata.event_timestamp.seconds Analisado como um carimbo de data/hora em segundos desde o período
businessTitle entity.entity.user.title Mapeado diretamente
descriptor entity.entity.user.user_display_name Mapeado diretamente
Employee_ID entity.entity.user.employee_id Mapeado diretamente
Employee_ID entity.metadata.product_entity_id Mapeado quando id não está presente
gopher-supervisor.descriptor entity.entity.user.managers.user_display_name Mapeado diretamente
gopher-supervisor.id entity.entity.user.managers.product_object_id Mapeado diretamente
gopher-supervisor.primaryWorkEmail entity.entity.user.managers.email_addresses Mapeado diretamente
gopher-time-off.date entity.entity.user.time_off.interval.start_time Analisado como uma data
gopher-time-off.descriptor entity.entity.user.time_off.description Mapeado diretamente
Hire_Date entity.entity.user.hire_date Analisado como uma data
id entity.metadata.product_entity_id Mapeado diretamente quando presente
Job_Profile entity.entity.user.title Mapeado quando businessTitle não está presente
Legal_Name_First_Name entity.entity.user.first_name Mapeado diretamente
Legal_Name_Last_Name entity.entity.user.last_name Mapeado diretamente
location.descriptor entity.entity.location.city Mapeado diretamente
primarySupervisoryOrganization.descriptor entity.entity.user.department Mapeado diretamente
primaryWorkEmail entity.entity.user.email_addresses Mapeado diretamente
primaryWorkPhone entity.entity.user.phone_numbers Mapeado diretamente
Termination_Date entity.entity.user.termination_date Analisado como uma data
Work_Email entity.entity.user.email_addresses Mapeado quando primaryWorkEmail não está presente
collection_time metadata.event_timestamp.collected_timestamp Mapeado diretamente

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