Workday HCM ログを収集する
このドキュメントでは、API を使用して Workday ログを Google Security Operations に取り込む方法について説明します。パーサーは、JSON 形式のログから Workday HCM ユーザーデータを抽出します。フィールド名の変更、ネストされたオブジェクトの統合、日付の解析、ユーザー属性、雇用情報、組織構造の UDM フィールドへのデータの入力など、さまざまなデータ変換を処理します。また、形式が正しくない JSON や重要なフィールドの欠落に対するエラー処理も含まれています。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス。
- Workday への特権アクセス。
Workday API 認証を構成する
Workday で統合システム ユーザー(ISU)を作成する
- 管理者権限で Workday にログインします。
- 検索バーに「
Create Integration System User
」と入力し、結果からタスクを選択します。 - [Username] にユーザー名を入力します。
- パスワードを設定します。
- ISU がタイムアウトしないように、[Session Timeout Minutes] を
0
に設定します。 - [UI セッションを許可しない] を有効にして、UI ログインを制限することでセキュリティを強化します。
- [パスワード ルールの維持] タスクに移動します。
- 統合システム ユーザーを [パスワードの有効期限が切れないシステム ユーザー] フィールドに追加します。
Workday で統合セキュリティ グループを作成する
- 検索バーに「
Create Security Group
」と入力し、結果からタスクを選択します。 - [テナント化されたセキュリティ グループ] フィールドを見つけて、[統合システム セキュリティ グループ(制限なし)] を選択します。
- セキュリティ グループの名前を指定します。
- [OK] をクリックします。
- 新しく作成したセキュリティ グループの [編集] をクリックします。
- 前の手順で作成した統合システム ユーザーをセキュリティ グループに割り当てます。
- [完了] をクリックします。
Workday でセキュリティ グループにドメイン アクセス権を付与する
- 検索バーに「セキュリティ グループの権限を維持」と入力し、結果からタスクを選択します。
- [送信元セキュリティ グループ] リストから作成したセキュリティ グループを選択して、権限を変更します。
- [OK] をクリックします。
- [セキュリティ グループの権限を維持] > [ドメイン セキュリティ ポリシーの権限] に移動します。
- 各ドメインに必要な権限(GET オペレーションなど)を割り当てます。
- [OK] をクリックします。
- [完了] をクリックして変更を保存します。
Workday でセキュリティ ポリシーの変更を有効にする
- 検索バーに「
Activate Pending Security Policy Changes
」と入力し、結果からタスクを選択します。 - コメント フィールドに監査の理由を入力して [OK] をクリックし、[保留中のセキュリティ ポリシーの変更を有効にする] タスクを開始します。
- 次の画面で [Confirm] を選択してタスクを完了し、[OK] をクリックします。
統合用の API クライアントを構成する
- 検索バーに「
Register API Client for Integrations
」と入力して選択します。 - [作成] をクリックします。
- 次の構成の詳細を入力します。
- クライアント名: API クライアントの名前を入力します(例:
Google SecOps Client
)。 - システム ユーザー: 前の手順で作成した統合システム ユーザーを選択します。
- スコープ: HCM API、またはアクセスする従業員データやその他の領域を含む関連スコープを選択します。
- クライアント名: API クライアントの名前を入力します(例:
- [保存] を選択します。
- [OK] をクリックして API クライアントを作成します。
- API クライアントを作成したら、クライアント シークレットを保存します。ページを閉じると、この値は再度表示されません。
OAuth 2.0 更新トークンを生成する
- Workday の検索バーに「
Manage Refresh Tokens for Integrations
」と入力して選択します。 - [新しい更新トークンを生成] をクリックします。
- [Workday アカウント] フィールドで、作成した統合システム ユーザーを検索して選択します。
- ユーザーを選択して [OK] をクリックします。
- 表示された更新トークンをコピーして保存します。
API エンドポイントの URL を取得する
- Workday の検索バーに「
View API Clients
」と入力して選択します。 - [API Clients for Integrations] で、作成した
Google SecOps Client
を見つけます。 - 次の詳細情報をコピーして保存します。
- トークン エンドポイント: アクセス トークンを取得するためのリクエストを送信する URL。
- Workday REST API エンドポイント: Google SecOps との統合を構成するために使用する URL。
OAuth アクセス トークンを生成する
curl などの HTTP クライアントを使用して、トークン エンドポイントに POST リクエストを送信します。
curl -X POST "https://{hostname}/ccx/oauth2/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"
など)が返されます。アクセス トークンをコピーして保存します。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
フィードを構成する手順は次のとおりです。
- [SIEM Settings] > [Feeds] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Workday Logs
)。 - [ソースタイプ] として [サードパーティ API] を選択します。
- [Workday] ログタイプを選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- API ホスト名: Workday REST API エンドポイントの URL。
- テナント: インスタンスを識別する Workday API エンドポイントの最後のパス要素。
- アクセス トークン: OAuth アクセス トークン。
- [次へ] をクリックします。
- [Finalize] 画面でフィードの設定を確認し、[Submit] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- API Hostname: Workday REST API エンドポイントの FQDN。
- テナント: インスタンスを識別する Workday API エンドポイントの最後のパス要素。
- アクセス トークン: OAuth アクセス トークン。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- アセットの名前空間: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
UDM マッピング テーブル
ログフィールド | UDM マッピング | 論理 |
---|---|---|
@timestamp |
read_only_udm.metadata.event_timestamp.seconds |
未加工ログの @timestamp フィールドの名前が timestamp に変更され、エポックからの経過秒数でタイムスタンプとして解析されます。 |
businessTitle |
read_only_udm.entity.entity.user.title |
未加工ログの businessTitle フィールドから直接マッピングされます。 |
descriptor |
read_only_udm.entity.entity.user.user_display_name |
未加工ログの descriptor フィールドから直接マッピングされます。 |
Employee_ID |
read_only_udm.entity.entity.user.employee_id |
未加工ログの Employee_ID フィールドから直接マッピングされます。 |
Employee_ID |
read_only_udm.entity.metadata.product_entity_id |
id が存在しない場合、未加工ログの Employee_ID フィールドから直接マッピングされます。 |
gopher-supervisor.descriptor |
read_only_udm.entity.entity.user.managers.user_display_name |
元のログの gopher-supervisor.descriptor フィールドから直接マッピングされ、empmanager.user_display_name に名前が変更された後、managers に統合されます。 |
gopher-supervisor.id |
read_only_udm.entity.entity.user.managers.product_object_id |
元のログの gopher-supervisor.id フィールドから直接マッピングされ、empmanager.product_object_id に名前が変更された後、managers に統合されます。 |
gopher-supervisor.primaryWorkEmail |
read_only_udm.entity.entity.user.managers.email_addresses |
元のログの gopher-supervisor.primaryWorkEmail フィールドから直接マッピングされ、managers に統合されます。 |
gopher-time-off.date |
read_only_udm.entity.entity.user.time_off.interval.start_time |
未加工ログの gopher-time-off 配列内の gopher-time-off.date フィールドから日付として解析されます。 |
gopher-time-off.descriptor |
read_only_udm.entity.entity.user.time_off.description |
未加工ログの gopher-time-off 配列内の gopher-time-off.descriptor フィールドから直接マッピングされます。 |
Hire_Date |
read_only_udm.entity.entity.user.hire_date |
未加工ログの Hire_Date フィールドから日付として解析されます。 |
id |
read_only_udm.entity.metadata.product_entity_id |
存在する場合に、未加工ログの id フィールドから直接マッピングされます。 |
Job_Profile |
read_only_udm.entity.entity.user.title |
businessTitle が存在しない場合、未加工ログの Job_Profile フィールドから直接マッピングされます。 |
Legal_Name_First_Name |
read_only_udm.entity.entity.user.first_name |
未加工ログの Legal_Name_First_Name フィールドから直接マッピングされます。 |
Legal_Name_Last_Name |
read_only_udm.entity.entity.user.last_name |
未加工ログの Legal_Name_Last_Name フィールドから直接マッピングされます。 |
location.descriptor |
read_only_udm.entity.entity.location.city |
未加工ログの location.descriptor フィールドから直接マッピングされ、_location.city に変更された後、entity.entity.location.city に変更されます。 |
primarySupervisoryOrganization.descriptor |
read_only_udm.entity.entity.user.department |
未加工ログの primarySupervisoryOrganization.descriptor フィールドから直接マッピングされます。 |
primaryWorkEmail |
read_only_udm.entity.entity.user.email_addresses |
未加工ログの primaryWorkEmail フィールドから直接マッピングされます。 |
primaryWorkPhone |
read_only_udm.entity.entity.user.phone_numbers |
未加工ログの primaryWorkPhone フィールドから直接マッピングされます。 |
Termination_Date |
read_only_udm.entity.entity.user.termination_date |
未加工ログの Termination_Date フィールドから日付として解析されます。 |
Work_Email |
read_only_udm.entity.entity.user.email_addresses |
primaryWorkEmail が存在しない場合、未加工ログの Work_Email フィールドから直接マッピングされます。 |
collection_time |
read_only_udm.metadata.event_timestamp.collected_timestamp |
ログの collection_time は collected_timestamp にマッピングされます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。