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 renomeação de campos, fusão de objetos aninhados, análise de datas e preenchimento de campos da 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 permissões de Administrador de segurança ou 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 de administrador.
  2. Na barra de pesquisa, digite Criar usuário do sistema de integração e selecione a tarefa.
  3. Digite 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 atinja o tempo limite.
  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 de 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 ao 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 que você criou (por exemplo, ISG_SecOps_HCM) na lista Grupo de segurança de origem.
  3. Clique em OK.
  4. Acesse Permissões de política de segurança de domínio.
  5. Adicione acesso GET para cada um dos seguintes domínios:

    Endpoint da API Políticas de segurança de domínio obrigatórias
    /workers: lista de trabalhadores, perfis e equipe atual Worker Data: Public Worker Reports, Worker Data: Current Staffing Information, Person Data: Work Contact Information
    /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: Current Staffing Information
    /supervisoryOrganizations: estrutura da organização Worker Data: Organization Information
  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 que você criou (por exemplo, ISU_SecOps_HCM).
    • Escopo: selecione os seguintes escopos:

      Escopo Necessário para
      Formação de equipes Endpoints /workers e /workers/{id}/history
      Dados de contato Campos de e-mail e telefone do trabalho retornados por /workers (usados para correlação de UDM)
      Folgas e afastamentos Endpoint /workers/{id}/timeOffEntries
      Organizações e papéis Endpoint /supervisoryOrganizations
      Locatário não configurável Qualquer cliente de API OAuth 2.0 (integração no nível do sistema e rotação de tokens)
  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 de API que você criou e clique em OK.
  5. Copie e salve o Refresh Token.

Receber URLs de endpoint de API

  1. Na barra de pesquisa, digite Ver clientes da API e selecione essa opção.
  2. Em Clientes de API para integrações, localize o cliente que você criou (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 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 principais. 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 abaixo.

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

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 deste feed.
  1. Clique em Próxima.
  2. Revise a nova configuração do feed na tela Finalizar e clique em Enviar.

Solução de problemas

403 Proibido em endpoints específicos

Se o feed informar 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á as permissões necessárias.

Endpoint com falha Corrigir
/workers/{id}/timeOffEntries Adicione 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 Folgas e afastamentos ao cliente da API.
/workers/{id}/history Adicione o acesso GET para o domínio Worker Data: Historical Staffing Information. Verifique se o escopo Pessoal 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 papéis ao cliente da API.

Depois de fazer mudanças nas permissões:

  1. Execute Ativar mudanças pendentes na política de segurança no Workday.
  2. Se você adicionou novos escopos ao cliente de API, gere um novo token de atualização em Gerenciar tokens de atualização para integrações e crie 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 de UDM

Campo de registro Mapeamento de UDM Lógica
entity_host_name entity.asset.hostname Mapeado diretamente
location.descriptor entity.location.city Mapeado diretamente
AU_EFFECTIVE_DATE entity.resource.attribute.labels.value Mapeado diretamente
COMPANY_EFFECTIVE_DATE entity.resource.attribute.labels.value Mapeado diretamente
ORIG_HIRE_DT entity.resource.attribute.labels.value Mapeado diretamente
STATUS_EFFECTIVE_DATE entity.resource.attribute.labels.value Mapeado diretamente
href entity.url Mapeado diretamente
CONT_START_DTE entity.user.attribute.labels.value Mapeado diretamente
EMPL_TYPE entity.user.attribute.labels.value Mapeado diretamente
EXEC_CD entity.user.attribute.labels.value Mapeado diretamente
EXEC_DESCR entity.user.attribute.labels.value Mapeado diretamente
HR_Status entity.user.attribute.labels.value Mapeado diretamente
Is_Active entity.user.attribute.labels.value Mapeado diretamente
Is_Manager entity.user.attribute.labels.value Mapeado diretamente
JOB_CODE entity.user.attribute.labels.value Mapeado diretamente
ORG_CD entity.user.attribute.labels.value Mapeado diretamente
ORG_Container entity.user.attribute.labels.value Mapeado diretamente
ORG_Container_Name entity.user.attribute.labels.value Mapeado diretamente
PER_Status entity.user.attribute.labels.value Mapeado diretamente
POSITION_NBR entity.user.attribute.labels.value Mapeado diretamente
PS_ELID entity.user.attribute.labels.value Mapeado diretamente
REG_TEMP entity.user.attribute.labels.value Mapeado diretamente
WB_LOGON_ID entity.user.attribute.labels.value Mapeado diretamente
ORG_DESCR entity.user.department Mesclado
primarySupervisoryOrganization.descriptor entity.user.department Mesclado
Email entity.user.email_addresses Mesclado
Work_Email entity.user.email_addresses Mesclado
primaryWorkEmail entity.user.email_addresses Mesclado
EMPLID entity.user.employee_id Mapeado diretamente
Employee_ID entity.user.employee_id Mapeado diretamente
First_Name entity.user.first_name Mapeado diretamente
Legal_Name_First_Name entity.user.first_name Mapeado diretamente
HIRE_DATE entity.user.hire_date Analisado como RFC 3339
Hire_Date entity.user.hire_date Analisado como RFC 3339
Last_Name entity.user.last_name Mapeado diretamente
Legal_Name_Last_Name entity.user.last_name Mapeado diretamente
gopher-supervisor.primaryWorkEmail entity.user.managers.email_addresses Mesclado
Reports_To_EMPLID entity.user.managers.employee_id Mapeado diretamente
gopher-supervisor.id entity.user.managers.product_object_id Renomeado/mapeado
Reports_To_Name entity.user.managers.user_display_name Mapeado diretamente
gopher-supervisor.descriptor entity.user.managers.user_display_name Renomeado/mapeado
primaryWorkPhone entity.user.phone_numbers Mesclado
Termination_Date entity.user.termination_date Analisado como RFC 3339
timeoff.descriptor entity.user.time_off.description Mapeado diretamente
timeoff.date entity.user.time_off.interval.start_time Analisado como RFC 3339
HR_JOB_TITLE entity.user.title Mapeado diretamente
Job_Profile entity.user.title Mapeado diretamente
businessTitle entity.user.title Mapeado diretamente
Full_Name entity.user.user_display_name Mapeado diretamente
descriptor entity.user.user_display_name Mapeado diretamente
udm_metadata metadata Renomeado/mapeado
metadata_entity_type metadata.entity_type Mapeado diretamente
actual_completed_date_and_time metadata.event_timestamp Analisado como MM/dd/yyyy HH:mm:ss a
body.time metadata.event_timestamp Analisado como UNIX_MS
requestTime metadata.event_timestamp Analisado como RFC 3339
timestamp metadata.event_timestamp Analisado como RFC 3339
EMPLID metadata.product_entity_id Mapeado diretamente
Employee_ID metadata.product_entity_id Mapeado diretamente
id metadata.product_entity_id Mapeado diretamente
Source_Name metadata.product_name Mapeado diretamente
userAgent network.http.parsed_user_agent Renomeado/mapeado
userAgent network.http.user_agent Mapeado diretamente
sessionId network.session_id Mapeado diretamente
ipAddress principal.ip Mesclado
taskId principal.process.pid Mapeado diretamente
activityAction_label principal.resource.attribute.labels Mesclado
body.event.Submitted_By principal.user.userid Mapeado diretamente
body.event.Response_Message security_result.action_details Mapeado diretamente
body.event.Messages security_result.description Mapeado diretamente
actual_start_date_and_time_label security_result.detection_fields Mesclado
background_process_is_running_label security_result.detection_fields Mesclado
by_person_label security_result.detection_fields Mesclado
created_from_trigger_label security_result.detection_fields Mesclado
items_processed_label security_result.detection_fields Mesclado
percent_complete_label security_result.detection_fields Mesclado
processing_time_label security_result.detection_fields Mesclado
scheduled_start_date_and_time_label security_result.detection_fields Mesclado
sent_on_label security_result.detection_fields Mesclado
total_duration_label security_result.detection_fields Mesclado
body.event.Integration_Event_Status security_result.summary Mapeado diretamente
body.event.Integration_System target.application Mapeado diretamente
target_data.id target.resource.product_object_id Mapeado diretamente
deviceType target.resource.resource_subtype Mapeado diretamente
deviceType target.resource.type Mapeado: (?i)(Desktop/Laptop/Mobile)DEVICE
user_display_name target.user.user_display_name Mapeado diretamente
systemAccount target.user.userid Mapeado diretamente
N/A entity.resource.attribute.labels.key Constante: COMPANY_EFFECTIVE_DATE
N/A entity.user.attribute.labels.key Constante: ORG_Container
N/A metadata.product_name Constante: HCM
N/A metadata.vendor_name Constante: Workday
N/A target.resource.type Constante: DEVICE

Registro de alterações

Ver o registro de alterações deste analisador

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