Mengumpulkan log Audit Slack

Didukung di:

Panduan ini menjelaskan cara menyerap Log Audit Slack ke Google Security Operations menggunakan Fungsi Google Cloud Run atau Amazon S3 dengan AWS Lambda.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google SecOps.
  • Paket Slack Enterprise Grid dengan akses Pemilik Organisasi atau Admin.
  • Akses istimewa ke salah satu dari:
    • Google Cloud (untuk Opsi 1: Cloud Run Functions dan Cloud Scheduler), atau
    • AWS (untuk Opsi 2: S3, IAM, Lambda, EventBridge).

Prasyarat pengumpulan Log Audit Slack (ID Aplikasi, Token OAuth, ID Organisasi)

Slack Audit Logs API memerlukan Token OAuth Pengguna dengan cakupan auditlogs:read. Token ini harus diperoleh dengan menginstal aplikasi di tingkat organisasi Enterprise Grid, bukan di tingkat ruang kerja.

Membuat aplikasi Slack untuk Log Audit

  1. Login ke Konsol Admin Slack dengan akun Pemilik Organisasi Enterprise Grid atau Admin.
  2. Buka https://api.slack.com/apps, lalu klik Create New App > From scratch.
  3. Berikan detail konfigurasi berikut:
    • Nama Aplikasi: Masukkan nama deskriptif (misalnya, Google SecOps Audit Integration).
    • Pilih ruang kerja untuk mengembangkan aplikasi Anda: Pilih Development Slack Workspace (ruang kerja apa pun di organisasi).
  4. Klik Create App.

Mengonfigurasi cakupan OAuth

  1. Buka OAuth & Izin di sidebar kiri.
  2. Scroll ke bawah ke bagian Cakupan.
  3. Di bagian Cakupan Token Pengguna (BUKAN Cakupan Token Bot), klik Tambahkan Cakupan OAuth.
  4. Tambahkan cakupan: auditlogs:read.

Mengaktifkan distribusi publik

  1. Buka Kelola Distribusi di sidebar kiri.
  2. Di bagian Bagikan Aplikasi Anda ke Ruang Kerja Lain, pastikan keempat bagian memiliki tanda centang hijau:
    • Menghapus Informasi yang Dikodekan Langsung
    • Mengaktifkan Distribusi Publik
    • Menetapkan URL Pengalihan
    • Menambahkan Cakupan OAuth
  3. Klik Aktifkan Distribusi Publik.

Menginstal aplikasi ke organisasi Enterprise Grid

  1. Buka OAuth & Izin di sidebar kiri.
  2. Klik Instal ke Organisasi (BUKAN "Instal ke Workspace").

KRITIS: Periksa dropdown di kanan atas layar penginstalan untuk memverifikasi bahwa Anda menginstal ke organisasi Enterprise, bukan ruang kerja individu.

  1. Tinjau izin yang diminta, lalu klik Izinkan.
  2. Setelah otorisasi selesai, Anda akan dialihkan kembali ke halaman OAuth & Izin.

Mengambil kredensial

  1. Di bagian Token OAuth untuk Ruang Kerja Anda, temukan Token OAuth Pengguna.
  2. Salin dan simpan token yang dimulai dengan xoxp- (misalnya, xoxp-1234567890-0987654321-1234567890-abc123def456) dengan aman.

Penting: Ini adalah SLACK_ADMIN_TOKEN Anda untuk fungsi Lambda atau fungsi Cloud Run. Simpan dengan aman.

  1. Catat ID Organisasi Anda:
    • Buka Konsol Admin Slack.
    • Buka Setelan & Izin > Setelan organisasi.
    • Salin Organization ID.

Opsi 1: Mengonfigurasi ekspor Log Audit Slack menggunakan Fungsi Google Cloud Run

Opsi ini menggunakan Google Cloud Run Functions dan Cloud Scheduler untuk mengumpulkan Log Audit Slack dan memasukkannya langsung ke Google SecOps.

Menyiapkan direktori

  1. Buat direktori baru di komputer lokal Anda untuk deployment fungsi Cloud Run.
  2. Download file berikut dari repositori GitHub ingestion-scripts Chronicle:
    • Dari folder slack, download:
      • .env.yml
      • main.py
      • requirements.txt
    • Dari root repositori, download seluruh direktori common dengan semua filenya:
      • common/__init__.py
      • common/auth.py
      • common/env_constants.py
      • common/ingest.py
      • common/status.py
      • common/utils.py
  3. Tempatkan semua file yang didownload ke dalam direktori deployment Anda.

Struktur direktori Anda akan terlihat seperti ini:

deployment_directory/
├─common/
 ├─__init__.py
 ├─auth.py
 ├─env_constants.py
 ├─ingest.py
 ├─status.py
 └─utils.py
├─.env.yml
├─main.py
└─requirements.txt

Membuat secret di Google Secret Manager

  1. Di Konsol Google Cloud, buka Security > Secret Manager.
  2. Klik Buat Secret.
  3. Berikan detail konfigurasi berikut untuk akun layanan Chronicle:
    • Nama: Masukkan chronicle-service-account.
    • Nilai secret: Tempelkan konten file JSON autentikasi penyerapan Google SecOps Anda.
  4. Klik Create secret.
  5. Salin nama resource secret dalam format: projects/<PROJECT_ID>/secrets/chronicle-service-account/versions/latest.
  6. Klik Create Secret lagi untuk membuat secret kedua.
  7. Berikan detail konfigurasi berikut untuk token Slack:
    • Nama: Masukkan slack-admin-token.
    • Nilai rahasia: Tempelkan Token OAuth Pengguna Slack Anda (dimulai dengan xoxp-).
  8. Klik Create secret.
  9. Salin nama resource secret dalam format: projects/<PROJECT_ID>/secrets/slack-admin-token/versions/latest.

Menetapkan variabel lingkungan runtime yang diperlukan

  1. Buka file .env.yml di direktori deployment Anda.
  2. Konfigurasi variabel lingkungan dengan nilai Anda:
CHRONICLE_CUSTOMER_ID: "<your-chronicle-customer-id>"
CHRONICLE_REGION: us
CHRONICLE_SERVICE_ACCOUNT: "projects/<PROJECT_ID>/secrets/chronicle-service-account/versions/latest"
CHRONICLE_NAMESPACE: ""
POLL_INTERVAL: "5"
SLACK_ADMIN_TOKEN: "projects/<PROJECT_ID>/secrets/slack-admin-token/versions/latest"

Ganti kode berikut:

  • <your-chronicle-customer-id>: ID pelanggan Google SecOps Anda.
  • <PROJECT_ID>: ID project Google Cloud Anda.
  • CHRONICLE_REGION: Setel ke region Google SecOps Anda. Nilai yang valid: us, asia-northeast1, asia-south1, asia-southeast1, australia-southeast1, europe, europe-west2, europe-west3, europe-west6, europe-west9, europe-west12, me-central1, me-central2, me-west1, northamerica-northeast2, southamerica-east1.
  • POLL_INTERVAL: Interval frekuensi (dalam menit) saat fungsi dijalankan. Durasi ini harus sama dengan interval tugas Cloud Scheduler.
  1. Simpan file .env.yml.

Men-deploy fungsi Cloud Run

  1. Buka terminal atau Cloud Shell di Konsol Google Cloud.
  2. Buka direktori deployment Anda:
cd /path/to/deployment_directory
  1. Jalankan perintah berikut untuk men-deploy fungsi Cloud Run:
gcloud functions deploy slack-audit-to-chronicle \
  --entry-point main \
  --trigger-http \
  --runtime python39 \
  --env-vars-file .env.yml \
  --timeout 300s \
  --memory 512MB \
  --service-account <SERVICE_ACCOUNT_EMAIL>

Ganti <SERVICE_ACCOUNT_EMAIL> dengan alamat email akun layanan yang ingin digunakan oleh fungsi Cloud Run Anda.

  1. Tunggu hingga deployment selesai.
  2. Setelah di-deploy, catat URL fungsi dari output.

Menyiapkan Cloud Scheduler

  1. Di Konsol Google Cloud, buka Cloud Scheduler > Buat tugas.
  2. Berikan detail konfigurasi berikut:
    • Nama: Masukkan slack-audit-scheduler.
    • Region: Pilih region yang sama dengan tempat Anda men-deploy fungsi Cloud Run.
    • Frekuensi: Masukkan */5 * * * * (berjalan setiap 5 menit, cocok dengan nilai POLL_INTERVAL).
    • Zona waktu: Pilih UTC.
    • Jenis target: Pilih HTTP.
    • URL: Masukkan URL fungsi Cloud Run dari output deployment.
    • Metode HTTP: Pilih POST.
    • Header Auth: Pilih Tambahkan token OIDC.
    • Akun layanan: Pilih akun layanan yang sama yang digunakan untuk fungsi Cloud Run.
  3. Klik Create.

Opsi 2: Mengonfigurasi ekspor Log Audit Slack menggunakan AWS S3

Opsi ini menggunakan AWS Lambda untuk mengumpulkan Log Audit Slack dan menyimpannya di S3, lalu mengonfigurasi feed Google SecOps untuk menyerap log.

Mengonfigurasi bucket AWS S3 dan IAM untuk Google SecOps

  1. Buat bucket Amazon S3 dengan mengikuti panduan pengguna ini: Membuat bucket
  2. Simpan Name dan Region bucket untuk referensi di masa mendatang (misalnya, slack-audit-logs).
  3. Buat Pengguna dengan mengikuti panduan pengguna ini: Membuat pengguna IAM.
  4. Pilih Pengguna yang dibuat.
  5. Pilih tab Kredensial keamanan.
  6. Klik Create Access Key di bagian Access Keys.
  7. Pilih Layanan pihak ketiga sebagai Kasus penggunaan.
  8. Klik Berikutnya.
  9. Opsional: Tambahkan tag deskripsi.
  10. Klik Create access key.
  11. Klik Download file .csv untuk menyimpan Access Key dan Secret Access Key untuk referensi di masa mendatang.
  12. Klik Done.
  13. Pilih tab Permissions.
  14. Klik Tambahkan izin di bagian Kebijakan izin.
  15. Pilih Tambahkan izin.
  16. Pilih Lampirkan kebijakan secara langsung.
  17. Cari kebijakan AmazonS3FullAccess.
  18. Pilih kebijakan.
  19. Klik Berikutnya.
  20. Klik Add permissions.

Mengonfigurasi kebijakan dan peran IAM untuk upload S3

  1. Di konsol AWS, buka IAM > Policies > Create policy > JSON tab.
  2. Salin dan tempel kebijakan di bawah.
  3. Policy JSON (ganti slack-audit-logs jika Anda memasukkan nama bucket yang berbeda):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPutObjects",
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::slack-audit-logs/*"
    },
    {
      "Sid": "AllowGetStateObject",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::slack-audit-logs/slack/audit/state.json"
    }
  ]
}
  1. Klik Berikutnya.
  2. Masukkan nama kebijakan SlackAuditS3Policy.
  3. Klik Create policy.
  4. Buka IAM > Roles > Create role > AWS service > Lambda.
  5. Lampirkan kebijakan SlackAuditS3Policy yang baru dibuat.
  6. Beri nama peran SlackAuditToS3Role, lalu klik Buat peran.

Buat fungsi Lambda

  1. Di AWS Console, buka Lambda > Functions > Create function.
  2. Klik Buat dari awal.
  3. Berikan detail konfigurasi berikut:
Setelan Nilai
Nama slack_audit_to_s3
Runtime Python 3.13
Arsitektur x86_64
Peran eksekusi SlackAuditToS3Role
  1. Klik Create function.
  2. Setelah fungsi dibuat, buka tab Code, hapus stub, dan tempelkan kode di bawah (slack_audit_to_s3.py).
#!/usr/bin/env python3
# Lambda: Pull Slack Audit Logs (Enterprise Grid) to S3 (JSONL format)

import os, json, time, urllib.parse
from urllib.request import Request, urlopen
from urllib.error import HTTPError, URLError
import boto3

BASE_URL = "https://api.slack.com/audit/v1/logs"

TOKEN        = os.environ["SLACK_AUDIT_TOKEN"]  # org-level user token with auditlogs:read
BUCKET       = os.environ["S3_BUCKET"]
PREFIX       = os.environ.get("S3_PREFIX", "slack/audit/")
STATE_KEY    = os.environ.get("STATE_KEY", "slack/audit/state.json")
LIMIT        = int(os.environ.get("LIMIT", "200"))             # Slack recommends <= 200
MAX_PAGES    = int(os.environ.get("MAX_PAGES", "20"))
LOOKBACK_SEC = int(os.environ.get("LOOKBACK_SECONDS", "3600")) # First-run window
HTTP_TIMEOUT = int(os.environ.get("HTTP_TIMEOUT", "60"))
HTTP_RETRIES = int(os.environ.get("HTTP_RETRIES", "3"))
RETRY_AFTER_DEFAULT = int(os.environ.get("RETRY_AFTER_DEFAULT", "2"))
# Optional server-side filters (comma-separated 'action' values), empty means no filter
ACTIONS      = os.environ.get("ACTIONS", "").strip()

s3 = boto3.client("s3")


def _get_state() -> dict:
    try:
        obj = s3.get_object(Bucket=BUCKET, Key=STATE_KEY)
        st = json.loads(obj["Body"].read() or b"{}")
        return {"cursor": st.get("cursor")}
    except Exception:
        return {"cursor": None}


def _put_state(state: dict) -> None:
    body = json.dumps(state, separators=(",", ":")).encode("utf-8")
    s3.put_object(Bucket=BUCKET, Key=STATE_KEY, Body=body, ContentType="application/json")


def _http_get(params: dict) -> dict:
    qs  = urllib.parse.urlencode(params, doseq=True)
    url = f"{BASE_URL}?{qs}" if qs else BASE_URL
    req = Request(url, method="GET")
    req.add_header("Authorization", f"Bearer {TOKEN}")
    req.add_header("Accept", "application/json")

    attempt = 0
    while True:
        try:
            with urlopen(req, timeout=HTTP_TIMEOUT) as r:
                return json.loads(r.read().decode("utf-8"))
        except HTTPError as e:
            # Respect Retry-After on 429/5xx
            if e.code in (429, 500, 502, 503, 504) and attempt < HTTP_RETRIES:
                retry_after = 0
                try:
                    retry_after = int(e.headers.get("Retry-After", RETRY_AFTER_DEFAULT))
                except Exception:
                    retry_after = RETRY_AFTER_DEFAULT
                time.sleep(max(1, retry_after))
                attempt += 1
                continue
            # Re-raise other HTTP errors
            raise
        except URLError:
            if attempt < HTTP_RETRIES:
                time.sleep(RETRY_AFTER_DEFAULT)
                attempt += 1
                continue
            raise


def _write_page(data: dict, page_idx: int) -> str:
    """
    Extract entries from Slack API response and write as JSONL (one event per line).
    Chronicle requires newline-delimited JSON, not a JSON array.
    """
    entries = data.get("entries") or []
    
    if not entries:
        # No entries to write, skip file creation
        return None
    
    # Convert each entry to a single-line JSON string
    lines = [json.dumps(entry, separators=(",", ":")) for entry in entries]
    
    # Join with newlines to create JSONL format
    body = "\n".join(lines).encode("utf-8")
    
    # Write to S3
    ts  = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime())
    key = f"{PREFIX}{ts}-slack-audit-p{page_idx:05d}.json"
    s3.put_object(Bucket=BUCKET, Key=key, Body=body, ContentType="application/json")
    
    return key


def lambda_handler(event=None, context=None):
    state  = _get_state()
    cursor = state.get("cursor")

    params = {"limit": LIMIT}
    if ACTIONS:
        params["action"] = [a.strip() for a in ACTIONS.split(",") if a.strip()]
    if cursor:
        params["cursor"] = cursor
    else:
        # First run (or reset): fetch a recent window by time
        params["oldest"] = int(time.time()) - LOOKBACK_SEC

    pages = 0
    total = 0
    last_cursor = None

    while pages < MAX_PAGES:
        data = _http_get(params)
        
        # Write entries in JSONL format
        written_key = _write_page(data, pages)

        entries = data.get("entries") or []
        total += len(entries)

        # Cursor for next page
        meta = data.get("response_metadata") or {}
        next_cursor = meta.get("next_cursor") or data.get("next_cursor")
        if next_cursor:
            params = {"limit": LIMIT, "cursor": next_cursor}
            if ACTIONS:
                params["action"] = [a.strip() for a in ACTIONS.split(",") if a.strip()]
            last_cursor = next_cursor
            pages += 1
            continue
        break

    if last_cursor:
        _put_state({"cursor": last_cursor})

    return {"ok": True, "pages": pages + (1 if total or last_cursor else 0), "entries": total, "cursor": last_cursor}


if __name__ == "__main__":
    print(lambda_handler())

  1. Buka Configuration > Environment variables > Edit > Add environment variable.
  2. Masukkan variabel lingkungan yang disediakan di bawah, lalu ganti dengan nilai Anda.

Variabel lingkungan

Kunci Nilai contoh
S3_BUCKET slack-audit-logs
S3_PREFIX slack/audit/
STATE_KEY slack/audit/state.json
SLACK_AUDIT_TOKEN xoxp-*** (token pengguna tingkat organisasi dengan auditlogs:read)
LIMIT 200
MAX_PAGES 20
LOOKBACK_SECONDS 3600
HTTP_TIMEOUT 60
HTTP_RETRIES 3
RETRY_AFTER_DEFAULT 2
ACTIONS (opsional, CSV) user_login,app_installed
  1. Klik Simpan.
  2. Pilih tab Configuration
  3. Di panel General configuration, klik Edit.
  4. Ubah Waktu Tunggu menjadi 5 menit (300 detik), lalu klik Simpan.

Membuat jadwal EventBridge

  1. Buka Amazon EventBridge > Scheduler > Create schedule.
  2. Berikan detail konfigurasi berikut:
    • Nama: Masukkan slack-audit-1h.
    • Jadwal berulang: Pilih Jadwal berbasis tarif.
    • Ekspresi tarif: Masukkan 1 jam.
    • Jangka waktu fleksibel: Pilih Nonaktif.
  3. Klik Berikutnya.
  4. Pilih Target:
    • Target API: Pilih AWS Lambda Invoke.
    • Fungsi Lambda: Pilih slack_audit_to_s3.
  5. Klik Berikutnya.
  6. Klik Berikutnya (lewati setelan opsional).
  7. Tinjau, lalu klik Buat jadwal.

(Opsional) Buat pengguna & kunci IAM hanya baca untuk Google SecOps

  1. Buka Konsol AWS > IAM > Users > Create user.
  2. Berikan detail konfigurasi berikut:
    • Nama pengguna: Masukkan secops-reader.
    • Jenis akses: Pilih Akses terprogram.
  3. Klik Berikutnya.
  4. Pilih Lampirkan kebijakan secara langsung.
  5. Klik Create policy.
  6. Di tab JSON, tempelkan:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": "arn:aws:s3:::slack-audit-logs/*"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": "arn:aws:s3:::slack-audit-logs"
    }
  ]
}
  1. Klik Berikutnya.
  2. Masukkan nama kebijakan secops-reader-policy.
  3. Klik Create policy.
  4. Kembali ke halaman pembuatan pengguna, muat ulang daftar kebijakan, lalu pilih secops-reader-policy.
  5. Klik Berikutnya.
  6. Klik Buat pengguna.
  7. Pilih secops-reader pengguna yang dibuat.
  8. Buka Kredensial keamanan > Kunci akses > Buat kunci akses.
  9. Pilih Layanan pihak ketiga.
  10. Klik Berikutnya.
  11. Klik Create access key.
  12. Klik Download file .csv untuk menyimpan kredensial.

Mengonfigurasi feed di Google SecOps untuk menyerap Log Audit Slack

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan baru.
  3. Di kolom Nama feed, masukkan nama untuk feed (misalnya, Slack Audit Logs).
  4. Pilih Amazon S3 V2 sebagai Jenis sumber.
  5. Pilih Slack Audit sebagai Jenis log.
  6. Klik Berikutnya.
  7. Tentukan nilai untuk parameter input berikut:
    • URI S3: s3://slack-audit-logs/slack/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 (dari secops-reader).
    • Kunci Akses Rahasia: Kunci rahasia pengguna dengan akses ke bucket S3 (dari secops-reader).
    • Namespace aset: Namespace aset.
    • Label penyerapan: Label yang diterapkan ke peristiwa dari feed ini.
  8. Klik Berikutnya.
  9. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

Tabel Pemetaan UDM

Kolom Log Pemetaan UDM Logika
action metadata.product_event_type Dipetakan langsung dari kolom action dalam log mentah.
actor.type principal.labels.value Dipetakan langsung dari kolom actor.type, dengan kunci actor.type ditambahkan.
actor.user.email principal.user.email_addresses Dipetakan langsung dari kolom actor.user.email.
actor.user.id principal.user.product_object_id Dipetakan langsung dari kolom actor.user.id.
actor.user.id principal.user.userid Dipetakan langsung dari kolom actor.user.id.
actor.user.name principal.user.user_display_name Dipetakan langsung dari kolom actor.user.name.
actor.user.team principal.user.group_identifiers Dipetakan langsung dari kolom actor.user.team.
context.ip_address principal.ip Dipetakan langsung dari kolom context.ip_address.
context.location.domain about.resource.attribute.labels.value Dipetakan langsung dari kolom context.location.domain, dengan kunci context.location.domain ditambahkan.
context.location.id about.resource.id Dipetakan langsung dari kolom context.location.id.
context.location.name about.resource.name Dipetakan langsung dari kolom context.location.name.
context.location.name about.resource.attribute.labels.value Dipetakan langsung dari kolom context.location.name, dengan kunci context.location.name ditambahkan.
context.location.type about.resource.resource_subtype Dipetakan langsung dari kolom context.location.type.
context.session_id network.session_id Dipetakan langsung dari kolom context.session_id.
context.ua network.http.user_agent Dipetakan langsung dari kolom context.ua.
context.ua network.http.parsed_user_agent Informasi agen pengguna yang diuraikan yang berasal dari kolom context.ua menggunakan filter parseduseragent.
country principal.location.country_or_region Dipetakan langsung dari kolom country.
date_create metadata.event_timestamp.seconds Stempel waktu epoch dari kolom date_create dikonversi menjadi objek stempel waktu.
details.inviter.email target.user.email_addresses Dipetakan langsung dari kolom details.inviter.email.
details.inviter.id target.user.product_object_id Dipetakan langsung dari kolom details.inviter.id.
details.inviter.name target.user.user_display_name Dipetakan langsung dari kolom details.inviter.name.
details.inviter.team target.user.group_identifiers Dipetakan langsung dari kolom details.inviter.team.
details.reason security_result.description Dipetakan langsung dari kolom details.reason, atau jika berupa array, digabungkan dengan koma.
details.type about.resource.attribute.labels.value Dipetakan langsung dari kolom details.type, dengan kunci details.type ditambahkan.
details.type security_result.summary Dipetakan langsung dari kolom details.type.
entity.app.id target.resource.id Dipetakan langsung dari kolom entity.app.id.
entity.app.name target.resource.name Dipetakan langsung dari kolom entity.app.name.
entity.channel.id target.resource.id Dipetakan langsung dari kolom entity.channel.id.
entity.channel.name target.resource.name Dipetakan langsung dari kolom entity.channel.name.
entity.channel.privacy target.resource.attribute.labels.value Dipetakan langsung dari kolom entity.channel.privacy, dengan kunci entity.channel.privacy ditambahkan.
entity.file.filetype target.resource.attribute.labels.value Dipetakan langsung dari kolom entity.file.filetype, dengan kunci entity.file.filetype ditambahkan.
entity.file.id target.resource.id Dipetakan langsung dari kolom entity.file.id.
entity.file.name target.resource.name Dipetakan langsung dari kolom entity.file.name.
entity.file.title target.resource.attribute.labels.value Dipetakan langsung dari kolom entity.file.title, dengan kunci entity.file.title ditambahkan.
entity.huddle.date_end about.resource.attribute.labels.value Dipetakan langsung dari kolom entity.huddle.date_end, dengan kunci entity.huddle.date_end ditambahkan.
entity.huddle.date_start about.resource.attribute.labels.value Dipetakan langsung dari kolom entity.huddle.date_start, dengan kunci entity.huddle.date_start ditambahkan.
entity.huddle.id about.resource.attribute.labels.value Dipetakan langsung dari kolom entity.huddle.id, dengan kunci entity.huddle.id ditambahkan.
entity.huddle.participants.0 about.resource.attribute.labels.value Dipetakan langsung dari kolom entity.huddle.participants.0, dengan kunci entity.huddle.participants.0 ditambahkan.
entity.huddle.participants.1 about.resource.attribute.labels.value Dipetakan langsung dari kolom entity.huddle.participants.1, dengan kunci entity.huddle.participants.1 ditambahkan.
entity.type target.resource.resource_subtype Dipetakan langsung dari kolom entity.type.
entity.user.email target.user.email_addresses Dipetakan langsung dari kolom entity.user.email.
entity.user.id target.user.product_object_id Dipetakan langsung dari kolom entity.user.id.
entity.user.name target.user.user_display_name Dipetakan langsung dari kolom entity.user.name.
entity.user.team target.user.group_identifiers Dipetakan langsung dari kolom entity.user.team.
entity.workflow.id target.resource.id Dipetakan langsung dari kolom entity.workflow.id.
entity.workflow.name target.resource.name Dipetakan langsung dari kolom entity.workflow.name.
id metadata.product_log_id Dipetakan langsung dari kolom id.
ip principal.ip Dipetakan langsung dari kolom ip. Ditentukan oleh logika berdasarkan kolom action. Nilai defaultnya adalah USER_COMMUNICATION, tetapi berubah menjadi nilai lain seperti USER_CREATION, USER_LOGIN, USER_LOGOUT, USER_RESOURCE_ACCESS, USER_RESOURCE_UPDATE_PERMISSIONS, atau USER_CHANGE_PERMISSIONS berdasarkan nilai action. Dikodekan secara permanen ke "SLACK_AUDIT". Ditetapkan ke "Enterprise Grid" jika date_create ada, atau ditetapkan ke "Audit Logs" jika user_id ada. Dikodekan secara permanen ke "Slack". Dikodekan secara permanen ke "REMOTE". Setel ke "SSO" jika action berisi "user_login" atau "user_logout". Jika tidak, tetapkan ke "MACHINE". Tidak dipetakan dalam contoh yang diberikan. Default-nya adalah "ALLOW", tetapi disetel ke "BLOCK" jika action adalah "user_login_failed". Disetel ke "Slack" jika date_create ada, atau disetel ke "SLACK" jika user_id ada.
user_agent network.http.user_agent Dipetakan langsung dari kolom user_agent.
user_id principal.user.product_object_id Dipetakan langsung dari kolom user_id.
username principal.user.product_object_id Dipetakan langsung dari kolom username.

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