Okta Advanced Server Access のログを収集する

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

このドキュメントでは、Google Cloud Storage V2 を使用して Okta Advanced Server Access ログを Google Security Operations に取り込む方法について説明します。

Okta Advanced Server Access(旧称 ScaleFT)は、エフェメラル証明書と包括的な監査ロギングを使用してサーバーへの SSH アクセスと RDP アクセスを提供する特権アクセス管理ソリューションです。このプラットフォームは監査イベントを 90 日間保持し、SIEM プラットフォームでの長期保存と分析のためにこれらのイベントを取得する API を提供します。

始める前に

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

  • Google SecOps インスタンス
  • Cloud Storage、Cloud Run、Pub/Sub、Cloud Scheduler API が有効になっている GCP プロジェクト
  • GCS バケットを作成および管理する権限
  • GCS バケットの IAM ポリシーを管理する権限
  • Cloud Run サービス、Pub/Sub トピック、Cloud Scheduler ジョブを作成する権限
  • Okta Advanced Server Access チームへの管理者アクセス権
  • Advanced Server Access でサービス ユーザーと API キーを作成できる

Okta Advanced Server Access API アクセスを構成する

Google SecOps が監査イベントを取得できるようにするには、サービス ユーザーを作成して API キーを生成する必要があります。サービス ユーザーは、自動化と API 統合用に設計された特別なアカウントです。

サービス ユーザーを作成する

  1. Advanced Server Access ダッシュボードにログインします。
  2. [ユーザー] にアクセスします。
  3. [サービス ユーザー] タブを選択します。
  4. [サービス ユーザーを作成] をクリックします。
  5. [ユーザー名] フィールドに、サービス ユーザーのわかりやすい名前(chronicle-integration など)を入力します。

  6. [サービス ユーザーを作成] をクリックします。

API キーを生成する

  1. サービス ユーザーの詳細ページで、[Create API Key] をクリックします。
  2. 次の認証情報をすぐにコピーして保存します。

    • API キー ID: API キーを識別する UUID(例: 6052868b-1b04-4a14-8288-e6496d7f2f4b)
    • API キー シークレット: API リクエストの認証に使用される base64 でエンコードされたシークレット文字列
  3. [完了] をクリックします。

適切な権限を持つグループにサービス ユーザーを割り当てる

サービス ユーザーが Audits API にアクセスするには、チーム全体に適切なロールを持つグループのメンバーである必要があります。

  1. Advanced Server Access ダッシュボードで、[Groups] に移動します。
  2. 既存のグループを選択するか、API アクセス用の新しいグループを作成します。
  3. グループ名をクリックして、グループの詳細を開きます。
  4. [ユーザー] タブを選択します。
  5. [ユーザーを追加] をクリックします。
  6. サービス ユーザー(chronicle-integration など)を検索して選択します。
  7. [追加] をクリックします。
  8. [ロール] タブを選択します。
  9. グループに次のいずれかのチーム全体のロールがあることを確認します。

    • reporting_user: すべてのエンドポイントに対する読み取り専用アクセス(ログの取り込みに推奨)
    • access_admin: 完全な管理者権限(すべての CRUD 権限を付与)
  10. 必要なロールが割り当てられていない場合は、[Add Role] をクリックし、[reporting_user] または [access_admin] を選択して、[Save] をクリックします。

権限を確認する

サービス ユーザーに必要な権限があることを確認するには:

  1. Advanced Server Access ダッシュボードで、[Groups] に移動します。
  2. サービス ユーザーを含むグループ(chronicle-integration など)をクリックします。
  3. [ロール] タブを選択します。
  4. reporting_user ロールまたは access_admin ロールがリストに表示されていることを確認します。
  5. [ロール] タブが表示されない場合は、管理者にお問い合わせのうえ、適切なアクセス権を付与してもらってください。

テスト API へのアクセス

  • 統合に進む前に、認証情報をテストします。

    # Replace with your actual credentials
    TEAM_NAME="your-team-name"
    KEY_ID="your-api-key-id"
    KEY_SECRET="your-api-key-secret"
    
    # Obtain bearer token
    TOKEN=$(curl -s -X POST "https://app.scaleft.com/v1/teams/${TEAM_NAME}/service_token" \
        -H "Content-Type: application/json" \
        -d "{\"key_id\": \"${KEY_ID}\", \"key_secret\": \"${KEY_SECRET}\"}" \
        | python3 -c "import sys,json; print(json.load(sys.stdin)['bearer_token'])")
    
    # Test audit events access
    curl -s -H "Authorization: Bearer ${TOKEN}" \
        "https://app.scaleft.com/v1/teams/${TEAM_NAME}/auditsV2?count=5" \
        | python3 -m json.tool
    

成功したレスポンスは、最近の監査イベントの JSON 配列を返します。

Google Cloud Storage バケットを作成する

  1. Google Cloud コンソールに移動します。
  2. プロジェクトを選択するか、新しいプロジェクトを作成します。
  3. ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
  4. [バケットを作成] をクリックします。
  5. 次の構成情報を提供してください。

    設定 値
    バケットに名前を付ける グローバルに一意の名前(okta-asa-audit-logs など)を入力します。
    ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン)。
    ロケーション 場所を選択します(例: us-central1)。
    ストレージ クラス Standard(アクセス頻度の高いログにおすすめ)
    アクセス制御 均一(推奨)
    保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする
  6. [作成] をクリックします。

Cloud Run functions のサービス アカウントを作成する

  1. GCP コンソールで、[IAM と管理>サービス アカウント] に移動します。
  2. [サービス アカウントを作成] をクリックします。
  3. 次の構成情報を指定します。
    • サービス アカウント名: 「okta-asa-collector-sa」と入力します。
    • サービス アカウントの説明: Service account for Cloud Run function to collect Okta Advanced Server Access audit logs と入力します。
  4. [作成して続行] をクリックします。
  5. [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、次のロールを追加します。
    1. [ロールを選択] をクリックします。
    2. [ストレージ オブジェクト管理者] を検索して選択します。
    3. [+ 別のロールを追加] をクリックします。
    4. [Cloud Run 起動元] を検索して選択します。
    5. [+ 別のロールを追加] をクリックします。
    6. [Cloud Functions 起動元] を検索して選択します。
  6. [続行] をクリックします。
  7. [完了] をクリックします。

GCS バケットに対する IAM 権限を付与する

  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名(okta-asa-audit-logs)をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成情報を指定します。
    • プリンシパルを追加: サービス アカウントのメールアドレス(okta-asa-collector-sa@PROJECT_ID.iam.gserviceaccount.com)を入力します。
    • ロールを割り当てる: [Storage オブジェクト管理者] を選択します。
  6. [保存] をクリックします。

Pub/Sub トピックの作成

  1. GCP Console で、[Pub/Sub] > [トピック] に移動します。
  2. [トピックを作成] をクリックします。
  3. 次の構成情報を指定します。
    • トピック ID: 「okta-asa-audit-trigger」と入力します。
    • その他の設定はデフォルトのままにします。
  4. [作成] をクリックします。

ログを収集する Cloud Run 関数を作成する

Cloud Run 関数は、Cloud Scheduler からの Pub/Sub メッセージによってトリガーされ、Okta Advanced Server Access Audits API からログを取得して GCS に書き込みます。

  1. GCP Console で Cloud Run に移動します。
  2. [サービスを作成] をクリックします。
  3. [関数](インライン編集を使用して関数を作成する)を選択します。
  4. [構成] セクションで、次の構成の詳細を指定します。

    設定 値
    サービス名 okta-asa-collector
    リージョン GCS バケットと一致するリージョンを選択します(例: us-central1)。
    ランタイム [Python 3.12] 以降を選択します。
  5. [トリガー(省略可)] セクションで、次の操作を行います。

    1. [+ トリガーを追加] をクリックします。
    2. [Cloud Pub/Sub] を選択します。
    3. [Cloud Pub/Sub トピックを選択してください] で、okta-asa-audit-trigger を選択します。
    4. [保存] をクリックします。
  6. [認証] セクションで、次の操作を行います。

    1. [認証が必要] を選択します。
    2. Identity and Access Management(IAM)を確認します。
  7. 下にスクロールして、[コンテナ、ネットワーキング、セキュリティ] を開きます。

  8. [セキュリティ] タブに移動します。

    • サービス アカウント: okta-asa-collector-sa を選択します。
  9. [コンテナ] タブに移動します。

    1. [変数とシークレット] をクリックします。
    2. 環境変数ごとに [+ 変数を追加] をクリックします。
    変数名 値の例 説明
    GCS_BUCKET okta-asa-audit-logs GCS バケット名
    GCS_PREFIX okta-asa-audit ログファイルの接頭辞
    STATE_KEY okta-asa-audit/state.json 状態ファイルのパス
    ASA_TEAM_NAME your-team-name Advanced Server Access チーム名
    ASA_KEY_ID your-api-key-id サービス ユーザーの API キー ID
    ASA_KEY_SECRET your-api-key-secret サービスユーザーの API キー シークレット
    MAX_RECORDS 5000 実行あたりの最大レコード数
    PAGE_SIZE 1000 API ページあたりのレコード数(最大 1,000)
    LOOKBACK_HOURS 24 初期ルックバック期間
  10. [変数とシークレット] セクションで、[リクエスト] まで下にスクロールします。

    • リクエストのタイムアウト: 600 秒(10 分)を入力します。
  11. [設定] タブに移動します。

    • [リソース] セクションで次の操作を行います。
      • メモリ: 512 MiB 以上を選択します。
      • CPU: 1 を選択します。
  12. [リビジョン スケーリング] セクションで、次の操作を行います。

    • インスタンスの最小数: 0 と入力します。
    • [インスタンスの最大数] に「100」と入力します。
  13. [作成] をクリックします。

  14. サービスが作成されるまで待ちます(1 ~ 2 分)。

  15. サービスが作成されると、インライン コードエディタが自動的に開きます。

関数コードを追加する

  1. [エントリ ポイント] フィールドに「main」と入力します。
  2. インライン コードエディタで、次の 2 つのファイルを作成します。

    • main.py:

      import functions_framework
      from google.cloud import storage
      import json
      import os
      import urllib3
      from datetime import datetime, timezone, timedelta
      import time
      
      http = urllib3.PoolManager(
        timeout=urllib3.Timeout(connect=10.0, read=60.0),
        retries=False,
      )
      
      storage_client = storage.Client()
      
      GCS_BUCKET = os.environ.get('GCS_BUCKET')
      GCS_PREFIX = os.environ.get('GCS_PREFIX', 'okta-asa-audit')
      STATE_KEY = os.environ.get('STATE_KEY', 'okta-asa-audit/state.json')
      ASA_TEAM_NAME = os.environ.get('ASA_TEAM_NAME')
      ASA_KEY_ID = os.environ.get('ASA_KEY_ID')
      ASA_KEY_SECRET = os.environ.get('ASA_KEY_SECRET')
      MAX_RECORDS = int(os.environ.get('MAX_RECORDS', '5000'))
      PAGE_SIZE = int(os.environ.get('PAGE_SIZE', '1000'))
      LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '24'))
      
      ASA_API_BASE = 'https://app.scaleft.com'
      
      @functions_framework.cloud_event
      def main(cloud_event):
        if not all([GCS_BUCKET, ASA_TEAM_NAME, ASA_KEY_ID, ASA_KEY_SECRET]):
          print('Error: Missing required environment variables')
          return
      
        try:
          bucket = storage_client.bucket(GCS_BUCKET)
          state = load_state(bucket)
          now = datetime.now(timezone.utc)
      
          if isinstance(state, dict) and state.get('last_offset'):
            last_offset = state['last_offset']
          else:
            last_offset = None
      
          print(f"Starting audit log collection (last_offset={last_offset})")
      
          token = get_bearer_token()
      
          records, newest_offset = fetch_audit_events(
            token=token,
            last_offset=last_offset,
            page_size=PAGE_SIZE,
            max_records=MAX_RECORDS,
          )
      
          if not records:
            print("No new audit records found.")
            return
      
          timestamp = now.strftime('%Y%m%d_%H%M%S')
          object_key = f"{GCS_PREFIX}/okta_asa_audit_{timestamp}.ndjson"
          blob = bucket.blob(object_key)
      
          ndjson = '\n'.join(
            [json.dumps(record, ensure_ascii=False) for record in records]
          ) + '\n'
          blob.upload_from_string(ndjson, content_type='application/x-ndjson')
      
          print(f"Wrote {len(records)} records to gs://{GCS_BUCKET}/{object_key}")
      
          if newest_offset:
            save_state(bucket, newest_offset)
      
          print(f"Successfully processed {len(records)} records")
      
        except Exception as e:
          print(f'Error processing logs: {str(e)}')
          raise
      
      def get_bearer_token():
        url = f"{ASA_API_BASE}/v1/teams/{ASA_TEAM_NAME}/service_token"
        body = json.dumps({
          'key_id': ASA_KEY_ID,
          'key_secret': ASA_KEY_SECRET
        }).encode('utf-8')
      
        response = http.request(
          'POST', url,
          body=body,
          headers={'Content-Type': 'application/json'}
        )
      
        if response.status != 200:
          raise Exception(
            f"Service token request failed: {response.status} - "
            f"{response.data.decode('utf-8')}"
          )
      
        data = json.loads(response.data.decode('utf-8'))
        token = data.get('bearer_token')
        if not token:
          raise Exception("No bearer_token in service token response")
      
        print("Successfully obtained ASA bearer token")
        return token
      
      def fetch_audit_events(token, last_offset, page_size, max_records):
        endpoint = f"{ASA_API_BASE}/v1/teams/{ASA_TEAM_NAME}/auditsV2"
      
        headers = {
          'Authorization': f'Bearer {token}',
          'Accept': 'application/json',
        }
      
        records = []
        page_num = 0
        backoff = 1.0
        current_offset = last_offset
      
        while True:
          page_num += 1
      
          if len(records) >= max_records:
            print(f"Reached max_records limit ({max_records})")
            break
      
          params = [f"count={page_size}"]
          if current_offset:
            params.append(f"offset={current_offset}")
      
          url = f"{endpoint}?{'&'.join(params)}"
      
          try:
            response = http.request('GET', url, headers=headers)
      
            if response.status == 429:
              retry_after = int(response.headers.get('Retry-After', str(int(backoff))))
              print(f"Rate limited (429). Retrying after {retry_after}s...")
              time.sleep(retry_after)
              backoff = min(backoff * 2, 30.0)
              continue
      
            backoff = 1.0
      
            if response.status == 401:
              print("Token expired (401). Refreshing bearer token...")
              token = get_bearer_token()
              headers['Authorization'] = f'Bearer {token}'
              continue
      
            if response.status != 200:
              print(f"HTTP Error: {response.status}")
              response_text = response.data.decode('utf-8')
              print(f"Response body: {response_text}")
              return records, current_offset
      
            data = json.loads(response.data.decode('utf-8'))
      
            page_results = data.get('list', [])
      
            if not page_results:
              print(f"No more results (empty page)")
              break
      
            print(f"Page {page_num}: Retrieved {len(page_results)} events")
            records.extend(page_results)
      
            # Extract next offset from Link header for pagination
            link_header = response.headers.get('Link', '')
            next_offset = extract_next_offset(link_header)
      
            if next_offset:
              current_offset = next_offset
            else:
              print("No more pages (no next link)")
              break
      
          except Exception as e:
            print(f"Error fetching audit events: {e}")
            return records, current_offset
      
        print(f"Retrieved {len(records)} total records from {page_num} pages")
        return records, current_offset
      
      def extract_next_offset(link_header):
        if not link_header:
          return None
      
        parts = link_header.split(',')
        for part in parts:
          if 'rel="next"' in part:
            url_part = part.split(';')[0].strip().strip('<>')
            if 'offset=' in url_part:
              for param in url_part.split('?')[-1].split('&'):
                if param.startswith('offset='):
                  return param.split('=', 1)[1]
        return None
      
      def load_state(bucket):
        try:
          blob = bucket.blob(STATE_KEY)
          if blob.exists():
            return json.loads(blob.download_as_text())
        except Exception as e:
          print(f"Warning: Could not load state: {e}")
        return {}
      
      def save_state(bucket, last_offset):
        try:
          state = {
            'last_offset': last_offset,
            'last_run': datetime.now(timezone.utc).isoformat()
          }
          blob = bucket.blob(STATE_KEY)
          blob.upload_from_string(
            json.dumps(state, indent=2),
            content_type='application/json'
          )
          print(f"Saved state: last_offset={last_offset}")
        except Exception as e:
          print(f"Warning: Could not save state: {e}")
      
    • requirements.txt:

      functions-framework==3.*
      google-cloud-storage==2.*
      urllib3>=2.0.0
      
  3. [デプロイ] をクリックして関数を保存し、デプロイします。

  4. デプロイが完了するまで待ちます(2 ~ 3 分)。

Cloud Scheduler ジョブの作成

  1. GCP Console で、[Cloud Scheduler] に移動します。
  2. [ジョブを作成] をクリックします。
  3. 次の構成情報を提供してください。

    設定 値
    名前 okta-asa-collector-hourly
    リージョン Cloud Run functions の関数と同じリージョンを選択します。
    周波数 0 * * * *(1 時間ごと、毎正時)
    タイムゾーン タイムゾーンを選択(UTC を推奨)
    ターゲット タイプ Pub/Sub
    トピック okta-asa-audit-trigger を選択
    メッセージ本文 {}(空の JSON オブジェクト)
  4. [作成] をクリックします。

スケジュール頻度のオプション

ログの量とレイテンシの要件に基づいて頻度を選択します。

頻度 CRON 式 ユースケース
5 分おき */5 * * * * 大容量、低レイテンシ
15 分ごと */15 * * * * 検索量が普通
1 時間ごと 0 * * * * 標準(推奨)
6 時間ごと 0 */6 * * * 少量、バッチ処理
毎日 0 0 * * * 過去のデータの収集

統合をテストする

  1. Cloud Scheduler コンソールで、ジョブ(okta-asa-collector-hourly)を見つけます。
  2. [強制実行] をクリックして、ジョブを手動でトリガーします。
  3. 数秒待ちます。
  4. Cloud Run > [サービス] に移動します。
  5. okta-asa-collector をクリックします。
  6. [ログ] タブをクリックします。
  7. 関数が正常に実行されたことを確認します。以下のものを探します。

    Starting audit log collection (last_offset=None)
    Successfully obtained ASA bearer token
    Page 1: Retrieved X events
    Wrote X records to gs://okta-asa-audit-logs/okta-asa-audit/okta_asa_audit_YYYYMMDD_HHMMSS.ndjson
    Successfully processed X records
    
  8. [Cloud Storage] > [バケット] に移動します。

  9. okta-asa-audit-logs をクリックします。

  10. okta-asa-audit/ フォルダに移動します。

  11. 現在のタイムスタンプで新しい .ndjson ファイルが作成されたことを確認します。

ログにエラーが表示される場合:

  • HTTP 401: ASA_KEY_ID 環境変数と ASA_KEY_SECRET 環境変数が正しいことを確認する
  • HTTP 403: サービスユーザーに reporting_user ロールまたは access_admin ロールがあることを確認します。
  • HTTP 429: レート制限。関数は指数バックオフを使用して自動的に再試行します。
  • 環境変数がありません: 必要な変数がすべて Cloud Run functions の構成で設定されていることを確認します。

Google SecOps サービス アカウントを取得する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. [単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Okta ASA Audit Logs)。
  5. [ソースタイプ] として [Google Cloud Storage V2] を選択します。
  6. [ログタイプ] として [Okta Advanced Server Access] を選択します。
  7. [サービス アカウントを取得する] をクリックします。
  8. 一意のサービス アカウントのメールアドレスが表示されます。次に例を示します。

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. このメールアドレスをコピーして、次のステップで使用します。

  10. [次へ] をクリックします。

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

    • ストレージ バケットの URL: 接頭辞パスを含む GCS バケット URI を入力します。

      gs://okta-asa-audit-logs/okta-asa-audit/
      
    • Source deletion option: 必要に応じて削除オプションを選択します。

      • なし: 転送後にファイルを削除しません(テストにおすすめ)。
      • 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
      • 転送されたファイルと空のディレクトリを削除する: 転送が成功した後にファイルと空のディレクトリを削除します。

    • ファイルの最大経過日数: 過去の日数以内に変更されたファイルを含めます(デフォルトは 180 日)。

    • アセットの名前空間: アセットの名前空間

    • Ingestion labels: このフィードのイベントに適用されるラベル

  12. [次へ] をクリックします。

  13. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

Google SecOps サービス アカウントに IAM 権限を付与する

  1. [Cloud Storage] > [バケット] に移動します。
  2. okta-asa-audit-logs をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成情報を指定します。
    • プリンシパルを追加: Google SecOps サービス アカウントのメールアドレスを貼り付けます。
    • ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
  6. [保存] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
details.actor.details.email principal.user.email_addresses 値を直接コピーする
details.actor.details.first_name principal.user.first_name 値が直接コピーされる
details.actor.details.full_name principal.user.user_display_name 値を直接コピーする
details.actor.details.last_name principal.user.last_name 値が直接コピーされる
details.actor.details.user_type principal.user.attribute.roles 値を直接コピーする
details.actor.id principal.user.employee_id 値を直接コピーする
details.actor.name principal.user.userid details.actor.name が空でない場合はその値、それ以外の場合は details.unix_user_name
details.unix_user_name principal.user.userid
details.actor.status principal.user.attribute.labels キー「actor_status」のラベルとして統合
details.actor.team_name principal.user.department 値が直接コピーされる
details.actor.user_type principal.user.attribute.labels キー「actor_user_type」のラベルとして統合
details.client.description principal.application 値を直接コピーする
details.client.encrypted principal.asset.attribute.labels 文字列に変換され、キー「details_client_encrypted」のラベルとして統合されます。
details.client.hostname principal.hostname、principal.asset.hostname 値が直接コピーされる
details.client.id principal.user.product_object_id 値を直接コピーする
details.client.os principal.platform (?i)Win|win に一致する場合は WINDOWS、(?i)Lin|lin に一致する場合は LINUX、(?i)Mac|ios|mac に一致する場合は MAC、(?i)Android|android に一致する場合は ANDROID に設定します。
details.client.os principal.platform_version grok を使用して os 文字列から major.minor.patch を抽出
details.client.state principal.resource.attribute.labels キー「client_state」のラベルとして統合
details.client.user_name target.user.userid 値が直接コピーされる
details.client_ip principal.ip, principal.asset.ip Grok パターンを使用して抽出された IP
details.from_address principal.ip、principal.asset.ip grok パターンを使用して IP を抽出
details.project.create_server_users target.resource.attribute.labels 文字列に変換され、キー「project_create_server_users」を持つラベルとしてマージされます。
details.project.force_shared_ssh_users target.resource.attribute.labels 文字列に変換され、キー「project_force_shared_ssh_users」のラベルとして統合されます。
details.project.forward_traffic target.resource.attribute.labels 文字列に変換され、キー「project_forward_traffic」のラベルとして統合されます。
details.project.id target.resource.id 値を直接コピーする
details.project.name target.resource.name 値を直接コピーする
details.project.next_unix_gid target.resource.attribute.labels 文字列に変換され、キー「next_unix_gid」を持つラベルとしてマージされます。
details.project.next_unix_uid target.resource.attribute.labels 文字列に変換され、キー「next_unix_uid」のラベルとして統合されます。
details.project.rdp_session_recording target.resource.attribute.labels 文字列に変換され、キー「project_rdp_session_recording」のラベルとして統合されます。
details.project.require_preauth_for_creds target.resource.attribute.labels 文字列に変換され、キー「project_require_preauth_for_creds」を持つラベルとしてマージされます。
details.project.ssh_certificate_type target.resource.attribute.labels キー「project_ssh_certificate_type」のラベルとして統合
details.project.ssh_session_recording target.resource.attribute.labels 文字列に変換され、キー「project_ssh_session_recording」のラベルとして統合されます。
details.project.team target.resource.attribute.labels キー「project_team」のラベルとして統合
details.server.alt_names target.hostname、target.asset.hostname、target.resource.attribute.labels 最初の alt_name は target.hostname と target.asset.hostname に設定され、その他はキー「alt_name」を持つラベルとしてマージされます。
details.server.hostname intermediary_value.hostname 値が直接コピーされる
details.server.id intermediary_value.resource.attribute.labels キー「details_server_id」のラベルとして統合
details.server.os intermediary_value.platform_version 値を直接コピーする
details.server.os intermediary_value.resource.attribute.labels キー「details_server_os」のラベルとして統合
details.server.os_type intermediary_value.platform (?i)linux と一致する場合は LINUX、(?i)windows と一致する場合は WINDOWS、(?i)mac と一致する場合は MAC に設定します。
details.server.services intermediary_value.resource.attribute.labels キー「server_services {index}」のラベルとして統合されます。
details.server.source intermediary_value.resource.attribute.labels キー「server_source」のラベルとして統合
details.server.source_details.cloud_account intermediary_value.resource.attribute.labels キー「server_source_details_cloud_account」のラベルとして統合
details.server.source_details.cloud_provider intermediary_value.resource.attribute.labels キー「server_source_details_cloud_provider」のラベルとして統合されました
details.server.source_details.instance_id intermediary_value.resource.attribute.labels キー「server_source_details_instance_id」のラベルとして統合
details.server.state target.asset.attribute.labels 文字列に変換され、キー「server_state」のラベルとして統合されます。
details.server.team_name intermediary_value.user.department 値を直接コピーする
details.server_hostnames target.hostname、target.resource.attribute.labels 最初のホスト名は target.hostname に設定され、他のホスト名はキー「server_hostname {index}」のラベルとして統合されます
details.server_id target.resource.attribute.labels キー「details_server_id」のラベルとして統合
details.server_os target.platform_version 値が直接コピーされる
details.server_os_type target.platform (?i)linux と一致する場合は LINUX、(?i)windows と一致する場合は WINDOWS、(?i)mac と一致する場合は MAC に設定します。
details.server_state target.resource.attribute.labels キー「details_server_state」のラベルとして統合
details.session_type extensions.auth.auth_details 値を直接コピーする
details.session_type security_result.detection_fields キー「session_type」のラベルとして統合
details.servers intermediary 中間オブジェクトとして処理され、マージされる
details.ssh_algorithm network.tls.cipher 値を直接コピーする
details.ssh_key_fingerprint target.asset.attribute.labels キー「ssh_key_fingerprint」のラベルとして統合
details.ssh_public_key security_result.detection_fields キー「ssh_public_key」のラベルとして統合
details.target_server target.application 値が直接コピーされる
details.team_id principal.resource.id 値が直接コピーされる
details.team_id target.resource.id 値を直接コピーする
details.team_name additional.fields キー「team_name」のラベルとして統合
details.trace_id network.session_id 値を直接コピーする
details.type metadata.product_event_type 値を直接コピーする
details.username target.user.user_display_name 値が直接コピーされる
details.via network.session_id 値を直接コピーする
details_server intermediary_value intermediary_value オブジェクトとして処理、統合される
id additional.fields キー「id」のラベルとして統合
timestamp metadata.event_timestamp ISO8601 形式を使用して変換
extensions.auth.type extensions.auth.type metadata.event_type が USER_LOGIN の場合は「SSO」に設定します。
intermediary_value intermediary 空でない場合は intermediary_value から統合されます
has_principal_user metadata.event_type has_principal_user と has_target_user、または has_principal_user と has_target で details_type が login と一致する場合は USER_LOGIN に設定します。それ以外で has_principal_user の場合は USER_UNCATEGORIZED、has_principal の場合は STATUS_UPDATE に設定します。
has_target_user metadata.event_type
metadata.product_name metadata.product_name 「OKTA_SCALEFT」に設定します。
metadata.vendor_name metadata.vendor_name 「OKTA_SCALEFT」に設定
desc event.idm.read_only_udm.metadata.description 変更履歴からマッピング
asset_id event.idm.read_only_udm.target.asset.asset_id 変更履歴からマッピング
details.hostname event.idm.read_only_udm.principal.hostname と event.idm.read_only_udm.principal.asset.hostname 変更履歴からマッピング
details.actor event.idm.read_only_udm.principal.user.userid 変更履歴からマッピング
details.client event.idm.read_only_udm.principal.hostname と event.idm.read_only_udm.principal.asset.hostname 変更履歴からマッピング
details.username event.idm.read_only_udm.target.user.user_display_name 変更履歴からマッピング
details.server.server_accounts.username event.idm.read_only_udm.target.user.user_display_name 変更履歴からマッピング
details.project event.idm.read_only_udm.target.resource.attribute.cloud.project.name 変更履歴からマッピング
details.server.server_accounts event.idm.read_only_udm.target.asset.attribute.labels 変更履歴からマッピング
"id" event.idm.read_only_udm.additional.fields 変更履歴からマッピング
"details.from_address" event.idm.read_only_udm.principal.ip 変更履歴からマッピング
"details.client_ip" event.idm.read_only_udm.principal.ip 変更履歴からマッピング
"details.from_address" event.idm.read_only_udm.principal.asset.ip 変更履歴からマッピング
"details.client_ip" event.idm.read_only_udm.principal.asset.ip 変更履歴からマッピング
"details.type" event.idm.read_only_udm.metadata.product_event_type 変更履歴からマッピング
"details.actor.status" event.idm.read_only_udm.principal.user.attribute.labels 変更履歴からマッピング
"details.actor.user_type" event.idm.read_only_udm.principal.user.attribute.labels 変更履歴からマッピング
"details.session_type" event.idm.read_only_udm.extensions.auth.auth_details 変更履歴からマッピング
"details.actor.name" event.idm.read_only_udm.principal.user.userid 変更履歴からマッピング
"details.unix_user_name" event.idm.read_only_udm.principal.user.userid 変更履歴からマッピング
"details.actor.details.full_name" event.idm.read_only_udm.principal.user.user_display_name 変更履歴からマッピング
"details.actor.details.first_name" event.idm.read_only_udm.principal.user.first_name 変更履歴からマッピング
"details.actor.details.last_name" event.idm.read_only_udm.principal.user.last_name 変更履歴からマッピング
"details.actor.id" event.idm.read_only_udm.principal.user.employee_id 変更履歴からマッピング
"details.actor.team_name" event.idm.read_only_udm.principal.user.department 変更履歴からマッピング
"details.client.hostname" event.idm.read_only_udm.principal.hostname 変更履歴からマッピング
"details.client.hostname" event.idm.read_only_udm.principal.asset.hostname 変更履歴からマッピング
"details.client.id" event.idm.read_only_udm.principal.user.product_object_id 変更履歴からマッピング
"details.client.description" event.idm.read_only_udm.principal.application 変更履歴からマッピング
"details.client.os" event.idm.read_only_udm.principal.platform 変更履歴からマッピング
"details_client_os" event.idm.read_only_udm.principal.platform_version 変更履歴からマッピング
"details.actor.details.email" event.idm.read_only_udm.principal.user.email_addresses 変更履歴からマッピング
"details.team_id" event.idm.read_only_udm.target.resource.id 変更履歴からマッピング
"details.project.id" event.idm.read_only_udm.target.resource.id 変更履歴からマッピング
"details.team_name" event.idm.read_only_udm.additional.fields 変更履歴からマッピング
"details.client.state" event.idm.read_only_udm.principal.resource.attribute.labels 変更履歴からマッピング
"details.target_server" event.idm.read_only_udm.target.application 変更履歴からマッピング
"details.via" event.idm.read_only_udm.network.session_id 変更履歴からマッピング
"details.trace_id" event.idm.read_only_udm.network.session_id 変更履歴からマッピング
"details_session_type" event.idm.read_only_udm.security_result.detection_fields 変更履歴からマッピング
"details.ssh_public_key" event.idm.read_only_udm.security_result.detection_fields 変更履歴からマッピング
"details.actor.details.user_type" event.idm.read_only_udm.principal.user.attribute.roles 変更履歴からマッピング
"details.project.name" event.idm.read_only_udm.target.resource.name 変更履歴からマッピング
"details.server.id" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.server.state" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.team" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.create_server_users" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.force_shared_ssh_users" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.forward_traffic" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.next_unix_gid" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.next_unix_uid" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.rdp_session_recording" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.require_preauth_for_creds" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.ssh_certificate_type" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.project.ssh_session_recording" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"serverhostname" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"alt_name" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.ssh_key_fingerprint" event.idm.read_only_udm.target.resource.attribute.labels 変更履歴からマッピング
"details.server.os" event.idm.read_only_udm.target.platform_version 変更履歴からマッピング
"detailsserver.os" event.idm.read_only_udm.target.platform_version 変更履歴からマッピング
"details.server.os_type" event.idm.read_only_udm.target.platform 変更履歴からマッピング
"detailsserver.os_type" event.idm.read_only_udm.target.platform 変更履歴からマッピング
"details_team_id" event.idm.read_only_udm.principal.resource.id 変更履歴からマッピング
"details.client.encrypted" event.idm.read_only_udm.principal.asset.attribute.labels 変更履歴からマッピング
"details.client.user_name" event.idm.read_only_udm.target.user.userid 変更履歴からマッピング
"timestamp" event.idm.read_only_udm.metadata.event_timestamp 変更履歴からマッピング
"serverhostname" event.idm.read_only_udm.target.hostname 変更履歴からマッピング
"alt_name" event.idm.read_only_udm.target.hostname 変更履歴からマッピング
"alt_name" event.idm.read_only_udm.target.asset.hostname 変更履歴からマッピング
"intermediary" event.idm.read_only_udm.intermediary 変更履歴からマッピング
"intermediary_value" event.idm.read_only_udm.intermediary 変更履歴からマッピング
"detailsserver.sftd_version" event.idm.read_only_udm.metadata.product_version 変更履歴からマッピング
"details.server.sftd_version" event.idm.read_only_udm.metadata.product_version 変更履歴からマッピング
"detailsserver.state" event.idm.read_only_udm.target.asset.attribute.labels 変更履歴からマッピング
"detailsserver.managed" event.idm.read_only_udm.target.asset.attribute.labels 変更履歴からマッピング
"detailsserver.ssh_key_fingerprint" event.idm.read_only_udm.target.asset.attribute.labels 変更履歴からマッピング
"details.username" event.idm.read_only_udm.target.user.user_display_name 変更履歴からマッピング
"details.ssh_algorithm" event.idm.read_only_udm.network.tls.cipher 変更履歴からマッピング

変更ログ

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

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