Mengumpulkan log Citrix Analytics

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 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, Client Secret, Customer ID)

Mengumpulkan kredensial Citrix Analytics API

Mendapatkan kredensial Citrix Cloud API

  1. Login ke Citrix Cloud Console.
  2. Klik ikon menu di sudut kiri atas layar.
  3. Pilih Identity and Access Management dari menu.
  4. Pilih tab Akses API.
  5. Klik Buat Klien.
  6. Salin dan simpan detail berikut di lokasi yang aman:
    • Client ID
    • Rahasia Klien
    • ID Pelanggan (terdapat 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

Verifikasi 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 Akses penuh atau Akses kustom 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
    Beri nama bucket Anda Masukkan nama yang unik secara global (misalnya, citrix-analytics-logs)
    Location type Pilih berdasarkan kebutuhan Anda (Region, Dual-region, Multi-region)
    Location Pilih lokasi (misalnya, us-central1)
    Kelas penyimpanan Standar (direkomendasikan untuk log yang sering diakses)
    Access control Seragam (direkomendasikan)
    Alat perlindungan Opsional: Aktifkan pembuatan versi objek atau kebijakan retensi
  6. Klik Create.

Buat akun layanan untuk Cloud Run Function

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

Membuat akun layanan

  1. Di GCP Console, buka IAM & Admin > Service Accounts.
  2. Klik Create Service Account.
  3. Berikan detail konfigurasi berikut:
    • Nama akun layanan: Masukkan citrix-analytics-collector-sa
    • Deskripsi akun layanan: Masukkan Service account for Cloud Run function to collect Citrix Analytics logs
  4. Klik Create and Continue.
  5. Di bagian Berikan akun layanan ini akses ke 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 file status
  • Cloud Run Invoker: Mengizinkan Pub/Sub memanggil fungsi
  • Cloud Functions Invoker: Mengizinkan pemanggilan fungsi

Memberikan izin IAM pada 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 prinsipal: Masukkan email akun layanan (misalnya, citrix-analytics-collector-sa@PROJECT_ID.iam.gserviceaccount.com)
    • Tetapkan peran: Pilih Storage Object Admin
  6. Klik Simpan.

Membuat topik Pub/Sub

Buat topik Pub/Sub yang akan dipublikasikan oleh Cloud Scheduler dan akan dilanggan 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 menggunakan setelan 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 Citrix Analytics OData API dan menuliskannya ke GCS.

  1. Di GCP Console, buka Cloud Run.
  2. Klik Create service.
  3. Pilih Function (gunakan editor inline untuk membuat fungsi).
  4. Di bagian Konfigurasi, 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 Pemicu (opsional):

    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 Security:

    • Akun layanan: Pilih akun layanan citrix-analytics-collector-sa
  9. Buka tab Containers:

    1. Klik Variables & Secrets.
    2. Klik + Tambahkan variabel 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 ID Klien 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 Catatan per halaman
    LOOKBACK_MINUTES 75 Periode lihat balik awal
  10. Scroll ke bawah di bagian Variabel & Secret ke Permintaan:

    • Waktu tunggu permintaan: Masukkan 600 detik (10 menit)
  11. Buka tab Setelan:

    • Di bagian Materi:
      • Memori: Pilih 512 MiB atau yang lebih tinggi
      • CPU: Pilih 1
  12. Di bagian Penskalaan revisi:

    • Jumlah minimum instance: Masukkan 0
    • Maximum number of instances: Masukkan 100 (atau sesuaikan berdasarkan perkiraan beban)
  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 GCP Console, 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 waktunya)
    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 dibuat dengan stempel waktu saat ini.

Jika Anda melihat error dalam log:

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

Mengonfigurasi feed di Google SecOps untuk memproses log Citrix Analytics

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed 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 Jenis log.
  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:

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

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

      • Jangan pernah: Tidak pernah menghapus file apa pun setelah transfer (direkomendasikan untuk pengujian).
      • Hapus file yang ditransfer: Menghapus file setelah transfer berhasil.
      • Hapus file yang ditransfer dan direktori kosong: Menghapus file dan direktori kosong setelah transfer berhasil.
    • Usia File Maksimum: Menyertakan file yang diubah dalam beberapa 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 baru Anda di layar Selesaikan, lalu klik Kirim.

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
    • Tetapkan peran: Pilih Storage Object Viewer
  6. Klik Simpan.

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
occurrence_event_type extensions.auth.type Dipetakan: Session.LogonAUTHTYPE_UNSPECIFIED, Session.EndAUTHTYPE_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)windowsWINDOWS, (?i)windowsMAC, (?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: userentity_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 exfiltrationcategory
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: userentity_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

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