Coletar registros do Workday HCM
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)
- Faça login no Workday com privilégios administrativos.
- Na barra de pesquisa, digite Criar usuário do sistema de integração e selecione a tarefa.
- Insira um nome de usuário (por exemplo,
ISU_SecOps_HCM). - Defina uma senha.
- Defina Minutos de tempo limite da sessão como
0para evitar que o ISU expire. - Ative a opção Não permitir sessões de interface para aumentar a segurança restringindo os logins da UI.
- Acesse a tarefa Manter regras de senha.
- 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
- Na barra de pesquisa, digite Criar grupo de segurança e selecione a tarefa.
- 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).
- Forneça um nome para o grupo de segurança (por exemplo,
ISG_SecOps_HCM). - Clique em OK.
- Clique em Editar para o grupo de segurança recém-criado.
- Atribua o usuário do sistema de integração da etapa anterior ao grupo de segurança.
- 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.
- Na barra de pesquisa, digite Manter permissões para grupo de segurança e selecione a tarefa.
- Escolha o grupo de segurança criado (por exemplo,
ISG_SecOps_HCM) na lista Grupo de segurança de origem. - Clique em OK.
- Acesse Permissões da política de segurança de domínio.
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 workersWorker Data: Public Worker Reports/workers/{id}/timeOffEntries— saldos de folgaWorker Data: Time Off (Time Off Balances),Worker Data: Time Off (Time Off Balances Manager View)/workers/{id}/history— histórico de pessoal do workerWorker Data: Historical Staffing Information/supervisoryOrganizations— estrutura da organizaçãoManage: Supervisory OrganizationouView: Supervisory OrganizationClique em OK.
Clique em Concluído para salvar as mudanças.
Ativar mudanças na política de segurança
- Na barra de pesquisa, digite Ativar mudanças pendentes na política de segurança e selecione a tarefa.
- Insira um motivo para a mudança no campo de comentário (por exemplo,
Granting API access for Google SecOps HCM integration). - Clique em OK.
- Selecione Confirmar e clique em OK.
Registrar o cliente da API para integrações
- Na barra de pesquisa, digite Registrar cliente da API para integrações e selecione essa opção.
- Clique em Criar.
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 /workerse/workers/{id}/historyFolga e licença Endpoint /workers/{id}/timeOffEntriesOrganizações e funções Endpoint /supervisoryOrganizations
- Nome do cliente: insira um nome (por exemplo,
Clique em Salvar.
Clique em OK.
Copie e salve o ID do cliente e a chave secreta do cliente imediatamente.
Gerar token de atualização do OAuth 2.0
- Na barra de pesquisa, digite Gerenciar tokens de atualização para integrações e selecione essa opção.
- Clique em Gerar novo token de atualização.
- No campo Conta do Workday, pesquise e selecione o usuário do sistema de integração (por exemplo,
ISU_SecOps_HCM). - Selecione o cliente da API criado e clique em OK.
- Copie e salve o token de atualização.
Receber URLs de endpoint de API
- Na barra de pesquisa, digite Ver clientes da API e selecione essa opção.
- Em Clientes da API para integrações, localize o cliente criado (por exemplo,
Google SecOps HCM Client). 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).
- Endpoint de token: o URL para receber um token de acesso (por exemplo,
Gerar token de acesso do OAuth
Use
curlou 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
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed (por exemplo,
Workday HCM). - Selecione API de terceiros como o Tipo de origem.
- Selecione Workday como o Tipo de registro.
- 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 desse feed.
Clique em Próxima.
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:
- Execute Ativar mudanças pendentes na política de segurança no Workday.
- 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.
- 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.