Mengumpulkan log IAM SailPoint

Didukung di:

Dokumen ini menjelaskan cara menyerap log SailPoint IAM ke Google Security Operations menggunakan Google Cloud Storage. SailPoint Identity Security Cloud menyediakan kemampuan tata kelola dan administrasi identitas untuk mengelola akses pengguna, kepatuhan, dan keamanan di seluruh aplikasi perusahaan.

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 mengelola kebijakan IAM di bucket GCS
  • Izin untuk membuat layanan Cloud Run, topik Pub/Sub, dan tugas Cloud Scheduler
  • Akses istimewa ke tenant atau API SailPoint Identity Security Cloud

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, sailpoint-iam-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.

Mengumpulkan kredensial SailPoint Identity Security Cloud API

  1. Login ke Konsol Admin SailPoint Identity Security Cloud sebagai administrator.
  2. Buka Admin > Global > Security Settings > Pengelolaan API.
  3. Klik Buat Klien API.
  4. Pilih Client Credentials sebagai jenis pemberian.
  5. Berikan detail konfigurasi berikut:
    • Name: Masukkan nama deskriptif (misalnya, Chronicle Export API).
    • Description: Masukkan deskripsi untuk klien API.
    • Cakupan: Pilih sp:scopes:all (atau cakupan baca yang sesuai untuk peristiwa audit).
  6. Klik Create dan salin kredensial API yang dihasilkan dengan aman.
  7. Catat URL dasar tenant SailPoint Anda (misalnya, https://tenant.api.identitynow.com).
  8. Salin dan simpan detail berikut di lokasi yang aman:

    • IDN_CLIENT_ID
    • IDN_CLIENT_SECRET
    • IDN_BASE

Menguji akses API

  • Uji kredensial Anda sebelum melanjutkan integrasi:

    # Replace with your actual credentials
    IDN_CLIENT_ID="your-client-id"
    IDN_CLIENT_SECRET="your-client-secret"
    IDN_BASE="https://tenant.api.identitynow.com"
    
    # Get OAuth token
    TOKEN=$(curl -s -X POST "${IDN_BASE}/oauth/token" \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -d "grant_type=client_credentials&client_id=${IDN_CLIENT_ID}&client_secret=${IDN_CLIENT_SECRET}&scope=sp:scopes:all" | jq -r '.access_token')
    
    # Test API access
    curl -v -H "Authorization: Bearer ${TOKEN}" "${IDN_BASE}/v3/search" \
      -H "Content-Type: application/json" \
      -d '{"indices":["events"],"query":{"query":"*"},"limit":1}'
    

Membuat akun layanan untuk fungsi Cloud Run

Fungsi Cloud Run memerlukan akun layanan dengan izin untuk menulis ke bucket GCS.

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 sailpoint-iam-collector-sa.
    • Service account description: Masukkan Service account for Cloud Run function to collect SailPoint IAM logs.
  4. Klik Create and Continue.
  5. Di bagian Grant this service account access to project:
    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.
    • 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 sailpoint-iam-trigger.
    • Biarkan setelan lainnya sesuai default.
  4. Klik Create.

Membuat fungsi Cloud Run untuk mengumpulkan log

Fungsi Cloud Run dipicu oleh pesan Pub/Sub dari Cloud Scheduler untuk mengambil log dari SailPoint Identity Security Cloud API 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 sailpoint-iam-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 Pub/Sub (sailpoint-iam-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 (sailpoint-iam-collector-sa).
  9. Buka tab Penampung:

    1. Klik Variables & Secrets.
    2. Klik + Add variable untuk setiap variabel lingkungan:
    Nama Variabel Nilai Contoh
    GCS_BUCKET sailpoint-iam-logs
    GCS_PREFIX sailpoint/iam/
    STATE_KEY sailpoint/iam/state.json
    WINDOW_SECONDS 3600
    HTTP_TIMEOUT 60
    MAX_RETRIES 3
    USER_AGENT sailpoint-iam-to-gcs/1.0
    IDN_BASE https://tenant.api.identitynow.com
    IDN_CLIENT_ID your-client-id
    IDN_CLIENT_SECRET your-client-secret
    IDN_SCOPE sp:scopes:all
    PAGE_SIZE 250
    MAX_PAGES 20
  10. Scroll ke bawah di tab Variables & Secrets ke Requests:

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

    • Di bagian Resources:
      • Memory: Pilih 512 MiB atau lebih tinggi.
      • CPU: Pilih 1.
    • Klik Done.
  12. Scroll ke bawah ke Execution environment:

    • Pilih Default (direkomendasikan).
  13. Di bagian Revision scaling:

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

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

  16. Setelah layanan dibuat, editor kode inline akan otomatis terbuka.

Menambahkan kode fungsi

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

    • File pertama: main.py:
     import functions_framework
     from google.cloud import storage
     import json
     import os
     import urllib3
     from datetime import datetime, timezone
     import time
     import uuid
    
     # Initialize HTTP client
     http = urllib3.PoolManager()
    
     # Initialize Storage client
     storage_client = storage.Client()
    
     # Get environment variables
     GCS_BUCKET = os.environ.get('GCS_BUCKET')
     GCS_PREFIX = os.environ.get('GCS_PREFIX', 'sailpoint/iam/')
     STATE_KEY = os.environ.get('STATE_KEY', 'sailpoint/iam/state.json')
     WINDOW_SEC = int(os.environ.get('WINDOW_SECONDS', '3600'))
     HTTP_TIMEOUT = int(os.environ.get('HTTP_TIMEOUT', '60'))
     IDN_BASE = os.environ.get('IDN_BASE')
     CLIENT_ID = os.environ.get('IDN_CLIENT_ID')
     CLIENT_SECRET = os.environ.get('IDN_CLIENT_SECRET')
     SCOPE = os.environ.get('IDN_SCOPE', 'sp:scopes:all')
     PAGE_SIZE = int(os.environ.get('PAGE_SIZE', '250'))
     MAX_PAGES = int(os.environ.get('MAX_PAGES', '20'))
     MAX_RETRIES = int(os.environ.get('MAX_RETRIES', '3'))
     USER_AGENT = os.environ.get('USER_AGENT', 'sailpoint-iam-to-gcs/1.0')
    
     def _load_state(bucket):
         """Load state from GCS."""
         try:
             blob = bucket.blob(STATE_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, st):
         """Save state to GCS."""
         try:
             blob = bucket.blob(STATE_KEY)
             blob.upload_from_string(
                 json.dumps(st, separators=(',', ':')),
                 content_type='application/json'
             )
         except Exception as e:
             print(f'Warning: Could not save state: {str(e)}')
    
     def _iso(ts):
         """Convert timestamp to ISO format."""
         return time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(ts))
    
     def _get_oauth_token():
         """Get OAuth2 access token using Client Credentials flow."""
         token_url = f"{IDN_BASE.rstrip('/')}/oauth/token"
    
         fields = {
             'grant_type': 'client_credentials',
             'client_id': CLIENT_ID,
             'client_secret': CLIENT_SECRET,
             'scope': SCOPE
         }
    
         headers = {
             'Content-Type': 'application/x-www-form-urlencoded',
             'User-Agent': USER_AGENT
         }
    
         response = http.request(
             'POST',
             token_url,
             fields=fields,
             headers=headers,
             timeout=HTTP_TIMEOUT
         )
    
         token_data = json.loads(response.data.decode('utf-8'))
         return token_data['access_token']
    
     def _search_events(access_token, created_from, search_after=None):
         """Search for audit events using SailPoint's /v3/search API.
    
         IMPORTANT: SailPoint requires colons in ISO8601 timestamps to be escaped with backslashes.
         Example: 2024-01-15T10:30:00Z must be sent as 2024-01-15T10\\:30\\:00Z
    
         For more information, see:
         - https://developer.sailpoint.com/docs/api/standard-collection-parameters/
         - https://developer.sailpoint.com/docs/api/v3/search-post/
         """
         search_url = f"{IDN_BASE.rstrip('/')}/v3/search"
    
         # Escape colons in timestamp for SailPoint search query
         escaped_timestamp = created_from.replace(':', '\\:')
         query_str = f'created:>={escaped_timestamp}'
    
         payload = {
             'indices': ['events'],
             'query': {
                 'query': query_str
             },
             'sort': ['created', '+id'],
             'limit': PAGE_SIZE
         }
    
         if search_after:
             payload['searchAfter'] = search_after
    
         attempt = 0
         while True:
             headers = {
                 'Content-Type': 'application/json',
                 'Accept': 'application/json',
                 'Authorization': f'Bearer {access_token}',
                 'User-Agent': USER_AGENT
             }
    
             try:
                 response = http.request(
                     'POST',
                     search_url,
                     body=json.dumps(payload).encode('utf-8'),
                     headers=headers,
                     timeout=HTTP_TIMEOUT
                 )
    
                 response_data = json.loads(response.data.decode('utf-8'))
    
                 # Handle different response formats
                 if isinstance(response_data, list):
                     return response_data
                 return response_data.get('results', response_data.get('data', []))
    
             except Exception as e:
                 attempt += 1
                 print(f'HTTP error on attempt {attempt}: {e}')
                 if attempt > MAX_RETRIES:
                     raise
                 # Exponential backoff with jitter
                 time.sleep(min(60, 2 ** attempt) + (time.time() % 1))
    
     def _put_events_data(bucket, events, from_ts, to_ts, page_num):
         """Write events to GCS in JSONL format (one JSON object per line)."""
         # Create unique GCS key for events data
         ts_path = time.strftime('%Y/%m/%d', time.gmtime(to_ts))
         uniq = f"{int(time.time() * 1e6)}_{uuid.uuid4().hex[:8]}"
         key = f"{GCS_PREFIX}{ts_path}/sailpoint_iam_{int(from_ts)}_{int(to_ts)}_p{page_num:03d}_{uniq}.jsonl"
    
         # Convert events list to JSONL format (one JSON object per line)
         jsonl_lines = [json.dumps(event, separators=(',', ':')) for event in events]
         jsonl_content = '\n'.join(jsonl_lines)
    
         blob = bucket.blob(key)
         blob.metadata = {
             'source': 'sailpoint-iam',
             'from_timestamp': str(int(from_ts)),
             'to_timestamp': str(int(to_ts)),
             'page_number': str(page_num),
             'events_count': str(len(events)),
             'format': 'jsonl'
         }
         blob.upload_from_string(
             jsonl_content,
             content_type='application/x-ndjson'
         )
    
         return key
    
     def _get_item_id(item):
         """Extract ID from event item, trying multiple possible fields."""
         for field in ('id', 'uuid', 'eventId', '_id'):
             if field in item and item[field]:
                 return str(item[field])
         return ''
    
     @functions_framework.cloud_event
     def main(cloud_event):
         """
         Cloud Run function triggered by Pub/Sub to fetch SailPoint IAM logs and write to GCS.
    
         Args:
             cloud_event: CloudEvent object containing Pub/Sub message
         """
    
         if not all([GCS_BUCKET, IDN_BASE, CLIENT_ID, CLIENT_SECRET]):
             print('Error: Missing required environment variables')
             return
    
         try:
             bucket = storage_client.bucket(GCS_BUCKET)
    
             st = _load_state(bucket)
             now = time.time()
             from_ts = float(st.get('last_to_ts') or (now - WINDOW_SEC))
             to_ts = now
    
             # Get OAuth token
             access_token = _get_oauth_token()
    
             created_from = _iso(from_ts)
             print(f'Fetching SailPoint IAM events from: {created_from}')
    
             # Handle pagination state
             last_created = st.get('last_created')
             last_id = st.get('last_id')
             search_after = [last_created, last_id] if (last_created and last_id) else None
    
             pages = 0
             total_events = 0
             written_keys = []
             newest_created = last_created or created_from
             newest_id = last_id or ''
    
             while pages < MAX_PAGES:
                 events = _search_events(access_token, created_from, search_after)
                 if not events:
                     break
    
                 # Write page to GCS in JSONL format
                 key = _put_events_data(bucket, events, from_ts, to_ts, pages + 1)
                 written_keys.append(key)
                 total_events += len(events)
    
                 # Update pagination state from last item
                 last_event = events[-1]
                 last_event_created = last_event.get('created') or last_event.get('metadata', {}).get('created')
                 last_event_id = _get_item_id(last_event)
    
                 if last_event_created:
                     newest_created = last_event_created
                 if last_event_id:
                     newest_id = last_event_id
    
                 search_after = [newest_created, newest_id]
                 pages += 1
    
                 # If we got less than page size, we're done
                 if len(events) < PAGE_SIZE:
                     break
    
             print(f'Successfully retrieved {total_events} events across {pages} pages')
    
             # Save state for next run
             st['last_to_ts'] = to_ts
             st['last_created'] = newest_created
             st['last_id'] = newest_id
             st['last_successful_run'] = now
             _save_state(bucket, st)
    
             print(f'Wrote {len(written_keys)} files to GCS')
    
         except Exception as e:
             print(f'Error processing logs: {str(e)}')
             raise
    
    • File kedua: 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 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 sailpoint-iam-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 Pub/Sub (sailpoint-iam-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 5 menit */5 * * * * Volume tinggi, latensi rendah
    Setiap 15 menit */15 * * * * Volume sedang
    Setiap jam 0 * * * * Standar (direkomendasikan)
    Setiap 6 jam 0 */6 * * * Volume rendah, pemrosesan batch
    Harian 0 0 * * * Pengumpulan data historis

Menguji tugas penjadwal

  1. Di konsol Cloud Scheduler, temukan tugas Anda.
  2. Klik Force run untuk memicu secara manual.
  3. Tunggu beberapa detik, lalu buka Cloud Run > Services > sailpoint-iam-collector > Logs.
  4. Pastikan fungsi berhasil dieksekusi.
  5. Periksa bucket GCS untuk mengonfirmasi bahwa log telah ditulis.

Mengambil akun layanan Google SecOps

Google SecOps menggunakan akun layanan unik untuk membaca data dari bucket GCS Anda. Anda harus memberi akun layanan ini akses ke bucket Anda.

Mendapatkan email akun layanan

  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, SailPoint IAM logs).
  5. Pilih Google Cloud Storage V2 sebagai Source type.
  6. Pilih SailPoint IAM 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.

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.

Mengonfigurasi feed di Google SecOps untuk menyerap log SailPoint IAM

  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, SailPoint IAM logs).
  5. Pilih Google Cloud Storage V2 sebagai Source type.
  6. Pilih SailPoint IAM sebagai Log type.
  7. Klik Berikutnya.
  8. Tentukan nilai untuk parameter input berikut:

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

      gs://sailpoint-iam-logs/sailpoint/iam/
      
      • Ganti:

        • sailpoint-iam-logs: Nama bucket GCS Anda.
        • sailpoint/iam/: Jalur awalan/folder opsional tempat log disimpan (biarkan kosong untuk root).
      • Contoh:

        • Bucket root: gs://company-logs/
        • Dengan awalan: gs://company-logs/sailpoint-logs/
        • Dengan subfolder: gs://company-logs/sailpoint/iam/
    • 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.

  9. Klik Berikutnya.

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

Tabel pemetaan UDM

Kolom Log Pemetaan UDM Logika
tindakan metadata.description Nilai kolom tindakan dari log mentah.
actor.name principal.user.user_display_name Nilai kolom actor.name dari log mentah.
attributes.accountName principal.user.group_identifiers Nilai kolom attributes.accountName dari log mentah.
attributes.appId target.asset_id "ID Aplikasi: " digabungkan dengan nilai kolom attributes.appId dari log mentah.
attributes.attributeName additional.fields[0].value.string_value Nilai kolom attributes.attributeName dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "nama atribut".
attributes.attributeValue additional.fields[1].value.string_value Nilai kolom attributes.attributeValue dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "nilai atribut".
attributes.cloudAppName target.application Nilai kolom attributes.cloudAppName dari log mentah.
attributes.hostName target.hostname, target.asset.hostname Nilai kolom attributes.hostName dari log mentah.
attributes.interface additional.fields[2].value.string_value Nilai kolom attributes.interface dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "Interface".
attributes.operation security_result.action_details Nilai kolom attributes.operation dari log mentah.
attributes.previousValue additional.fields[3].value.string_value Nilai kolom attributes.previousValue dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "Previous Value".
attributes.provisioningResult security_result.detection_fields.value Nilai kolom attributes.provisioningResult dari log mentah, yang ditempatkan dalam objek security_result.detection_fields. Kunci ditetapkan ke "Provisioning Result".
attributes.sourceId principal.labels[0].value Nilai kolom attributes.sourceId dari log mentah, yang ditempatkan dalam objek principal.labels. Kunci ditetapkan ke "Source Id".
attributes.sourceName principal.labels[1].value Nilai kolom attributes.sourceName dari log mentah, yang ditempatkan dalam objek principal.labels. Kunci ditetapkan ke "Source Name".
auditClassName metadata.product_event_type Nilai kolom auditClassName dari log mentah.
dibuat metadata.event_timestamp.seconds, metadata.event_timestamp.nanos Nilai kolom yang dibuat dari log mentah, dikonversi ke stempel waktu jika instant.epochSecond tidak ada.
id metadata.product_log_id Nilai kolom id dari log mentah.
instant.epochSecond metadata.event_timestamp.seconds Nilai kolom instant.epochSecond dari log mentah, yang digunakan untuk stempel waktu.
ipAddress principal.asset.ip, principal.ip Nilai kolom ipAddress dari log mentah.
antarmuka additional.fields[0].value.string_value Nilai kolom antarmuka dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "interface".
loggerName intermediary.application Nilai kolom loggerName dari log mentah.
pesan metadata.description, security_result.description Digunakan untuk berbagai tujuan, termasuk menetapkan deskripsi dalam metadata dan security_result, serta mengekstrak konten XML.
nama security_result.description Nilai kolom nama dari log mentah.
operasi target.resource.attribute.labels[0].value, metadata.product_event_type Nilai kolom operasi dari log mentah, yang ditempatkan dalam objek target.resource.attribute.labels. Kunci ditetapkan ke "operation". Juga digunakan untuk metadata.product_event_type.
diagram principal.administrative_domain Nilai kolom org dari log mentah.
pod principal.location.name Nilai kolom pod dari log mentah.
referenceClass additional.fields[1].value.string_value Nilai kolom referenceClass dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "referenceClass".
referenceId additional.fields[2].value.string_value Nilai kolom referenceId dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "referenceId".
sailPointObjectName additional.fields[3].value.string_value Nilai kolom sailPointObjectName dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "sailPointObjectName".
serverHost principal.hostname, principal.asset.hostname Nilai kolom serverHost dari log mentah.
tumpukan additional.fields[4].value.string_value Nilai kolom stack dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "Stack".
status security_result.severity_details Nilai kolom status dari log mentah.
target additional.fields[4].value.string_value Nilai kolom target dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "target".
target.name principal.user.userid Nilai kolom target.name dari log mentah.
technicalName security_result.summary Nilai kolom technicalName dari log mentah.
thrown.cause.message xml_body, detailed_message Nilai kolom thrown.cause.message dari log mentah, yang digunakan untuk mengekstrak konten XML.
thrown.message xml_body, detailed_message Nilai kolom thrown.message dari log mentah, yang digunakan untuk mengekstrak konten XML.
trackingNumber additional.fields[5].value.string_value Nilai kolom trackingNumber dari log mentah, yang ditempatkan dalam objek additional.fields. Kunci ditetapkan ke "Nomor Pelacakan".
jenis metadata.product_event_type Nilai kolom jenis dari log mentah.
_version metadata.product_version Nilai kolom _version dari log mentah.
T/A metadata.event_timestamp Berasal dari kolom instant.epochSecond atau kolom yang dibuat.
T/A metadata.event_type Ditentukan oleh logika parser berdasarkan berbagai kolom, termasuk has_principal_user, has_target_application, technicalName, dan action. Nilai defaultnya adalah "GENERIC_EVENT".
T/A metadata.log_type Tetapkan ke "SAILPOINT_IAM".
T/A metadata.product_name Tetapkan ke "IAM".
T/A metadata.vendor_name Tetapkan ke "SAILPOINT".
T/A extensions.auth.type Tetapkan ke "AUTHTYPE_UNSPECIFIED" dalam kondisi tertentu.
T/A target.resource.attribute.labels[0].key Tetapkan ke "operation".
actor.name event.idm.read_only_udm.principal.user.userid Dipetakan dari log perubahan
target.name event.idm.read_only_udm.target.user.userid Dipetakan dari log perubahan
attributes.hostName event.idm.read_only_udm.target.ip dan event.idm.read_only_udm.target.asset.ip Dipetakan dari log perubahan
attributes.info event.idm.read_only_udm.additional.fields Dipetakan dari log perubahan
synced event.idm.read_only_udm.additional.fields Dipetakan dari log perubahan
objects event.idm.read_only_udm.additional.fields Dipetakan dari log perubahan
details event.idm.read_only_udm.additional.fields Dipetakan dari log perubahan
attributes.attributeValue target.group.attribute.labels Dipetakan dari log perubahan
attributes.accountName principal.user.attribute.labels Dipetakan dari log perubahan
interface", "referenceClass", "referenceId", "sailPointObjectName", and "target additional.fields Dipetakan dari log perubahan
serverHost" and "server principal.hostname Dipetakan dari log perubahan
operation target.attribute.labels Dipetakan dari log perubahan
metadata.event_type USER_CHANGE_PASSWORD Dipetakan dari log perubahan
metadata.event_type USER_DELETION Dipetakan dari log perubahan
metadata.event_type USER_RESOURCE_ACCESS Dipetakan dari log perubahan
metadata.event_type USER_LOGIN Dipetakan dari log perubahan
metadata.event_type USER_RESOURCE_UPDATE_PERMISSIONS Dipetakan dari log perubahan
metadata.event_type USER_RESOURCE_UPDATE_CONTENT Dipetakan dari log perubahan
metadata.event_type USER_LOGOUT Dipetakan dari log perubahan
metadata.event_type USER_CREATION Dipetakan dari log perubahan
metadata.event_type USER_CHANGE_PERMISSIONS Dipetakan dari log perubahan
metadata.event_type USER_RESOURCE_CREATION Dipetakan dari log perubahan
metadata.event_type EMAIL_TRANSACTION Dipetakan dari log perubahan
stack", "attributes.interface", "trackingNumber", "attributes.accountUuid", "attributes.previousValue", "attributes.attributeName", and "attributes.attributeValue additional.fields Dipetakan dari log perubahan
attributes.sourceId" and "attributes.sourceName principal.labels Dipetakan dari log perubahan

Log Perubahan

Melihat Log Perubahan untuk parser ini

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