Workday HCM 로그 수집

다음에서 지원:

이 문서에서는 서드 파티 API를 사용하여 피드를 설정하여 Workday HCM 로그를 Google Security Operations로 수집하는 방법을 설명합니다.

파서는 JSON 형식 로그에서 Workday HCM 사용자 데이터를 추출합니다. 필드 이름 바꾸기, 중첩된 객체 병합, 날짜 파싱, 사용자 속성, 고용 세부정보, 조직 구조에 대한 UDM 필드 채우기를 비롯한 다양한 데이터 변환을 처리합니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • 보안 관리자 또는 이와 동등한 권한으로 Workday에 대한 권한 있는 액세스

Workday API 인증 구성

통합 시스템 사용자 (ISU) 만들기

  1. 관리자 권한으로 Workday에 로그인합니다.
  2. 검색창에 통합 시스템 사용자 만들기 를 입력하고 작업을 선택합니다.
  3. 사용자 이름 (예: ISU_SecOps_HCM)을 입력합니다.
  4. 비밀번호 를 설정합니다.
  5. ISU가 시간 초과되지 않도록 세션 만료 시간(분)0으로 설정합니다.
  6. UI 로그인을 제한하여 보안을 강화하려면 UI 세션 허용 안 함 을 사용 설정합니다.
  7. 비밀번호 규칙 유지보수 작업으로 이동합니다.
  8. 통합 시스템 사용자를 비밀번호 만료에서 제외되는 시스템 사용자 필드에 추가합니다.

통합 보안 그룹 만들기

  1. 검색창에 보안 그룹 만들기 를 입력하고 작업을 선택합니다.
  2. 테넌트 보안 그룹 유형 필드를 찾아 통합 시스템 보안 그룹 (제약 없음) 을 선택합니다.
  3. 보안 그룹의 이름 (예: ISG_SecOps_HCM)을 제공합니다.
  4. 확인 을 클릭합니다.
  5. 새로 만든 보안 그룹의 수정 을 클릭합니다.
  6. 이전 단계의 통합 시스템 사용자를 보안 그룹에 할당합니다.
  7. 완료 를 클릭합니다.

보안 그룹에 도메인 액세스 권한 부여

Google SecOps 피드는 4개의 Workday REST API 엔드포인트에서 데이터를 가져옵니다. 각 엔드포인트에는 통합 보안 그룹에 부여할 특정 도메인 보안 정책 권한이 필요합니다.

  1. 검색창에 보안 그룹에 대한 권한 유지보수 를 입력하고 작업을 선택합니다.
  2. 소스 보안 그룹 목록에서 만든 보안 그룹 (예: ISG_SecOps_HCM)을 선택합니다.
  3. 확인 을 클릭합니다.
  4. 도메인 보안 정책 권한 으로 이동합니다.
  5. 다음 각 도메인에 대해 GET 액세스 권한을 추가합니다.

    API 엔드포인트 필수 도메인 보안 정책
    /workers — 작업자 목록 및 프로필 Worker Data: Public Worker Reports
    /workers/{id}/timeOffEntries — 휴가 잔액 Worker Data: Time Off (Time Off Balances), Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history — 작업자 인력 기록 Worker Data: Historical Staffing Information
    /supervisoryOrganizations — 조직 구조 Manage: Supervisory Organization 또는 View: Supervisory Organization
  6. 확인 을 클릭합니다.

  7. 완료 를 클릭하여 변경사항을 저장합니다.

보안 정책 변경사항 활성화

  1. 검색창에 보류 중인 보안 정책 변경사항 활성화 를 입력하고 작업을 선택합니다.
  2. 의견 필드에 변경 사유 (예: Granting API access for Google SecOps HCM integration)를 입력합니다.
  3. 확인 을 클릭합니다.
  4. 확인을 선택한 다음 확인을 클릭합니다.

통합을 위한 API 클라이언트 등록

  1. 검색창에 통합을 위한 API 클라이언트 등록 을 입력하고 선택합니다.
  2. 만들기 를 클릭합니다.
  3. 다음 구성 세부정보를 제공합니다.

    • 클라이언트 이름: 이름을 입력합니다 (예: Google SecOps HCM Client).
    • 시스템 사용자: 만든 통합 시스템 사용자 (예: ISU_SecOps_HCM)를 선택합니다.
    • 범위: 다음 범위를 선택합니다.

      범위 필수
      인력 /workers/workers/{id}/history 엔드포인트
      휴가 및 휴직 /workers/{id}/timeOffEntries 엔드포인트
      조직 및 역할 /supervisoryOrganizations 엔드포인트
  4. 저장 을 클릭합니다.

  5. 확인 을 클릭합니다.

  6. 클라이언트 ID클라이언트 보안 비밀번호 를 즉시 복사하여 저장합니다.

OAuth 2.0 갱신 토큰 생성

  1. 검색창에 통합을 위한 갱신 토큰 관리 를 입력하고 선택합니다.
  2. 새 갱신 토큰 생성 을 클릭합니다.
  3. Workday 계정 필드에서 통합 시스템 사용자 (예: ISU_SecOps_HCM)를 검색하여 선택합니다.
  4. 만든 API 클라이언트를 선택하고 확인 을 클릭합니다.
  5. 갱신 토큰 을 복사하여 저장합니다.

API 엔드포인트 URL 가져오기

  1. 검색창에 API 클라이언트 보기 를 입력하고 선택합니다.
  2. 통합을 위한 API 클라이언트에서 만든 클라이언트 (예: Google SecOps HCM Client)를 찾습니다.
  3. 다음 세부정보를 복사하여 저장합니다.

    • 토큰 엔드포인트: 액세스 토큰을 가져오는 URL (예: https://wd2-impl-services1.workday.com/ccx/oauth2/YOUR_TENANT/token)
    • Workday REST API 엔드포인트: API 호출의 기본 URL (예: https://wd2-impl-services1.workday.com/ccx/api/v1/YOUR_TENANT)

OAuth 액세스 토큰 생성

  • curl 또는 유사한 HTTP 클라이언트를 사용하여 토큰 엔드포인트에 POST 요청을 보냅니다.

    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"
    

그러면 액세스 토큰 (예: "access_token": "abcd1234")이 반환됩니다. 액세스 토큰을 복사하여 저장합니다.

API 액세스 확인

  • 피드를 구성하기 전에 ISU에 키 엔드포인트에 필요한 권한이 있는지 확인합니다. 변수를 실제 값으로 바꿉니다.

    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"
    

각 테스트는 HTTP 상태 200을 반환해야 합니다. 엔드포인트에서 403을 반환하는 경우 문제 해결 섹션을 참조하세요.

Workday HCM 데이터를 수집하도록 Google SecOps에서 피드 구성

피드 설정하기

  1. **SIEM 설정 > 피드** 로 이동합니다.
  2. 새 피드 추가 를 클릭합니다.
  3. 다음 페이지에서 단일 피드 구성 을 클릭합니다.
  4. 피드 이름 필드에 피드 이름 (예: Workday HCM)을 입력합니다.
  5. 소스 유형 으로 서드 파티 API 를 선택합니다.
  6. 로그 유형 으로 Workday 를 선택합니다.
  7. 다음 을 클릭합니다.

피드 매개변수 구성

  1. 다음 입력 매개변수의 값을 지정합니다.

    • API 호스트 이름: Workday REST API 엔드포인트의 정규화된 도메인 이름 (예: wd2-impl-services1.workday.com)

    • 테넌트: Workday 인스턴스를 식별하는 Workday REST API 엔드포인트의 마지막 경로 요소입니다.

    • 액세스 토큰: 이전 섹션에서 생성된 OAuth 액세스 토큰입니다.

    고급 옵션:

    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
  2. 다음 을 클릭합니다.

  3. 확정 화면에서 새 피드 구성을 검토한 다음 제출 을 클릭합니다.

문제 해결

특정 엔드포인트에서 403 금지됨

피드에서 오류를 보고하거나 확인 curl 명령어가 특정 엔드포인트에 대해 403을 반환하는 경우 통합 시스템 사용자에게 권한이 없습니다.

실패한 엔드포인트 수정
/workers/{id}/timeOffEntries Worker Data: Time Off (Time Off Balances)Worker Data: Time Off (Time Off Balances Manager View) 도메인에 대한 GET 액세스 권한을 추가합니다. API 클라이언트에 휴가 및 휴직 범위를 추가합니다.
/workers/{id}/history Worker Data: Historical Staffing Information 도메인에 대한 GET 액세스 권한을 추가합니다. 인력 범위가 API 클라이언트에 할당되었는지 확인합니다.
/supervisoryOrganizations Manage: Supervisory Organization 또는 View: Supervisory Organization 도메인에 대한 GET 액세스 권한을 추가합니다. API 클라이언트에 조직 및 역할 범위를 추가합니다.

권한을 변경한 후 다음 단계를 따르세요.

  1. Workday에서 보류 중인 보안 정책 변경사항 활성화 를 실행합니다.
  2. API 클라이언트에 새 범위를 추가한 경우 통합을 위한 갱신 토큰 관리 를 통해 새 갱신 토큰을 생성한 다음 새 액세스 토큰을 생성합니다.
  3. 액세스 토큰이 변경된 경우 새 액세스 토큰으로 피드 구성을 업데이트합니다.

인증 오류

  • 401 승인되지 않음: 액세스 토큰이 만료되었습니다. 갱신 토큰을 사용하여 새 토큰을 생성하고 피드를 업데이트합니다.
  • 클라이언트가 유효하지 않음: 클라이언트 ID와 클라이언트 보안 비밀번호가 올바른지 확인합니다.
  • 갱신 토큰이 유효하지 않음: 갱신 토큰이 취소되었을 수 있습니다. 통합을 위한 갱신 토큰 관리 를 통해 새 갱신 토큰을 생성합니다.

UDM 매핑 표

로그 필드 UDM 매핑 논리
@timestamp metadata.event_timestamp.seconds Epoch 이후 초 단위로 타임스탬프로 파싱됨
businessTitle entity.entity.user.title 직접 매핑됨
descriptor entity.entity.user.user_display_name 직접 매핑됨
Employee_ID entity.entity.user.employee_id 직접 매핑됨
Employee_ID entity.metadata.product_entity_id id가 없는 경우 매핑됨
gopher-supervisor.descriptor entity.entity.user.managers.user_display_name 직접 매핑됨
gopher-supervisor.id entity.entity.user.managers.product_object_id 직접 매핑됨
gopher-supervisor.primaryWorkEmail entity.entity.user.managers.email_addresses 직접 매핑됨
gopher-time-off.date entity.entity.user.time_off.interval.start_time 날짜로 파싱됨
gopher-time-off.descriptor entity.entity.user.time_off.description 직접 매핑됨
Hire_Date entity.entity.user.hire_date 날짜로 파싱됨
id entity.metadata.product_entity_id 있는 경우 직접 매핑됨
Job_Profile entity.entity.user.title businessTitle이 없는 경우 매핑됨
Legal_Name_First_Name entity.entity.user.first_name 직접 매핑됨
Legal_Name_Last_Name entity.entity.user.last_name 직접 매핑됨
location.descriptor entity.entity.location.city 직접 매핑됨
primarySupervisoryOrganization.descriptor entity.entity.user.department 직접 매핑됨
primaryWorkEmail entity.entity.user.email_addresses 직접 매핑됨
primaryWorkPhone entity.entity.user.phone_numbers 직접 매핑됨
Termination_Date entity.entity.user.termination_date 날짜로 파싱됨
Work_Email entity.entity.user.email_addresses primaryWorkEmail이 없는 경우 매핑됨
collection_time metadata.event_timestamp.collected_timestamp 직접 매핑됨

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.