Mengumpulkan log Citrix Analytics

Versi Parser: 1.0

Didukung di:

Dokumen ini menjelaskan cara menyerap log Citrix Analytics ke Google Security Operations menggunakan Google Cloud Storage. Citrix Analytics for Performance (Cloud Software Group) menyediakan data performa gabungan dari lingkungan Citrix Virtual Apps and Desktops, sehingga Anda dapat mengambil data sesi, mesin, dan pengguna melalui OData API. Citrix Analytics for Security memberikan insight risiko dan peristiwa sumber data yang dapat diekspor melalui integrasi SIEM berbasis Kafka.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps
  • Project GCP dengan Cloud Storage API yang diaktifkan
  • Izin untuk membuat dan mengelola bucket GCS
  • Izin untuk membuat layanan Cloud Run, topik Pub/Sub, dan tugas Cloud Scheduler
  • Akses istimewa ke tenant Citrix Analytics for Performance
  • Kredensial Citrix Cloud API (client ID, rahasia klien, ID pelanggan)

Mengumpulkan kredensial Citrix Analytics API

Mendapatkan kredensial Citrix Cloud API

  1. Login ke Konsol Cloud Citrix.
  2. Klik ikon menu di sudut kiri atas layar.
  3. Pilih Identity and Access Management dari menu.
  4. Pilih tab Akses API.
  5. Klik Create Client.
  6. Salin dan simpan detail berikut di lokasi yang aman:
    • Client ID
    • Rahasia Klien
    • ID Pelanggan (terletak di URL Citrix Cloud atau halaman IAM)

Menentukan URL dasar API

URL dasar OData API bergantung pada region Citrix Cloud Anda:

Wilayah URL Dasar API
Amerika Serikat https://api.cloud.com/casodata
Uni Eropa https://api.eu.cloud.com/casodata
Asia Pasifik Selatan https://api.ap-s.cloud.com/casodata

Memverifikasi izin

Untuk memverifikasi bahwa akun memiliki izin yang diperlukan:

  1. Login ke Citrix Cloud.
  2. Buka Identity and Access Management > Administrators.
  3. Pastikan akun yang digunakan untuk membuat kredensial API memiliki Full access atau Custom access dengan izin Citrix Analytics for Performance diaktifkan.
  4. Jika Anda tidak dapat melihat izin yang diperlukan, hubungi administrator Citrix Cloud Anda untuk memberikan akses.

Menguji akses API

  • Uji kredensial Anda sebelum melanjutkan integrasi:

    CITRIX_CUSTOMER_ID="your-customer-id"
    CITRIX_CLIENT_ID="your-client-id"
    CITRIX_CLIENT_SECRET="your-client-secret"
    
    # Get bearer token
    TOKEN=$(curl -s -X POST \
      "https://api.cloud.com/cctrustoauth2/${CITRIX_CUSTOMER_ID}/tokens/clients" \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -d "grant_type=client_credentials&client_id=${CITRIX_CLIENT_ID}&client_secret=${CITRIX_CLIENT_SECRET}" \
      | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
    
    # Test OData API access
    curl -v -H "Authorization: CwsAuth bearer=${TOKEN}" \
      -H "Citrix-CustomerId: ${CITRIX_CUSTOMER_ID}" \
      -H "Accept: application/json" \
      "https://api.cloud.com/casodata/sessions?\$top=1"
    

Membuat bucket Google Cloud Storage

  1. Buka Konsol Google Cloud.
  2. Pilih project Anda atau buat project baru.
  3. Di menu navigasi, buka Cloud Storage > Buckets.
  4. Klik Create bucket.
  5. Berikan detail konfigurasi berikut:

    Setelan Nilai
    Memberi nama bucket Anda Masukkan nama yang unik secara global (misalnya, citrix-analytics-logs)
    Location type Pilih sesuai kebutuhan Anda (Region, Dual-region, Multi-region)
    Location Pilih lokasi (misalnya, us-central1)
    Storage class Standard (direkomendasikan untuk log yang sering diakses)
    Kontrol akses Seragam (direkomendasikan)
    Alat perlindungan Opsional: Mengaktifkan pembuatan versi objek atau kebijakan retensi
  6. Klik Create.

Membuat akun layanan untuk fungsi Cloud Run

Fungsi Cloud Run memerlukan akun layanan dengan izin untuk menulis ke bucket GCS dan dipanggil oleh Pub/Sub.

Membuat akun layanan

  1. Di Konsol GCP, buka IAM & Admin > Service Accounts.
  2. Klik Create Service Account.
  3. Berikan detail konfigurasi berikut:
    • Service account name: Masukkan citrix-analytics-collector-sa
    • Service account description: Masukkan Service account for Cloud Run function to collect Citrix Analytics logs
  4. Klik Create and Continue.
  5. Di bagian Grant this service account access to project, tambahkan peran berikut:
    1. Klik Pilih peran.
    2. Telusuri dan pilih Storage Object Admin.
    3. Klik + Add another role.
    4. Telusuri dan pilih Cloud Run Invoker.
    5. Klik + Add another role.
    6. Telusuri dan pilih Cloud Functions Invoker.
  6. Klik Lanjutkan.
  7. Klik Done.

Peran ini diperlukan untuk:

  • Storage Object Admin: Menulis log ke bucket GCS dan mengelola state file
  • Cloud Run Invoker: Mengizinkan Pub/Sub memanggil fungsi
  • Cloud Functions Invoker: Mengizinkan pemanggilan fungsi

Memberikan izin IAM di bucket GCS

Beri akun layanan izin tulis di bucket GCS:

  1. Buka Cloud Storage > Buckets.
  2. Klik nama bucket Anda.
  3. Buka tab Izin.
  4. Klik Grant access.
  5. Berikan detail konfigurasi berikut:
    • Tambahkan entitas: Masukkan email akun layanan (misalnya, citrix-analytics-collector-sa@PROJECT_ID.iam.gserviceaccount.com)
    • Assign roles: Pilih Storage Object Admin
  6. Klik Simpan.

Membuat topik Pub/Sub

Buat topik Pub/Sub yang akan dipublikasikan oleh Cloud Scheduler dan di-subscribe oleh fungsi Cloud Run.

  1. Di Konsol GCP, buka Pub/Sub > Topics.
  2. Klik Create topic.
  3. Berikan detail konfigurasi berikut:
    • ID Topik: Masukkan citrix-analytics-trigger
    • Biarkan setelan lainnya sesuai default
  4. Klik Create.

Membuat fungsi Cloud Run untuk mengumpulkan log

Fungsi Cloud Run akan dipicu oleh pesan Pub/Sub dari Cloud Scheduler untuk mengambil log dari OData API Citrix Analytics dan menulisnya ke GCS.

  1. Di Konsol GCP, buka Cloud Run.
  2. Klik Create service.
  3. Pilih Function (gunakan editor inline untuk membuat fungsi).
  4. Di bagian Configure, berikan detail konfigurasi berikut:

    Setelan Nilai
    Nama layanan citrix-analytics-collector
    Region Pilih region yang cocok dengan bucket GCS Anda (misalnya, us-central1)
    Runtime Pilih Python 3.12 atau yang lebih baru
  5. Di bagian Trigger (optional):

    1. Klik + Tambahkan pemicu.
    2. Pilih Cloud Pub/Sub.
    3. Di Select a Cloud Pub/Sub topic, pilih topik citrix-analytics-trigger.
    4. Klik Simpan.
  6. Di bagian Authentication:

    1. Pilih Wajibkan autentikasi.
    2. Periksa Identity and Access Management (IAM).
  7. Scroll ke bawah dan luaskan Containers, Networking, Security.

  8. Buka tab Keamanan:

    • Service account: Pilih akun layanan citrix-analytics-collector-sa
  9. Buka tab Penampung:

    1. Klik Variables & Secrets.
    2. Klik + Add variable untuk setiap variabel lingkungan:
    Nama Variabel Nilai Contoh Deskripsi
    GCS_BUCKET citrix-analytics-logs Nama bucket GCS
    GCS_PREFIX citrix_analytics Awalan untuk file log
    STATE_KEY citrix_analytics/state.json Jalur file status
    CITRIX_CLIENT_ID your-client-id Client ID Citrix Cloud
    CITRIX_CLIENT_SECRET your-client-secret Rahasia Klien Citrix Cloud
    CITRIX_CUSTOMER_ID your-customer-id ID Pelanggan Citrix Cloud
    API_BASE https://api.cloud.com/casodata URL dasar OData API
    ENTITIES sessions,machines,users Jenis entitas yang akan dikumpulkan
    TOP_N 1000 Data per halaman
    LOOKBACK_MINUTES 75 Periode lihat balik awal
  10. Scroll ke bawah di bagian Variables & Secrets ke Requests:

    • Request timeout: Masukkan 600 detik (10 menit)
  11. Buka tab Setelan:

    • Di bagian Resources:
      • Memory: Pilih 512 MiB atau lebih tinggi
      • CPU: Pilih 1
  12. Di bagian Revision scaling:

    • Minimum number of instances: Masukkan 0
    • Maximum number of instances: Masukkan 100 (atau sesuaikan berdasarkan beban yang diharapkan)
  13. Klik Create.

  14. Tunggu hingga layanan dibuat (1-2 menit).

  15. Setelah layanan dibuat, editor kode inline akan terbuka secara otomatis.

Menambahkan kode fungsi

  1. Masukkan main di kolom Entry point.
  2. Di editor kode inline, buat dua file:

    • main.py:

      import functions_framework
      from google.cloud import storage
      import json
      import os
      import urllib3
      from datetime import datetime, timedelta, timezone
      import urllib.parse
      import time
      
      # Initialize HTTP client with timeouts
      http = urllib3.PoolManager(
          timeout=urllib3.Timeout(connect=5.0, read=30.0),
          retries=False,
      )
      
      # Initialize Storage client
      storage_client = storage.Client()
      
      CITRIX_TOKEN_URL_TMPL = "https://api.cloud.com/cctrustoauth2/{customerid}/tokens/clients"
      DEFAULT_API_BASE = "https://api.cloud.com/casodata"
      
      @functions_framework.cloud_event
      def main(cloud_event):
          """
          Cloud Run function triggered by Pub/Sub to fetch logs
          from Citrix Analytics OData API and write to GCS.
      
          Args:
              cloud_event: CloudEvent object containing Pub/Sub message
          """
      
          # Get environment variables
          bucket_name = os.environ.get('GCS_BUCKET')
          prefix = os.environ.get('GCS_PREFIX', 'citrix_analytics').strip('/')
          state_key = os.environ.get('STATE_KEY') or f"{prefix}/state.json"
          customer_id = os.environ.get('CITRIX_CUSTOMER_ID')
          client_id = os.environ.get('CITRIX_CLIENT_ID')
          client_secret = os.environ.get('CITRIX_CLIENT_SECRET')
          api_base = os.environ.get('API_BASE', DEFAULT_API_BASE)
          entities = [e.strip() for e in os.environ.get('ENTITIES', 'sessions,machines,users').split(',') if e.strip()]
          top_n = int(os.environ.get('TOP_N', '1000'))
          lookback_minutes = int(os.environ.get('LOOKBACK_MINUTES', '75'))
      
          if not all([bucket_name, customer_id, client_id, client_secret]):
              print('Error: Missing required environment variables')
              return
      
          try:
              # Get GCS bucket
              bucket = storage_client.bucket(bucket_name)
      
              # Determine target hour to collect
              now = datetime.now(timezone.utc)
              fallback_target = (now - timedelta(minutes=lookback_minutes)).replace(minute=0, second=0, microsecond=0)
      
              # Load state (last processed timestamp)
              state = load_state(bucket, state_key)
              last_processed_str = state.get('last_hour_utc')
      
              if last_processed_str:
                  last_processed = datetime.fromisoformat(last_processed_str.replace('Z', '+00:00')).replace(tzinfo=None)
                  target_hour = last_processed + timedelta(hours=1)
              else:
                  target_hour = fallback_target
      
              print(f'Processing logs for hour: {target_hour.isoformat()}Z')
      
              # Get authentication token
              token = get_citrix_token(customer_id, client_id, client_secret)
              headers = {
                  'Authorization': f'CwsAuth bearer={token}',
                  'Citrix-CustomerId': customer_id,
                  'Accept': 'application/json',
                  'Content-Type': 'application/json',
              }
      
              total_records = 0
      
              # Process each entity type
              for entity in entities:
                  records = []
                  for row in fetch_odata_entity(entity, target_hour, top_n, headers, api_base):
                      enriched_record = {
                          'citrix_entity': entity,
                          'citrix_hour_utc': target_hour.isoformat() + 'Z',
                          'collection_timestamp': datetime.now(timezone.utc).isoformat() + 'Z',
                          'raw': row
                      }
                      records.append(enriched_record)
      
                      # Write in batches to avoid memory issues
                      if len(records) >= 1000:
                          blob_name = f"{prefix}/{entity}/year={target_hour.year:04d}/month={target_hour.month:02d}/day={target_hour.day:02d}/hour={target_hour.hour:02d}/part-{datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S%f')}.ndjson"
                          write_ndjson_to_gcs(bucket, blob_name, records)
                          total_records += len(records)
                          records = []
      
                  # Write remaining records
                  if records:
                      blob_name = f"{prefix}/{entity}/year={target_hour.year:04d}/month={target_hour.month:02d}/day={target_hour.day:02d}/hour={target_hour.hour:02d}/part-{datetime.now(timezone.utc).strftime('%Y%m%d%H%M%S%f')}.ndjson"
                      write_ndjson_to_gcs(bucket, blob_name, records)
                      total_records += len(records)
      
              # Update state file
              save_state(bucket, state_key, {'last_hour_utc': target_hour.isoformat() + 'Z'})
      
              print(f'Successfully processed {total_records} records for hour {target_hour.isoformat()}Z')
      
          except Exception as e:
              print(f'Error processing logs: {str(e)}')
              raise
      
      def get_citrix_token(customer_id, client_id, client_secret):
          """Get Citrix Cloud authentication token."""
          url = CITRIX_TOKEN_URL_TMPL.format(customerid=customer_id)
          payload = {
              'grant_type': 'client_credentials',
              'client_id': client_id,
              'client_secret': client_secret,
          }
          data = urllib.parse.urlencode(payload).encode('utf-8')
      
          response = http.request(
              'POST',
              url,
              body=data,
              headers={
                  'Accept': 'application/json',
                  'Content-Type': 'application/x-www-form-urlencoded',
              }
          )
      
          if response.status != 200:
              print(f'Token request failed with status {response.status}')
              print(f'Response: {response.data.decode("utf-8")}')
              raise Exception(f'Failed to get Citrix token: HTTP {response.status}')
      
          token_response = json.loads(response.data.decode('utf-8'))
          return token_response['access_token']
      
      def fetch_odata_entity(entity, when_utc, top, headers, api_base):
          """Fetch data from Citrix Analytics OData API with pagination and rate limiting."""
          year = when_utc.year
          month = when_utc.month
          day = when_utc.day
          hour = when_utc.hour
      
          base_url = f"{api_base.rstrip('/')}/{entity}?year={year:04d}&month={month:02d}&day={day:02d}&hour={hour:02d}"
          skip = 0
          backoff = 1.0
      
          while True:
              url = f"{base_url}&$top={top}&$skip={skip}"
      
              response = http.request('GET', url, headers=headers)
      
              # Handle rate limiting with exponential backoff
              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 != 200:
                  print(f'HTTP Error: {response.status}')
                  response_text = response.data.decode('utf-8')
                  print(f'Response body: {response_text}')
                  return
      
              data = json.loads(response.data.decode('utf-8'))
              items = data.get('value', [])
      
              if not items:
                  break
      
              for item in items:
                  yield item
      
              if len(items) < top:
                  break
      
              skip += top
      
      def load_state(bucket, key):
          """Load state from GCS."""
          try:
              blob = bucket.blob(key)
              if blob.exists():
                  state_data = blob.download_as_text()
                  return json.loads(state_data)
          except Exception as e:
              print(f'Warning: Could not load state: {str(e)}')
          return {}
      
      def save_state(bucket, key, state):
          """Save state to GCS."""
          try:
              blob = bucket.blob(key)
              blob.upload_from_string(
                  json.dumps(state, separators=(',', ':')),
                  content_type='application/json'
              )
          except Exception as e:
              print(f'Warning: Could not save state: {str(e)}')
      
      def write_ndjson_to_gcs(bucket, key, records):
          """Write records as NDJSON to GCS."""
          body_lines = []
          for record in records:
              json_line = json.dumps(record, separators=(',', ':'), ensure_ascii=False)
              body_lines.append(json_line)
      
          body = ('\n'.join(body_lines) + '\n').encode('utf-8')
      
          blob = bucket.blob(key)
          blob.upload_from_string(body, content_type='application/x-ndjson')
      
    • requirements.txt:

      functions-framework==3.*
      google-cloud-storage==2.*
      urllib3>=2.0.0
      
  3. Klik Deploy untuk menyimpan dan men-deploy fungsi.

  4. Tunggu hingga deployment selesai (2-3 menit).

Buat tugas Cloud Scheduler

Cloud Scheduler akan memublikasikan pesan ke topik Pub/Sub secara berkala, sehingga memicu fungsi Cloud Run.

  1. Di Konsol GCP, buka Cloud Scheduler.
  2. Klik Create Job.
  3. Berikan detail konfigurasi berikut:

    Setelan Nilai
    Nama citrix-analytics-collector-hourly
    Region Pilih region yang sama dengan fungsi Cloud Run
    Frekuensi 0 * * * * (setiap jam, tepat pada jamnya)
    Zona Waktu Pilih zona waktu (UTC direkomendasikan)
    Jenis target Pub/Sub
    Topik Pilih topik citrix-analytics-trigger
    Isi pesan {} (objek JSON kosong)
  4. Klik Create.

Opsi frekuensi jadwal

Pilih frekuensi berdasarkan volume log dan persyaratan latensi:

Frekuensi Ekspresi Cron Kasus Penggunaan
Setiap jam 0 * * * * Standar (direkomendasikan)
Setiap 2 jam 0 */2 * * * Menurunkan volume
Setiap 6 jam 0 */6 * * * Volume rendah, pemrosesan batch

Menguji integrasi

  1. Di konsol Cloud Scheduler, temukan tugas Anda.
  2. Klik Force run untuk memicu tugas secara manual.
  3. Tunggu beberapa detik.
  4. Buka Cloud Run > Services.
  5. Klik nama fungsi citrix-analytics-collector.
  6. Klik tab Logs.
  7. Pastikan fungsi berhasil dieksekusi. Cari:

    Processing logs for hour: YYYY-MM-DDTHH:00:00Z
    Successfully processed X records for hour YYYY-MM-DDTHH:00:00Z
    
  8. Buka Cloud Storage > Buckets.

  9. Klik nama bucket Anda.

  10. Buka folder awalan citrix_analytics/.

  11. Pastikan file .ndjson baru telah dibuat dengan stempel waktu saat ini.

Jika Anda melihat error di log:

  • HTTP 401: Periksa kredensial API di variabel lingkungan
  • HTTP 403: Verifikasi bahwa akun memiliki izin yang diperlukan di Citrix Cloud
  • HTTP 429: Pembatasan kapasitas - fungsi akan otomatis mencoba lagi dengan backoff
  • Variabel lingkungan tidak ada: Pastikan semua variabel yang diperlukan telah ditetapkan

Mengonfigurasi feed di Google SecOps untuk menyerap log Citrix Analytics

  1. Buka Setelan > Pengelolaan Data > Feed. Jika Anda menggunakan platform khusus SIEM, buka Settings > Feeds.
  2. Klik Tambahkan Feed Berita Baru.
  3. Klik Konfigurasi satu feed.
  4. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Citrix Analytics logs).
  5. Pilih Google Cloud Storage V2 sebagai Source type.
  6. Pilih Citrix Analytics sebagai Log type.
  7. Klik Get Service Account. Email akun layanan yang unik akan ditampilkan, misalnya:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Salin alamat email ini untuk digunakan di langkah berikutnya.

  9. Klik Berikutnya.

  10. Tentukan nilai untuk parameter input berikut:

    • Storage bucket URL: Masukkan URI bucket GCS dengan jalur awalan:

      gs://citrix-analytics-logs/citrix_analytics/
      
      • Ganti:
        • citrix-analytics-logs: Nama bucket GCS Anda.
        • citrix_analytics: Jalur awalan/folder opsional tempat log disimpan (biarkan kosong untuk root).
    • Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda:

      • Never: Tidak pernah menghapus file apa pun setelah transfer (direkomendasikan untuk pengujian).
      • Delete transferred files: Menghapus file setelah transfer berhasil.
      • Delete transferred files and empty directories: Menghapus file dan direktori kosong setelah transfer berhasil.
    • Usia File Maksimum: Sertakan file yang diubah dalam jumlah hari terakhir (defaultnya adalah 180 hari)

    • Namespace aset: Namespace aset

    • Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini

  11. Klik Berikutnya.

  12. Tinjau konfigurasi feed berita baru Anda di layar Finalize, lalu klik Submit.

Memberikan izin IAM ke akun layanan Google SecOps

Akun layanan Google SecOps memerlukan peran Storage Object Viewer di bucket GCS Anda.

  1. Buka Cloud Storage > Buckets.
  2. Klik nama bucket Anda.
  3. Buka tab Izin.
  4. Klik Grant access.
  5. Berikan detail konfigurasi berikut:
    • Add principals: Tempel email akun layanan Google SecOps
    • Assign roles: Pilih Storage Object Viewer
  6. Klik Simpan.

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
occurrence_event_type extensions.auth.type Dipetakan: Session.Logon → AUTHTYPE_UNSPECIFIED, Session.End → AUTHTYPE_UNSPECIFIED
server_name intermediary.asset.hostname Dipetakan secara langsung
server_name intermediary.hostname Dipetakan secara langsung
event_type metadata.description Dipetakan secara langsung
timestamp metadata.event_timestamp Diurai sebagai ISO8601
udm_event_type metadata.event_type Dipetakan: "USER_LOGIN", "USER_LOGOUT" → GENERIC_EVENT
tenant_id metadata.product_deployment_id Dipetakan secara langsung
occurrence_event_type metadata.product_event_type Dipetakan secara langsung
event_id metadata.product_log_id Dipetakan secara langsung
product metadata.product_name Dipetakan secara langsung
product_version metadata.product_version Dipetakan secara langsung
ui_link metadata.url_back_to_product Dipetakan secara langsung
session_key network.session_id Dipetakan secara langsung
domain principal.administrative_domain Dipetakan secara langsung
device_id principal.asset.hostname Dipetakan secara langsung
client_ip principal.asset.ip Digabung
vulnerability principal.asset.vulnerabilities Digabung
device_id principal.hostname Dipetakan secara langsung
client_ip principal.ip Digabung
os_name principal.platform Nilai yang dipetakan (total 6, misalnya (?i)windows → WINDOWS, (?i)windows → MAC, (?i)windows...
os_extra_info principal.platform_patch_level Dipetakan secara langsung
os_version principal.platform_version Dipetakan secara langsung
entity_id principal.user.email_addresses Dipetakan: ^.+@.+$ → entity_id
entity_type principal.user.email_addresses Dipetakan: user → entity_id
session_user_name principal.user.user_display_name Dipetakan secara langsung
entity_id principal.user.userid Dipetakan secara langsung
session_user_name principal.user.userid Dipetakan secara langsung
alert_message security_result.action_details Dipetakan secara langsung
analytic security_result.analytics_metadata Digabung
category security_result.category Digabung
indicator_category security_result.category Dipetakan: Data exfiltration → category
indicator_name security_result.description Dipetakan secara langsung
label security_result.detection_fields Digabung
label security_result.outcomes Digabung
severity security_result.severity Dipetakan secara langsung
app_name target.application Dipetakan secara langsung
app_name target.process.file.names Digabung
printer_name target.resource.name Dipetakan secara langsung
entity_id target.user.email_addresses Dipetakan: ^.+@.+$ → entity_id
entity_type target.user.email_addresses Dipetakan: user → entity_id
session_user_name target.user.user_display_name Dipetakan secara langsung
entity_id target.user.userid Dipetakan secara langsung
session_user_name target.user.userid Dipetakan secara langsung
T/A extensions.auth.type Konstanta: AUTHTYPE_UNSPECIFIED
T/A metadata.event_type Konstanta: GENERIC_EVENT
T/A metadata.vendor_name Konstanta: CITRIX_ANALYTICS
T/A principal.platform Konstanta: WINDOWS
T/A security_result.confidence_score Konstanta: risk_probability
T/A security_result.risk_score Konstanta: cur_riskscore

Log Perubahan

Melihat Log Perubahan untuk parser ini

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.