メインコンテンツまでスキップ

OktaシステムLogs

備考

プレビュー

Lakewatchは プライベート プレビュー段階です。アクセスをリクエストするには、Databricksアカウントチームにお問い合わせください。

Lakewatchは、OktaからシステムLogsを取り込むためのAPIコネクターを提供します。この記事では、前提条件、構成手順、コネクタースキーマ、およびLakewatchパーサーの監視対象について説明します。

前提条件​

コネクターには次のものが必要です。

  1. ワークスペースでServerless Lakeflow Spark Declarative Pipelinesがオンになっています。
  2. Unity Catalog。Unity Catalog 接続を作成または使用する権限があります。「接続パーミッション」を参照してください。
  3. アクティブなOktaスーパー管理者、組織管理者、または読み取り専用管理者アカウント。Databricks では、最小特権の System Log アクセスに読み取り専用管理者アカウントを使用することを推奨しています。
  4. Okta管理コンソールへのアクセス。
注記

APIトークンは、トークンを作成した管理者と同じ権限を持ちます。その管理者の権限が変更されたり、アカウントが無効になったりすると、トークンも影響を受けます。詳細については、「Okta APIトークンの管理」を参照してください。

既知の制限事項​

  • Okta システム Logs は追加専用であるため、SCD タイプ 2 はサポートされていません。
  • コネクタは、APIトークンによる認証のみをサポートします。
  • 過去のルックバックは、Okta がシステム Logs を保持する 90 日間を超えることはできません。取り込む過去の期間を選択するを参照してください。

取り込みのためにOktaを構成する​

  1. トークンを所有する管理者アカウントでOkta管理コンソールにサインインします。
  2. セキュリティ > API に移動します。
  3. [トークン] tabをクリックします。
  4. トークンの作成 をクリックします。
  5. トークン名を入力してください。
  6. このトークンで行われる API 呼び出しは、任意の IP から発信される必要があります には、 任意の IP を選択します。
  7. トークンの作成 をクリックします。
  8. 表示されたSSWS APIトークンをコピーします。Oktaはトークンを再度表示しません。
  9. company-name.okta.comなど、Okta組織ドメインをメモします。
  10. [ トークン ] tabで、トークンの [ ロール ] が [ スーパー管理者 ]、[ 組織管理者 ]、または [ 読み取り専用管理者 ] であることを確認します。

情報については、 Okta APIトークンの管理を参照してください。

ヒント

Lakewatch UIを通じて接続を作成するときは、上記で収集した ドメイン と SSWS APIトークン が必要です。

次のステップ​

上記の構成を完了した後、Lakewatch UIでOktaコネクタを使用してデータソースを作成します。手順については、APIコネクターを参照してください。


コネクターとLakewatchのスキーマ​

コネクタは、default ソーススキーマから次のソーステーブルを取り込みます:

ソーステーブル

Oktaデータ

組み込みLakewatchパーサー

system_logs

Okta System Logのセキュリティイベント

okta_system_log

ソーステーブル

Oktaデータ

組み込みLakewatchパーサー

system_logs

Okta System Logのセキュリティイベント

okta_system_log

コネクターは、ソーステーブルをデータソースの未加工の宛先に書き込みます。データソースを構成する際に解析済み宛先を設定しない限り、組み込みパーサーはパーサー名にちなんだ別の解析済みテーブルを書き込みます。

Lakewatch管理列​

コネクタは、各生のソース行に次の列を追加します:

  • lw_id: Lakewatchがプライマリキーとして使用する非Null文字列。コネクタは、Oktaのpublishedフィールドとuuidフィールドから安定した時間順のIDを導出します。IDは、増分同期全体で重複排除をサポートします。
  • time: RFC 3339 Timestampとしてpublishedから解析された、Null以外のTimestamp。このコネクタは、増分順序付けにソースpublished値を使用します。

解析された表はlw_idを前方に運びます。パーサーは、解析されたtime列も割り当て、次を追加します:

  • lw_meta:標準的なLakewatch処理メタデータ。
  • lw_observables: パーサーでセキュリティ可観測項目としてマークされたフィールドから抽出された値。

情報については、 パーサー リファレンスを参照してください。

未処理コネクターテーブルスキーマ​

次のスキーマは、標準のLakeflow ConnectフィールドとLakewatch専用のlw_idおよびtime列を組み合わせたものです。ネストされたフィールド定義については、Okta System Log APIリファレンスを参照してください。

スキーマ

列

データ型

lw_id

STRING

time

TIMESTAMP

uuid

STRING

published

TIMESTAMP

eventType

STRING

version

STRING

severity

STRING

legacyEventType

STRING

displayMessage

STRING

actor

STRUCT<id: STRING, displayName: STRING, type: STRING, alternateId: STRING, detailEntry: MAP<STRING, STRING>>

authenticationContext

STRUCT<authenticationProvider: STRING, authenticationStep: INT, credentialProvider: STRING, credentialType: STRING, interface: STRING, externalSessionId: STRING, issuer: STRUCT<id: STRING, type: STRING>>

client

STRUCT<id: STRING, ipAddress: STRING, userAgent: STRUCT<rawUserAgent: STRING, os: STRING, browser: STRING>, zone: STRING, device: STRING, geographicalContext: STRUCT<city: STRING, state: STRING, country: STRING, postalCode: STRING, geolocation: STRUCT<lat: DOUBLE, lon: DOUBLE>>>

debugContext

STRUCT<debugData: MAP<STRING, STRING>>

outcome

STRUCT<result: STRING, reason: STRING>

device

STRUCT<id: STRING, name: STRING, os_platform: STRING, os_version: STRING, managed: BOOLEAN, registered: BOOLEAN, device_integrator: STRING, disk_encryption_type: STRING, screen_lock_type: STRING, jailbreak: BOOLEAN, secure_hardware_present: BOOLEAN>

transaction

STRUCT<type: STRING, id: STRING, detail: MAP<STRING, STRING>>

request

STRUCT<ipChain: ARRAY<STRUCT<ip: STRING, geographicalContext: STRUCT<city: STRING, state: STRING, country: STRING, postalCode: STRING, geolocation: STRUCT<lat: DOUBLE, lon: DOUBLE>>, version: STRING, source: STRING, ipDetails: STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, ipServiceCategories: ARRAY<STRUCT<isAnonymous: BOOLEAN, operator: STRING, type: STRING>>>>>>

target

ARRAY<STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>, changeDetails: STRUCT<from: STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>>, to: STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>>>>>

securityContext

STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, isProxy: BOOLEAN, ipDetails: STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, ipServiceCategories: ARRAY<STRUCT<isAnonymous: BOOLEAN, operator: STRING, type: STRING>>>, risk: STRUCT<detectionName: STRING, issuer: STRING, level: STRING, previousLevel: STRING, reasons: ARRAY<STRING>>, UserBehaviours: ARRAY<STRUCT<id: STRING, name: STRING, result: STRING>>>

列

データ型

lw_id

STRING

time

TIMESTAMP

uuid

STRING

published

TIMESTAMP

eventType

STRING

version

STRING

severity

STRING

legacyEventType

STRING

displayMessage

STRING

actor

STRUCT<id: STRING, displayName: STRING, type: STRING, alternateId: STRING, detailEntry: MAP<STRING, STRING>>

authenticationContext

STRUCT<authenticationProvider: STRING, authenticationStep: INT, credentialProvider: STRING, credentialType: STRING, interface: STRING, externalSessionId: STRING, issuer: STRUCT<id: STRING, type: STRING>>

client

STRUCT<id: STRING, ipAddress: STRING, userAgent: STRUCT<rawUserAgent: STRING, os: STRING, browser: STRING>, zone: STRING, device: STRING, geographicalContext: STRUCT<city: STRING, state: STRING, country: STRING, postalCode: STRING, geolocation: STRUCT<lat: DOUBLE, lon: DOUBLE>>>

debugContext

STRUCT<debugData: MAP<STRING, STRING>>

outcome

STRUCT<result: STRING, reason: STRING>

device

STRUCT<id: STRING, name: STRING, os_platform: STRING, os_version: STRING, managed: BOOLEAN, registered: BOOLEAN, device_integrator: STRING, disk_encryption_type: STRING, screen_lock_type: STRING, jailbreak: BOOLEAN, secure_hardware_present: BOOLEAN>

transaction

STRUCT<type: STRING, id: STRING, detail: MAP<STRING, STRING>>

request

STRUCT<ipChain: ARRAY<STRUCT<ip: STRING, geographicalContext: STRUCT<city: STRING, state: STRING, country: STRING, postalCode: STRING, geolocation: STRUCT<lat: DOUBLE, lon: DOUBLE>>, version: STRING, source: STRING, ipDetails: STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, ipServiceCategories: ARRAY<STRUCT<isAnonymous: BOOLEAN, operator: STRING, type: STRING>>>>>>

target

ARRAY<STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>, changeDetails: STRUCT<from: STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>>, to: STRUCT<id: STRING, type: STRING, alternateId: STRING, displayName: STRING, detailEntry: MAP<STRING, STRING>>>>>

securityContext

STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, isProxy: BOOLEAN, ipDetails: STRUCT<asNumber: BIGINT, asOrg: STRING, isp: STRING, domain: STRING, ipServiceCategories: ARRAY<STRUCT<isAnonymous: BOOLEAN, operator: STRING, type: STRING>>>, risk: STRUCT<detectionName: STRING, issuer: STRING, level: STRING, previousLevel: STRING, reasons: ARRAY<STRING>>, UserBehaviours: ARRAY<STRUCT<id: STRING, name: STRING, result: STRING>>>

パーサー観測対象​

okta_system_logパーサーは、入れ子になったオブジェクトをVARIANTとして書き込み、以下のフィールドをlw_observablesに抽出します。

可観測項目

フィールド

可観測項目

actor.id

actor_id

actor.alternateId

email

actor.alternateId

actor_id

actor.alternateId

username

client.ipAddress

ip

request.ipChain[].ip

ip

request.ipChain[].ipDetails.domain

domain

target[].id

actor_id

target[].alternateId

email

target[].alternateId

actor_id

target[].alternateId

username

securityContext.domain

domain

securityContext.ipDetails.domain

domain

フィールド

可観測項目

actor.id

actor_id

actor.alternateId

email

actor.alternateId

actor_id

actor.alternateId

username

client.ipAddress

ip

request.ipChain[].ip

ip

request.ipChain[].ipDetails.domain

domain

target[].id

actor_id

target[].alternateId

email

target[].alternateId

actor_id

target[].alternateId

username

securityContext.domain

domain

securityContext.ipDetails.domain

domain


トラブルシューティング​

データの取り込み中にレート制限エラーが発生します。​

  1. Okta管理パネルで、 セキュリティ >> API に移動します。
  2. 「トークン」tabで、Databricksに対する認証に使用したAPIトークンを見つけます。
  3. トークンの名前をクリックし、 トークンレート制限 セクションで 編集 をクリックし、スライダーを各APIレート制限の50%以上に 増やし ます。