Workday HCM ログを収集する

以下でサポートされています。

このドキュメントでは、サードパーティ API を使用してフィードを設定し、Workday HCM ログを Google Security Operations に取り込む方法について説明します。

パーサーは、JSON 形式のログから Workday HCM ユーザーデータを抽出します。フィールド名の変更、ネストされたオブジェクトの統合、日付の解析、ユーザー属性、雇用情報、組織構造の UDM フィールドへのデータの入力など、さまざまなデータ変換を処理します。

始める前に

次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス。
  • セキュリティ管理者または同等の権限を持つ Workday への特権アクセス。

Workday API 認証を構成する

統合システム ユーザー(ISU)を作成する

  1. 管理者権限で Workday にログインします。
  2. 検索バーに「統合システム ユーザーを作成」と入力し、タスクを選択します。
  3. [Username] にユーザー名を入力します(例: ISU_SecOps_HCM)。
  4. パスワードを設定します。
  5. ISU がタイムアウトしないように、[Session Timeout Minutes] を 0 に設定します。
  6. [UI セッションを許可しない] を有効にして、UI ログインを制限することでセキュリティを強化します。
  7. [Maintain Password Rules] タスクに移動します。
  8. 統合システム ユーザーを [パスワードの有効期限が切れないシステム ユーザー] フィールドに追加します。

統合セキュリティ グループを作成する

  1. 検索バーに「セキュリティ グループを作成」と入力し、タスクを選択します。
  2. [テナント化されたセキュリティ グループ] フィールドを見つけて、[統合システム セキュリティ グループ(制限なし)] を選択します。
  3. セキュリティ グループの名前を指定します(例: ISG_SecOps_HCM)。
  4. [OK] をクリックします。
  5. 新しく作成したセキュリティ グループの [編集] をクリックします。
  6. 前の手順で作成した統合システム ユーザーをセキュリティ グループに割り当てます。
  7. [完了] をクリックします。

セキュリティ グループにドメイン アクセス権を付与する

Google SecOps フィードは、4 つの Workday REST API エンドポイントからデータを取得します。各エンドポイントでは、統合セキュリティ グループに特定のドメイン セキュリティ ポリシー権限を付与する必要があります。

  1. 検索バーに「セキュリティ グループの権限を維持」と入力し、タスクを選択します。
  2. [送信元セキュリティ グループ] リストから、作成したセキュリティ グループ(例: ISG_SecOps_HCM)を選択します。
  3. [OK] をクリックします。
  4. [ドメイン セキュリティ ポリシーの権限] に移動します。
  5. 次の各ドメインに GET アクセス権を追加します。

    API エンドポイント 必須のドメイン セキュリティ ポリシー
    /workers - ワーカーのリスト、プロフィール、現在のスタッフ配置 Worker Data: Public Worker ReportsWorker Data: Current Staffing InformationPerson Data: Work Contact Information
    /workers/{id}/timeOffEntries - 休暇残高 Worker Data: Time Off (Time Off Balances)Worker Data: Time Off (Time Off Balances Manager View)
    /workers/{id}/history - ワーカーのスタッフ配置履歴 Worker Data: Current Staffing Information
    /supervisoryOrganizations - 組織構造 Worker Data: Organization Information
  6. [OK] をクリックします。

  7. [完了] をクリックして変更を保存します。

セキュリティ ポリシーの変更を有効にする

  1. 検索バーに「保留中のセキュリティ ポリシーの変更を有効にする」と入力し、タスクを選択します。
  2. コメント欄に変更の理由を入力します(例: Granting API access for Google SecOps HCM integration)。
  3. [OK] をクリックします。
  4. [確認] を選択し、[OK] をクリックします。

インテグレーション用の API クライアントを登録する

  1. 検索バーに「Register API Client for Integrations」と入力し、選択します。
  2. [作成] をクリックします。
  3. 次の構成情報を提供してください。

    • クライアント名: 名前を入力します(例: Google SecOps HCM Client)。
    • システム ユーザー: 作成した統合システム ユーザー(ISU_SecOps_HCM など)を選択します。
    • 範囲: 次のスコープを選択します。

      範囲 必須となる対象
      スタッフの割り当て /workers エンドポイントと /workers/{id}/history エンドポイント
      連絡先情報 /workers から返される仕事用のメールアドレスと電話番号のフィールド(UDM の関連付けに使用)
      休暇と休職 /workers/{id}/timeOffEntries エンドポイント
      組織とロール /supervisoryOrganizations エンドポイント
      テナント構成不可 任意の OAuth 2.0 API クライアント(システムレベルの統合とトークン ローテーション)
  4. [保存] をクリックします。

  5. [OK] をクリックします。

  6. クライアント IDクライアント シークレットをすぐにコピーして保存します。

OAuth 2.0 更新トークンを生成する

  1. 検索バーに「Manage Refresh Tokens for Integrations」と入力して選択します。
  2. [新しい更新トークンを生成] をクリックします。
  3. [Workday アカウント] フィールドで、統合システム ユーザー(例: ISU_SecOps_HCM)を検索して選択します。
  4. 作成した API クライアントを選択し、[OK] をクリックします。
  5. [Refresh Token] の値をコピーして保存します。

API エンドポイントの URL を取得する

  1. 検索バーに「View API Clients」と入力して選択します。
  2. [API Clients for Integrations] で、作成したクライアント(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. [Add New Feed] をクリックします。
  3. 次のページで、[単一のフィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Workday HCM)。
  5. [ソースタイプ] として [サードパーティ API] を選択します。
  6. [ログタイプ] として [Workday] を選択します。
  7. [次へ] をクリックします。

フィード パラメータを構成する

次の入力パラメータの値を指定します。

  • API ホスト名: Workday REST API エンドポイントの完全修飾ドメイン名(例: wd2-impl-services1.workday.com)。

  • テナント: Workday インスタンスを識別する Workday REST API エンドポイントの最後のパス要素。

  • アクセス トークン: 前のセクションで生成された OAuth アクセス トークン。

詳細オプション:

  • アセットの名前空間: アセットの名前空間
  • Ingestion labels: このフィードのイベントに適用されるラベル。
  1. [次へ] をクリックします。
  2. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

トラブルシューティング

特定のエンドポイントで 403 Forbidden エラーが発生する

フィードでエラーが報告された場合や、特定のエンドポイントに対して検証 curl コマンドが 403 を返す場合は、統合システム ユーザーに権限がありません。

失敗したエンドポイント 修正
/workers/{id}/timeOffEntries Worker Data: Time Off (Time Off Balances) ドメインと Worker Data: Time Off (Time Off Balances Manager View) ドメインの GET アクセス権を追加します。API クライアントに [Time Off and Leave] スコープを追加します。
/workers/{id}/history Worker Data: Historical Staffing Information ドメインの GET アクセス権を追加します。Staffing スコープが API クライアントに割り当てられていることを確認します。
/supervisoryOrganizations Manage: Supervisory Organization または View: Supervisory Organization ドメインの GET アクセス権を追加します。API クライアントに Organizations and Roles スコープを追加します。

権限を変更した後:

  1. Workday で Activate Pending Security Policy Changes を実行します。
  2. API クライアントに新しいスコープを追加した場合は、統合の更新トークンを管理するで新しい更新トークンを生成してから、新しいアクセス トークンを生成します。
  3. アクセス トークンが変更された場合は、新しいアクセス トークンでフィード設定を更新します。

認証エラー

  • 401 Unauthorized: アクセス トークンの有効期限が切れています。更新トークンを使用して新しいトークンを生成し、フィードを更新します。
  • Invalid client: クライアント ID とクライアント シークレットが正しいことを確認します。
  • 更新トークンが無効: 更新トークンが取り消された可能性があります。インテグレーションの更新トークンを管理するで新しいトークンを生成します。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
entity_host_name entity.asset.hostname 直接マッピングされます。
location.descriptor entity.location.city 直接マッピングされます。
AU_EFFECTIVE_DATE entity.resource.attribute.labels.value 直接マッピングされます。
COMPANY_EFFECTIVE_DATE entity.resource.attribute.labels.value 直接マッピングされます。
ORIG_HIRE_DT entity.resource.attribute.labels.value 直接マッピングされます。
STATUS_EFFECTIVE_DATE entity.resource.attribute.labels.value 直接マッピングされます。
href entity.url 直接マッピングされます。
CONT_START_DTE entity.user.attribute.labels.value 直接マッピングされます。
EMPL_TYPE entity.user.attribute.labels.value 直接マッピングされます。
EXEC_CD entity.user.attribute.labels.value 直接マッピングされます。
EXEC_DESCR entity.user.attribute.labels.value 直接マッピングされます。
HR_Status entity.user.attribute.labels.value 直接マッピングされます。
Is_Active entity.user.attribute.labels.value 直接マッピングされます。
Is_Manager entity.user.attribute.labels.value 直接マッピングされます。
JOB_CODE entity.user.attribute.labels.value 直接マッピングされます。
ORG_CD entity.user.attribute.labels.value 直接マッピングされます。
ORG_Container entity.user.attribute.labels.value 直接マッピングされます。
ORG_Container_Name entity.user.attribute.labels.value 直接マッピングされます。
PER_Status entity.user.attribute.labels.value 直接マッピングされます。
POSITION_NBR entity.user.attribute.labels.value 直接マッピングされます。
PS_ELID entity.user.attribute.labels.value 直接マッピングされます。
REG_TEMP entity.user.attribute.labels.value 直接マッピングされます。
WB_LOGON_ID entity.user.attribute.labels.value 直接マッピングされます。
ORG_DESCR entity.user.department 統合済み
primarySupervisoryOrganization.descriptor entity.user.department 統合済み
Email entity.user.email_addresses 統合済み
Work_Email entity.user.email_addresses 統合済み
primaryWorkEmail entity.user.email_addresses 統合済み
EMPLID entity.user.employee_id 直接マッピングされます。
Employee_ID entity.user.employee_id 直接マッピングされます。
First_Name entity.user.first_name 直接マッピングされます。
Legal_Name_First_Name entity.user.first_name 直接マッピングされます。
HIRE_DATE entity.user.hire_date RFC 3339 として解析済み
Hire_Date entity.user.hire_date RFC 3339 として解析済み
Last_Name entity.user.last_name 直接マッピングされます。
Legal_Name_Last_Name entity.user.last_name 直接マッピングされます。
gopher-supervisor.primaryWorkEmail entity.user.managers.email_addresses 統合済み
Reports_To_EMPLID entity.user.managers.employee_id 直接マッピングされます。
gopher-supervisor.id entity.user.managers.product_object_id 名前変更済み/マッピング済み
Reports_To_Name entity.user.managers.user_display_name 直接マッピングされます。
gopher-supervisor.descriptor entity.user.managers.user_display_name 名前変更済み/マッピング済み
primaryWorkPhone entity.user.phone_numbers 統合済み
Termination_Date entity.user.termination_date RFC 3339 として解析済み
timeoff.descriptor entity.user.time_off.description 直接マッピングされます。
timeoff.date entity.user.time_off.interval.start_time RFC 3339 として解析済み
HR_JOB_TITLE entity.user.title 直接マッピングされます。
Job_Profile entity.user.title 直接マッピングされます。
businessTitle entity.user.title 直接マッピングされます。
Full_Name entity.user.user_display_name 直接マッピングされます。
descriptor entity.user.user_display_name 直接マッピングされます。
udm_metadata metadata 名前変更済み/マッピング済み
metadata_entity_type metadata.entity_type 直接マッピングされます。
actual_completed_date_and_time metadata.event_timestamp MM/dd/yyyy HH:mm:ss a として解析済み
body.time metadata.event_timestamp UNIX_MS として解析済み
requestTime metadata.event_timestamp RFC 3339 として解析済み
timestamp metadata.event_timestamp RFC 3339 として解析済み
EMPLID metadata.product_entity_id 直接マッピングされます。
Employee_ID metadata.product_entity_id 直接マッピングされます。
id metadata.product_entity_id 直接マッピングされます。
Source_Name metadata.product_name 直接マッピングされます。
userAgent network.http.parsed_user_agent 名前変更済み/マッピング済み
userAgent network.http.user_agent 直接マッピングされます。
sessionId network.session_id 直接マッピングされます。
ipAddress principal.ip 統合済み
taskId principal.process.pid 直接マッピングされます。
activityAction_label principal.resource.attribute.labels 統合済み
body.event.Submitted_By principal.user.userid 直接マッピングされます。
body.event.Response_Message security_result.action_details 直接マッピングされます。
body.event.Messages security_result.description 直接マッピングされます。
actual_start_date_and_time_label security_result.detection_fields 統合済み
background_process_is_running_label security_result.detection_fields 統合済み
by_person_label security_result.detection_fields 統合済み
created_from_trigger_label security_result.detection_fields 統合済み
items_processed_label security_result.detection_fields 統合済み
percent_complete_label security_result.detection_fields 統合済み
processing_time_label security_result.detection_fields 統合済み
scheduled_start_date_and_time_label security_result.detection_fields 統合済み
sent_on_label security_result.detection_fields 統合済み
total_duration_label security_result.detection_fields 統合済み
body.event.Integration_Event_Status security_result.summary 直接マッピングされます。
body.event.Integration_System target.application 直接マッピングされます。
target_data.id target.resource.product_object_id 直接マッピングされます。
deviceType target.resource.resource_subtype 直接マッピングされます。
deviceType target.resource.type マッピング: (?i)(Desktop/Laptop/Mobile)DEVICE
user_display_name target.user.user_display_name 直接マッピングされます。
systemAccount target.user.userid 直接マッピングされます。
なし entity.resource.attribute.labels.key 定数: COMPANY_EFFECTIVE_DATE
なし entity.user.attribute.labels.key 定数: ORG_Container
なし metadata.product_name 定数: HCM
なし metadata.vendor_name 定数: Workday
なし target.resource.type 定数: DEVICE

変更履歴

このパーサーの変更ログを表示する

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。