Mengumpulkan log Atlassian Confluence
Dokumen ini menjelaskan cara menyerap log Atlassian Confluence ke Google Security Operations. Parser pertama-tama mencoba mengekstrak kolom dari pesan log mentah menggunakan ekspresi reguler (pola grok) yang dirancang untuk log Atlassian Confluence. Jika penguraian grok gagal atau log dalam format JSON, kode akan mencoba mengurai pesan sebagai JSON. Terakhir, kolom yang diekstrak dipetakan ke skema UDM Google SecOps dan diperkaya dengan konteks tambahan.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Akun Atlassian Confluence Cloud dengan akses log audit ATAU Confluence Data Center/Server dengan akses administratif
- Untuk metode berbasis AWS: Akses istimewa ke AWS (S3, IAM, Lambda, EventBridge)
- Untuk metode Bindplane: Host Windows 2016 atau yang lebih baru atau Linux dengan
systemd
Ringkasan opsi integrasi
Panduan ini menyediakan dua jalur integrasi:
- Opsi 1: Confluence Data Center/Server melalui BindPlane + Syslog
- Opsi 2: Log Audit Confluence Cloud melalui AWS Lambda + S3 (format JSON)
Pilih opsi yang paling sesuai dengan jenis dan infrastruktur deployment Confluence Anda.
Opsi 1: Confluence Data Center/Server melalui Bindplane + Syslog
Opsi ini mengonfigurasi Confluence Data Center atau Server untuk mengirim log melalui syslog ke agen Bindplane, yang kemudian meneruskannya ke Google SecOps.
Mendapatkan file autentikasi penyerapan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
- Download File Autentikasi Penyerapan. Simpan file dengan aman di sistem tempat BindPlane akan diinstal.
Mendapatkan ID pelanggan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Profil.
- Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.
Menginstal agen Bindplane
Instal agen Bindplane di sistem operasi Windows atau Linux Anda sesuai dengan petunjuk berikut.
Penginstalan Windows
- Buka Command Prompt atau PowerShell sebagai administrator.
Jalankan perintah berikut:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Penginstalan Linux
- Buka terminal dengan hak istimewa root atau sudo.
Jalankan perintah berikut:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Referensi penginstalan tambahan
- Untuk opsi penginstalan tambahan, lihat panduan penginstalan ini.
Mengonfigurasi agen BindPlane untuk menyerap Syslog dan mengirimkannya ke Google SecOps
Akses file konfigurasi:
- Cari file
config.yaml. Biasanya, file ini berada di direktori/etc/bindplane-agent/di Linux atau di direktori penginstalan di Windows. - Buka file menggunakan editor teks (misalnya,
nano,vi, atau Notepad).
- Cari file
Edit file
config.yamlsebagai berikut:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID customer_id: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com log_type: 'ATLASSIAN_CONFLUENCE' raw_log_field: body ingestion_labels: service: pipelines: logs/confluence: receivers: - udplog exporters: - chronicle/chronicle_w_labels- Ganti port dan alamat IP sesuai kebutuhan di infrastruktur Anda.
- Ganti
<YOUR_CUSTOMER_ID_HERE>dengan ID pelanggan yang sebenarnya. - Ganti
/path/to/ingestion-authentication-file.jsondengan jalur tempat file autentikasi disimpan di bagian Mendapatkan file autentikasi penyerapan Google SecOps.
Mulai ulang agen Bindplane untuk menerapkan perubahan
Untuk memulai ulang agen Bindplane di Linux, jalankan perintah berikut:
sudo systemctl restart bindplane-agentUntuk memulai ulang agen Bindplane di Windows, Anda dapat menggunakan konsol Services atau memasukkan perintah berikut:
net stop BindPlaneAgent && net start BindPlaneAgent
Mengonfigurasi penerusan Syslog di Confluence Data Center/Server
Opsi A: Mengonfigurasi SyslogAppender Log4j (Direkomendasikan)
- Login ke server Confluence Anda melalui SSH atau RDP.
- Cari file konfigurasi Log4j:
- Untuk Log4j2:
<confluence-install>/confluence/WEB-INF/classes/log4j2.xml
- Untuk Log4j2:
Edit file konfigurasi untuk menambahkan SyslogAppender:
<Configuration> <Appenders> <!-- Existing appenders --> <Syslog name="SyslogAppender" host="BINDPLANE_AGENT_IP" port="514" protocol="UDP" facility="LOCAL0" format="RFC5424"> <PatternLayout pattern="%d{ISO8601} %p [%t] [%c{1}] %m%n"/> </Syslog> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="SyslogAppender"/> <!-- Other appender refs --> </Root> <!-- Audit logger --> <Logger name="com.atlassian.confluence.event.events.security.AuditEvent" level="info" additivity="false"> <AppenderRef ref="SyslogAppender"/> </Logger> </Loggers> </Configuration>- Ganti
BINDPLANE_AGENT_IPdengan alamat IP agen BindPlane Anda.
- Ganti
Mulai ulang Confluence untuk menerapkan perubahan:
sudo systemctl restart confluence
Opsi B: Mengonfigurasi rsyslog untuk meneruskan file log lokal
- Konfigurasi Confluence untuk menulis log ke file (perilaku default).
Instal rsyslog jika belum ada:
sudo apt-get install rsyslog # Debian/Ubuntu sudo yum install rsyslog # RHEL/CentOSBuat file konfigurasi rsyslog
/etc/rsyslog.d/confluence.conf:# Forward Confluence logs to BindPlane $ModLoad imfile # Application logs $InputFileName /opt/atlassian/confluence/logs/atlassian-confluence.log $InputFileTag confluence-app: $InputFileStateFile stat-confluence-app $InputFileSeverity info $InputFileFacility local0 $InputRunFileMonitor # Audit logs (JSON format in DC/Server) $InputFileName /var/atlassian/application-data/confluence/log/audit/*.json $InputFileTag confluence-audit: $InputFileStateFile stat-confluence-audit $InputFileSeverity info $InputFileFacility local1 $InputRunFileMonitor # Forward to BindPlane agent *.* @@BINDPLANE_AGENT_IP:514- Ganti
BINDPLANE_AGENT_IPdengan alamat IP agen Bindplane Anda. - Sesuaikan jalur file log berdasarkan penginstalan Confluence Anda:
- Log aplikasi biasanya:
<confluence-install>/logs/atau<local-home>/logs/ - Log audit:
<confluence-home>/log/audit/*.json
- Log aplikasi biasanya:
- Ganti
Mulai ulang rsyslog:
sudo systemctl restart rsyslog
Opsi 2: Confluence Cloud Audit Logs melalui AWS Lambda + S3
Mengumpulkan kredensial Confluence Cloud API
- Login ke akun Atlassian Anda.
- Buka https://id.atlassian.com/manage-profile/security/api-tokens.
- Klik Create API token.
- Masukkan label untuk token (misalnya,
Google Security Operations Integration). - Klik Buat.
- Salin dan simpan token API secara aman.
- Catat URL situs Confluence Cloud Anda (misalnya,
https://yoursite.atlassian.net). - Catat alamat email akun Atlassian Anda (digunakan untuk autentikasi).
Mengonfigurasi bucket AWS S3 dan IAM untuk Google SecOps
- Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket
- Simpan Name dan Region bucket untuk referensi di masa mendatang (misalnya,
confluence-audit-logs). - Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
- Pilih Pengguna yang dibuat.
- Pilih tab Kredensial keamanan.
- Klik Create Access Key di bagian Access Keys.
- Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
- Klik Berikutnya.
- Opsional: Tambahkan tag deskripsi.
- Klik Create access key.
- Klik Download CSV file untuk menyimpan Access Key dan Secret Access Key untuk referensi di masa mendatang.
- Klik Done.
- Pilih tab Permissions.
- Klik Tambahkan izin di bagian Kebijakan izin.
- Pilih Tambahkan izin.
- Pilih Lampirkan kebijakan secara langsung.
- Cari kebijakan AmazonS3FullAccess.
- Pilih kebijakan.
- Klik Berikutnya.
- Klik Add permissions.
Mengonfigurasi kebijakan dan peran IAM untuk upload S3
- Di konsol AWS, buka IAM > Policies > Create policy > JSON tab.
Masukkan kebijakan berikut:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::confluence-audit-logs/*" }, { "Sid": "AllowGetStateObject", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::confluence-audit-logs/confluence-audit/state.json" } ] }- Ganti
confluence-audit-logsjika Anda memasukkan nama bucket yang berbeda.
- Ganti
Klik Berikutnya > Buat kebijakan.
Beri nama kebijakan
ConfluenceAuditToS3Policy.Buka IAM > Roles > Create role > AWS service > Lambda.
Lampirkan kebijakan
ConfluenceAuditToS3Policyyang baru dibuat.Beri nama peran
ConfluenceAuditLambdaRole, lalu klik Buat peran.
Buat fungsi Lambda
- Di Konsol AWS, buka Lambda > Functions.
- Klik Create function > Author from scratch.
Berikan detail konfigurasi berikut:
Setelan Nilai Nama ConfluenceAuditToS3Runtime Python 3.13 Arsitektur x86_64 Peran eksekusi ConfluenceAuditLambdaRoleSetelah fungsi dibuat, buka tab Code, hapus stub, dan masukkan kode berikut:
import json import os import boto3 from datetime import datetime, timezone, timedelta from urllib import request, parse, error from base64 import b64encode # Environment variables S3_BUCKET = os.environ['S3_BUCKET'] S3_PREFIX = os.environ.get('S3_PREFIX', 'confluence-audit/') STATE_KEY = os.environ.get('STATE_KEY', 'confluence-audit/state.json') CONFLUENCE_URL = os.environ['CONFLUENCE_URL'] # e.g., https://yoursite.atlassian.net CONFLUENCE_EMAIL = os.environ['CONFLUENCE_EMAIL'] CONFLUENCE_API_TOKEN = os.environ['CONFLUENCE_API_TOKEN'] MAX_RECORDS = int(os.environ.get('MAX_RECORDS', '1000')) s3_client = boto3.client('s3') def lambda_handler(event, context): """Fetch Confluence Cloud audit logs and write to S3.""" # Read last execution state start_date = get_last_execution_time() end_date = datetime.now(timezone.utc) print(f"Fetching audit logs from {start_date} to {end_date}") # Fetch audit records records = fetch_audit_logs(start_date, end_date) if not records: print("No new audit records found.") save_state(end_date) return {'statusCode': 200, 'body': 'No new records'} # Write to S3 timestamp = end_date.strftime('%Y%m%d_%H%M%S') object_key = f"{S3_PREFIX}audit_{timestamp}.json" s3_client.put_object( Bucket=S3_BUCKET, Key=object_key, Body='\n'.join(json.dumps(record) for record in records), ContentType='application/json' ) print(f"Wrote {len(records)} records to s3://{S3_BUCKET}/{object_key}") # Update state save_state(end_date) return { 'statusCode': 200, 'body': f"Processed {len(records)} records" } def get_last_execution_time(): """Retrieve the last execution timestamp from S3 state file.""" try: response = s3_client.get_object(Bucket=S3_BUCKET, Key=STATE_KEY) state = json.loads(response['Body'].read()) return datetime.fromisoformat(state['last_execution']) except s3_client.exceptions.NoSuchKey: # First run: fetch logs from last 24 hours return datetime.now(timezone.utc) - timedelta(hours=24) except Exception as e: print(f"Error reading state: {e}") return datetime.now(timezone.utc) - timedelta(hours=24) def save_state(execution_time): """Save the execution timestamp to S3 state file.""" state = {'last_execution': execution_time.isoformat()} s3_client.put_object( Bucket=S3_BUCKET, Key=STATE_KEY, Body=json.dumps(state), ContentType='application/json' ) def fetch_audit_logs(start_date, end_date): """Fetch audit logs from Confluence Cloud REST API.""" records = [] start_param = int(start_date.timestamp() * 1000) # milliseconds end_param = int(end_date.timestamp() * 1000) # Build authentication header auth_string = f"{CONFLUENCE_EMAIL}:{CONFLUENCE_API_TOKEN}" auth_bytes = auth_string.encode('ascii') auth_b64 = b64encode(auth_bytes).decode('ascii') headers = { 'Authorization': f'Basic {auth_b64}', 'Accept': 'application/json' } # Confluence Cloud Audit API endpoint url = f"{CONFLUENCE_URL}/wiki/rest/api/audit?startDate={start_param}&endDate={end_param}&limit=1000" try: req = request.Request(url, headers=headers) with request.urlopen(req) as response: data = json.loads(response.read()) records = data.get('results', []) print(f"Retrieved {len(records)} audit records") except error.HTTPError as e: print(f"HTTP Error: {e.code} - {e.reason}") print(e.read().decode()) except Exception as e: print(f"Error fetching audit logs: {e}") return records[:MAX_RECORDS]Buka Configuration > Environment variables.
Klik Edit > Add new environment variable.
Masukkan variabel lingkungan berikut, lalu ganti dengan nilai Anda.
Kunci Nilai contoh S3_BUCKETconfluence-audit-logsS3_PREFIXconfluence-audit/STATE_KEYconfluence-audit/state.jsonCONFLUENCE_URLhttps://yoursite.atlassian.netCONFLUENCE_EMAILyour-email@example.comCONFLUENCE_API_TOKENyour-api-token-hereMAX_RECORDS1000Pilih tab Configuration
Di panel General configuration, klik Edit.
Ubah Waktu Tunggu menjadi 5 menit (300 detik), lalu klik Simpan.
Membuat jadwal EventBridge
- Buka Amazon EventBridge > Scheduler > Create schedule.
- Berikan detail konfigurasi berikut:
- Jadwal berulang: Tarif (
1 hour). - Target: Fungsi Lambda Anda
ConfluenceAuditToS3. - Name:
ConfluenceAuditToS3-1h.
- Jadwal berulang: Tarif (
- Klik Buat jadwal.
Opsional: Buat pengguna & kunci IAM hanya baca untuk Google SecOps
- Buka Konsol AWS > IAM > Pengguna.
- Klik Add users.
- Berikan detail konfigurasi berikut:
- Pengguna: Masukkan
secops-confluence-reader. - Jenis akses: Pilih Kunci akses – Akses terprogram.
- Pengguna: Masukkan
- Klik Berikutnya.
- Klik Attach policies directly > Create policy.
Di editor JSON, masukkan kebijakan berikut:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::confluence-audit-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::confluence-audit-logs" } ] }Tetapkan nama ke
secops-reader-policy.Buka Buat kebijakan > cari/pilih > Berikutnya > Tambahkan izin.
Buka Kredensial keamanan > Kunci akses > Buat kunci akses.
Download CSV (nilai ini dimasukkan ke dalam feed).
Mengonfigurasi feed di Google SecOps untuk memproses log Confluence
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Confluence Cloud Audit Logs). - Pilih Amazon S3 V2 sebagai Jenis sumber.
- Pilih Atlassian Confluence sebagai Jenis log.
- Klik Berikutnya.
- Tentukan nilai untuk parameter input berikut:
- URI S3:
s3://confluence-audit-logs/confluence-audit/ - Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda.
- Usia File Maksimum: Menyertakan file yang diubah dalam jumlah hari terakhir. Defaultnya adalah 180 hari.
- ID Kunci Akses: Kunci akses pengguna dengan akses ke bucket S3.
- Kunci Akses Rahasia: Kunci rahasia pengguna dengan akses ke bucket S3.
- Namespace aset: Namespace aset.
- Label penyerapan: Label yang diterapkan ke peristiwa dari feed ini.
- URI S3:
- Klik Berikutnya.
- Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Tabel Pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
| agen | read_only_udm.network.http.user_agent | Nilai diambil dari kolom "agent". |
| app_protocol | read_only_udm.network.application_protocol | Diperoleh dari kolom "app_protocol". Jika "app_protocol" berisi "HTTPS", "HTTP", "SSH", atau "RDP", protokol yang sesuai akan digunakan. Jika tidak, defaultnya adalah "UNKNOWN_APPLICATION_PROTOCOL". |
| app_protocol | read_only_udm.network.application_protocol_version | Nilai diambil dari kolom "app_protocol". |
| auditType.action | read_only_udm.security_result.action | Diperoleh dari kolom "auditType.action". Jika "auditType.action" berisi "successful", nilai ditetapkan ke "ALLOW". Jika berisi "restricted", nilainya ditetapkan ke "BLOCK". |
| auditType.action | read_only_udm.security_result.summary | Nilai diambil dari kolom "auditType.action" jika "auditType" tidak kosong dan "auditType_area" adalah "SECURITY". |
| auditType.actionI18nKey | read_only_udm.metadata.product_event_type | Nilai diambil dari kolom "auditType.actionI18nKey" jika "auditType" tidak kosong. |
| auditType.area | read_only_udm.security_result.detection_fields.value | Nilai diambil dari kolom "auditType.area" dan ditetapkan ke kolom "value" dari kolom deteksi dengan kolom "key" yang ditetapkan ke "auditType area". Pemetaan ini dilakukan saat "auditType" tidak kosong. |
| auditType.category | read_only_udm.security_result.category_details | Nilai diambil dari kolom "auditType.category" jika "auditType" tidak kosong. |
| auditType.categoryI18nKey | read_only_udm.security_result.detection_fields.value | Nilai diambil dari kolom "auditType.categoryI18nKey" dan ditetapkan ke kolom "value" dari kolom deteksi dengan kolom "key" yang ditetapkan ke "auditType categoryI18nKey". Pemetaan ini dilakukan saat "auditType" tidak kosong. |
| auditType.level | read_only_udm.security_result.detection_fields.value | Nilai diambil dari kolom "auditType.level" dan ditetapkan ke kolom "value" dari kolom deteksi dengan kolom "key" yang ditetapkan ke "auditType level". Pemetaan ini dilakukan saat "auditType" tidak kosong. |
| author.displayName | read_only_udm.principal.user.user_display_name | Nilai diambil dari kolom "author.displayName". |
| author.externalCollaborator | read_only_udm.security_result.about.resource.attribute.labels.value | Nilai diambil dari kolom "author.externalCollaborator" dan ditetapkan ke kolom "value" dari label dengan kolom "key" yang ditetapkan ke "externalCollaborator". |
| author.id | read_only_udm.principal.user.userid | Nilai diambil dari kolom "author.id" jika "author.type" adalah "user" dan "principal_user_present" adalah "false". |
| author.isExternalCollaborator | read_only_udm.security_result.about.resource.attribute.labels.value | Nilai diambil dari kolom "author.isExternalCollaborator" dan ditetapkan ke kolom "value" dari label dengan kolom "key" yang ditetapkan ke "isExternalCollaborator". |
| author.name | read_only_udm.principal.user.user_display_name | Nilai diambil dari kolom "author.name" jika "author.type" adalah "user" dan "principal_user_present" adalah "false". |
| bytes_in | read_only_udm.network.received_bytes | Nilai diambil dari kolom "bytes_in" jika berisi digit. Jika tidak, nilai defaultnya adalah 0. |
| category | read_only_udm.security_result.category_details | Nilai diambil dari kolom "category". |
| changedValues | read_only_udm.principal.resource.attribute.labels | Melakukan iterasi melalui setiap elemen dalam "changedValues" dan membuat label dengan kunci seperti "changedValue[index][key]" dan nilai dari nilai yang sesuai dalam array "changedValues". |
| creationDate | read_only_udm.metadata.event_timestamp | Nilai diambil dari kolom "creationDate", diuraikan sebagai stempel waktu UNIX atau UNIX_MS. |
| extraAttributes | read_only_udm.principal.resource.attribute.labels | Melakukan iterasi melalui setiap elemen di "extraAttributes" dan membuat label dengan kunci berdasarkan kolom "name" dan "nameI18nKey" serta nilai dari kolom "value" yang sesuai. |
| http_verb | read_only_udm.network.http.method | Nilai diambil dari kolom "http_verb". |
| ip | read_only_udm.target.ip | Nilai diambil dari kolom "ip". |
| principal_host | read_only_udm.principal.hostname | Nilai diambil dari kolom "principal_host". |
| referral_url | read_only_udm.network.http.referral_url | Nilai diambil dari kolom "referral_url". |
| remoteAddress | read_only_udm.principal.ip | Nilai diambil dari kolom "remoteAddress", diuraikan sebagai alamat IP. |
| response_code | read_only_udm.network.http.response_code | Nilai diambil dari kolom "response_code". |
| Durasi sesi | read_only_udm.additional.fields.value.string_value | Nilai diambil dari kolom "session_duration" dan ditetapkan ke kolom "string_value" dari label dengan kolom "key" yang ditetapkan ke "Durasi Sesi". |
| sumber | read_only_udm.principal.ip | Nilai diambil dari kolom "source", diuraikan sebagai alamat IP. |
| src_ip | read_only_udm.principal.ip | Nilai diambil dari kolom "src_ip" jika "remoteAddress" kosong. |
| ringkasan | read_only_udm.security_result.summary | Nilai diambil dari kolom "summary". |
| sysAdmin | read_only_udm.security_result.about.resource.attribute.labels.value | Nilai diambil dari kolom "sysAdmin" dan ditetapkan ke kolom "value" dari label dengan kolom "key" yang ditetapkan ke "sysAdmin". |
| superAdmin | read_only_udm.security_result.about.resource.attribute.labels.value | Nilai diambil dari kolom "superAdmin" dan ditetapkan ke kolom "value" dari label dengan kolom "key" yang ditetapkan ke "superAdmin". |
| target_url | read_only_udm.target.url | Nilai diambil dari kolom "target_url". |
| timestamp | read_only_udm.metadata.event_timestamp | Nilai diambil dari kolom "timestamp", diuraikan sebagai string tanggal dan waktu. |
| user_id | read_only_udm.principal.user.userid | Nilai diambil dari kolom "user_id". |
| read_only_udm.metadata.event_type | Nilai kolom ini ditentukan oleh serangkaian pemeriksaan dan secara default adalah "GENERIC_EVENT". Nilai ini ditetapkan ke nilai tertentu seperti "NETWORK_HTTP", "USER_UNCATEGORIZED", atau "STATUS_UPDATE" berdasarkan keberadaan dan konten kolom lain seperti "principal_host", "user_id", "has_principal", dan "author.type". | |
| read_only_udm.metadata.vendor_name | Tetapkan ke "ATLASSIAN". | |
| read_only_udm.metadata.product_name | Tetapkan ke "CONFLUENCE". | |
| read_only_udm.metadata.log_type | Tetapkan ke "ATLASSIAN_CONFLUENCE". | |
| read_only_udm.principal.user.user_display_name | Nilai kolom ini dapat berasal dari "author.displayName" atau "affectedObject.name", bergantung pada konteksnya. | |
| read_only_udm.target.process.pid | Nilai kolom ini dapat berasal dari "principal_host" atau "pid", bergantung pada konteksnya. | |
| read_only_udm.principal.resource.attribute.labels | Kolom ini diisi dengan berbagai label yang berasal dari kolom seperti "affectedObjects", "changedValues", dan "extraAttributes". Kunci dan nilai label ini dibuat secara dinamis berdasarkan konten spesifik dari kolom ini. |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.