Slack-Audit-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Slack-Audit-Logs mit Google Cloud Run Functions oder Amazon S3 mit AWS Lambda in Google Security Operations aufnehmen.
Slack-Audit-Logs enthalten detaillierte Informationen zu sicherheitsrelevanten Ereignissen in Ihrer Slack Enterprise Grid-Organisation. Mit der Audit Logs API können Sie Nutzeraktionen wie Anmeldungen, Dateidownloads, App-Installationen und administrative Änderungen zu Compliance- und Sicherheitsüberwachungszwecken überwachen.
Hinweis
Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Ein Slack Enterprise Grid-Abo mit Organization Owner- oder Admin-Zugriff
Privilegierter Zugriff auf:
- Google Cloud (für Option 1: Cloud Run Functions und Cloud Scheduler) oder
- AWS (für Option 2: S3, IAM, Lambda, EventBridge)
Slack-Anmeldedaten erfassen
Slack-App erstellen
Für die Slack Audit Logs API ist ein User-OAuth-Token mit dem Bereich auditlogs:read erforderlich. Dieses Token muss durch die Installation einer App auf Enterprise Grid-Organisationsebene und nicht auf Arbeitsbereichsebene abgerufen werden.
- Melden Sie sich mit einem Konto des Eigentümers oder Administrators einer Enterprise Grid-Organisation in der Slack-Admin-Konsole an.
- Rufen Sie die Seite Slack API-Apps auf.
- Klicken Sie auf Neue App erstellen.
- Wählen Sie From scratch (Von Grund auf) aus.
- Geben Sie die folgenden Konfigurationsdetails an:
- App-Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
Google SecOps Audit Integration. - Wählen Sie einen Workspace für die Entwicklung Ihrer App aus: Wählen Sie Ihren Slack-Entwicklungsarbeitsbereich aus (einen beliebigen Workspace in der Organisation).
- App-Name: Geben Sie einen aussagekräftigen Namen ein, z. B.
- Klicken Sie auf Anwendung erstellen.
OAuth-Bereiche konfigurieren
- Wählen Sie auf der Einstellungsseite Ihrer App im linken Navigationsbereich OAuth & Berechtigungen aus.
- Scrollen Sie nach unten zum Abschnitt Bereiche.
- Klicken Sie unter Bereiche für Nutzer-Token (NICHT Bereiche für Bot-Token) auf OAuth-Bereich hinzufügen.
- Fügen Sie den folgenden Bereich hinzu:
auditlogs:read: Dieser Bereich ermöglicht den Zugriff auf die Audit Logs API für die Enterprise Grid-Organisation.
- Klicken Sie unter Bereiche für Bot-Token auf OAuth-Bereich hinzufügen.
Fügen Sie den folgenden Bereich hinzu:
users:read: Dieser Bereich ist erforderlich, um die App-Installation auf Organisationsebene zu aktivieren.
Weiterleitungs-URL konfigurieren
- Wählen Sie auf der Einstellungsseite Ihrer App im linken Navigationsbereich OAuth & Berechtigungen aus.
- Rufen Sie den Abschnitt Weiterleitungs-URLs auf.
- Klicken Sie auf Neue Weiterleitungs-URL hinzufügen.
Gib die folgende URL ein:
https://slack.com/oauth/v2/authorizeKlicken Sie auf Hinzufügen.
Klicken Sie auf URLs speichern.
Öffentliche Verteilung aktivieren
Wenn Sie eine App auf Organisationsebene (nicht nur in einem Arbeitsbereich) installieren möchten, müssen Sie die öffentliche Verteilung aktivieren.
Warum ist eine öffentliche Verteilung erforderlich?
- Für Apps mit organisationsweiten Berechtigungen muss die öffentliche Bereitstellung aktiviert sein.
- Dadurch können Sie Add-ons auf Organisationsebene anstelle von einzelnen Arbeitsbereichen installieren.
- Andernfalls können Sie die App nur in einem einzelnen Workspace in Ihrem Enterprise Grid installieren.
- Wenn Sie die öffentliche Bereitstellung aktivieren, werden lediglich interne Einschränkungen des Installationsbereichs entfernt.
So aktivieren Sie die öffentliche Verteilung:
- Wählen Sie auf der Einstellungsseite Ihrer App im linken Navigationsbereich Vertrieb verwalten aus.
- Prüfen Sie unter Anwendung für andere Arbeitsbereiche freigeben, ob alle vier Abschnitte mit grünen Häkchen versehen sind:
- Fest codierte Informationen entfernen
- Öffentliche Bereitstellung aktivieren
- Weiterleitungs-URL festlegen
- OAuth-Bereich hinzufügen
- Wenn in einem Bereich ein rotes X angezeigt wird, maximieren Sie ihn und führen Sie die erforderliche Aktion aus.
- Setzen Sie ein Häkchen in das Kästchen neben Ich habe alle fest codierten Informationen überprüft und entfernt.
- Klicken Sie auf Öffentliche Bereitstellung aktivieren.
App in einer Enterprise-Organisation installieren
- Wählen Sie auf der Einstellungsseite Ihrer App im linken Navigationsbereich OAuth & Berechtigungen aus.
- Kopieren Sie unter Anwendung für meinen Arbeitsbereich freigeben die Freigabefähige URL.
- Geben Sie die URL in Ihren Browser ein.
- Wichtig: Prüfen Sie auf dem Installationsbildschirm das Drop-down-Menü oben rechts.
- Achten Sie darauf, dass Sie die App in der Enterprise-Organisation und NICHT in einem einzelnen Arbeitsbereich installieren.
- Wenn Sie in der Drop-down-Liste einen Arbeitsbereichsnamen sehen, klicken Sie darauf und wählen Sie stattdessen den Namen Ihrer Enterprise-Organisation aus.
- Prüfen Sie die angeforderten Berechtigungen und klicken Sie auf Zulassen.
Anmeldedaten abrufen
Nach Abschluss der Autorisierung werden Sie zur Seite OAuth und Berechtigungen weitergeleitet.
- Suchen Sie unter OAuth-Tokens für Ihren Arbeitsbereich nach dem OAuth-Nutzer-Token.
- Das Token beginnt mit
xoxp-. Klicken Sie auf Kopieren und speichern Sie dieses Token sicher.
Notieren Sie sich Ihre Organisations-ID:
- Rufen Sie die Slack-Admin-Konsole auf.
- Gehen Sie zu Einstellungen und Berechtigungen > Organisationseinstellungen.
- Kopieren Sie die Organisations-ID.
Berechtigungen prüfen
So prüfen Sie, ob Ihre App die erforderlichen Berechtigungen hat:
- Rufen Sie die Seite Slack API-Apps auf.
- Wählen Sie Ihre App aus.
- Wählen Sie im linken Navigationsbereich OAuth & Berechtigungen aus.
- Prüfen Sie unter OAuth-Tokens für Ihren Arbeitsbereich, ob ein OAuth-Nutzer-Token angezeigt wird (beginnt mit
xoxp-). - Prüfen Sie unter Bereiche, ob
auditlogs:readunter Bereiche für Nutzer-Token angezeigt wird.
API-Zugriff testen
Testen Sie Ihr Token, bevor Sie mit der Integration fortfahren:
SLACK_TOKEN="xoxp-your-token-here" curl -H "Authorization: Bearer $SLACK_TOKEN" \ "https://api.slack.com/audit/v1/logs?limit=1"Eine erfolgreiche Antwort enthält ein
entries-Array mit Audit-Log-Ereignissen. Wenn Sie eineninvalid_auth- odermissing_scope-Fehler erhalten, überprüfen Sie Ihr Token und Ihre Bereiche.
Option 1: Slack-Audit-Logs-Export mit Google Cloud Run Functions konfigurieren
Bei dieser Option werden Google Cloud Run Functions und Cloud Scheduler verwendet, um Slack-Audit-Logs zu erfassen und mithilfe der Chronicle-Aufnahmeskripts direkt in Google SecOps aufzunehmen.
Hinweise (Option 1)
Prüfen Sie, ob die folgenden zusätzlichen Voraussetzungen erfüllt sind:
- Ein GCP-Projekt mit den folgenden aktivierten APIs:
- Cloud Functions API
- Cloud Scheduler API
- Secret Manager API
- Berechtigungen zum Erstellen von Cloud Functions, Cloud Scheduler-Jobs und Secrets in Secret Manager
- Eine JSON-Datei für das Google SecOps-Dienstkonto
Google SecOps-Dienstkonto abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
- Laden Sie die Authentifizierungsdatei für die Aufnahme herunter.
Speichern Sie die JSON-Datei sicher. Sie laden diese als Secret in Google Secret Manager hoch.
Funktionscode vorbereiten
Laden Sie die Bereitstellungsdateien aus dem GitHub-Repository für Chronicle-Aufnahmeskripts herunter:
- Laden Sie aus dem Ordner
slackFolgendes herunter:.env.ymlmain.pyrequirements.txt
Laden Sie das gesamte Verzeichnis
commonmit allen Dateien aus dem Stammverzeichnis des Repositorys herunter.Ihr Bereitstellungsverzeichnis sollte die folgende Struktur haben:
deployment_directory/ ├── common/ │ ├── __init__.py │ ├── auth.py │ ├── env_constants.py │ ├── ingest.py │ ├── status.py │ └── utils.py ├── .env.yml ├── main.py └── requirements.txt
Secrets in Google Secret Manager konfigurieren
Speichern Sie vertrauliche Anmeldedaten in Secret Manager, damit die Cloud Run-Funktion sicher darauf zugreifen kann.
Secret für das Google SecOps-Dienstkonto erstellen
- Wechseln Sie in der GCP Console zu Sicherheit > Secret Manager.
- Klicken Sie auf Secret erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
chronicle-service-accountein. - Secret-Wert: Geben Sie den gesamten Inhalt der JSON-Datei des Google SecOps-Dienstkontos ein.
- Name: Geben Sie
- Klicken Sie auf Secret erstellen.
Kopieren Sie den Ressourcennamen des Secrets. Das Format dafür ist:
projects/PROJECT_ID/secrets/chronicle-service-account/versions/latest
Secret für Slack-Token erstellen
- Klicken Sie auf der Seite Secret Manager auf Secret erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
slack-admin-tokenein. - Secret-Wert: Geben Sie das Slack-OAuth-Token des Nutzers ein (beginnt mit
xoxp-).
- Name: Geben Sie
- Klicken Sie auf Secret erstellen.
Kopieren Sie den Ressourcennamen des Secrets. Das Format dafür ist:
projects/PROJECT_ID/secrets/slack-admin-token/versions/latest
Umgebungsvariablen konfigurieren
Öffnen Sie die Datei
.env.ymlin Ihrem Bereitstellungsverzeichnis und konfigurieren Sie die Umgebungsvariablen: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"Ersetzen Sie Folgendes:
<your-chronicle-customer-id>: Ihre Google SecOps-Kundennummer.<PROJECT_ID>: Ihre Google Cloud-Projekt-ID.CHRONICLE_REGION: Auf Ihre Google SecOps-Region festgelegt. Gültige Werte: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: Das Häufigkeitsintervall (in Minuten), in dem die Funktion ausgeführt wird. Diese Dauer muss mit dem Intervall des Cloud Scheduler-Jobs übereinstimmen.
Speichern Sie die Datei
.env.yml.
Cloud Run-Funktion bereitstellen
Öffnen Sie ein Terminal oder eine Cloud Shell in der Google Cloud Console. Wechseln Sie zu Ihrem Bereitstellungsverzeichnis und führen Sie den folgenden Befehl aus:
gcloud functions deploy slack-audit-to-chronicle \ --entry-point main \ --trigger-http \ --runtime python312 \ --env-vars-file .env.yml \ --timeout 540s \ --memory 512MB \ --service-account <SERVICE_ACCOUNT_EMAIL>Ersetzen Sie
<SERVICE_ACCOUNT_EMAIL>durch die E-Mail-Adresse des Dienstkontos, das von Ihrer Cloud Run-Funktion verwendet werden soll.Warten Sie, bis die Bereitstellung abgeschlossen ist. Notieren Sie sich nach der Bereitstellung die Funktions-URL aus der Ausgabe.
Cloud Scheduler einrichten
- Rufen Sie in der GCP Console Cloud Scheduler > Job erstellen auf.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Name slack-audit-schedulerRegion Wählen Sie dieselbe Region aus, in der Sie die Cloud Run-Funktion bereitgestellt haben. Frequenz */5 * * * *(alle 5 Minuten, passend zumPOLL_INTERVAL-Wert)Zeitzone Zeitzone auswählen (UTC empfohlen) Klicken Sie auf Weiter.
Im Abschnitt Ausführung konfigurieren:
- Zieltyp: Wählen Sie HTTP aus.
- URL: Geben Sie die Cloud Run-Funktions-URL aus der Bereitstellungsausgabe ein.
- HTTP-Methode: Wählen Sie POST aus.
Im Abschnitt Auth-Header:
- Wählen Sie OIDC-Token hinzufügen aus.
- Dienstkonto: Wählen Sie dasselbe Dienstkonto aus, das für die Cloud Run-Funktion verwendet wird.
Klicken Sie auf Erstellen.
Optionen für die Häufigkeit des Zeitplans
Wählen Sie die Häufigkeit basierend auf dem Logvolumen und den Latenzanforderungen aus:
| Häufigkeit | Cron-Ausdruck | Anwendungsfall |
|---|---|---|
| Alle 5 Minuten | */5 * * * * |
Standard (empfohlen) |
| Alle 15 Minuten | */15 * * * * |
Mittleres Suchvolumen |
| Stündlich | 0 * * * * |
Geringe Lautstärke |
Integration testen (Option 1)
- Suchen Sie in der Cloud Scheduler-Konsole nach Ihrem Job (
slack-audit-scheduler). - Klicken Sie auf Force run (Ausführung erzwingen), um den Job manuell auszulösen.
- Warten Sie einige Sekunden.
- Rufen Sie Cloud Functions auf.
- Klicken Sie auf den Funktionsnamen (
slack-audit-to-chronicle). - Klicken Sie auf den Tab Logs.
Prüfen Sie, ob die Funktion erfolgreich ausgeführt wurde. Darauf sollten Sie achten:
Retrieving the Slack Audit logs since: YYYY-MM-DDTHH:MM:SSZ Processing logs... Retrieved X audit logs from the API call Logs processed successfully.
Option 2: Export von Slack-Audit-Logs mit AWS S3 konfigurieren
Bei dieser Option werden AWS Lambda verwendet, um Slack-Audit-Logs zu erfassen und in Amazon S3 zu speichern. Anschließend wird ein Google SecOps-Feed konfiguriert, um die Logs aufzunehmen.
Hinweise (Option 2)
Prüfen Sie, ob die folgende zusätzliche Voraussetzung erfüllt ist:
- Ein AWS-Konto mit Berechtigungen zum Erstellen von S3-Buckets, IAM-Nutzern/-Rollen/-Richtlinien, Lambda-Funktionen und EventBridge-Regeln.
Amazon S3-Bucket erstellen
- Erstellen Sie einen Amazon S3-Bucket gemäß der Anleitung im Nutzerhandbuch zum Erstellen von Buckets.
- Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung (z. B.
slack-audit-logs).
IAM-Richtlinie und ‑Rolle für S3-Uploads konfigurieren
- Rufen Sie in der AWS Console den Tab IAM > Policies > Create policy > JSON auf.
Geben Sie die folgende Richtlinie ein. Ersetzen Sie
slack-audit-logs, wenn Sie einen anderen Bucket-Namen verwendet haben:{ "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" } ] }Klicken Sie auf Weiter.
Geben Sie den Richtliniennamen
SlackAuditS3Policyein.Klicken Sie auf Richtlinie erstellen.
Gehen Sie zu IAM > Rollen > Rolle erstellen > AWS-Service > Lambda.
Hängen Sie die neu erstellte Richtlinie
SlackAuditS3Policyan.Geben Sie der Rolle den Namen
SlackAuditToS3Roleund klicken Sie auf Rolle erstellen.
Lambda-Funktion erstellen
- Rufen Sie in der AWS Console Lambda > Funktionen > Funktion erstellen auf.
- Klicken Sie auf Von Grund auf erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Name slack_audit_to_s3Laufzeit Python 3.13 Architektur x86_64 Ausführungsrolle SlackAuditToS3RoleKlicken Sie auf Funktion erstellen.
Nachdem die Funktion erstellt wurde, öffnen Sie den Tab Code, löschen Sie den Stub und geben Sie den folgenden Code ein (
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"] 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")) MAX_PAGES = int(os.environ.get("MAX_PAGES", "20")) LOOKBACK_SEC = int(os.environ.get("LOOKBACK_SECONDS", "3600")) 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) 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 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.""" entries = data.get("entries") or [] if not entries: return None lines = [json.dumps(entry, separators=(",", ":")) for entry in entries] body = "\n".join(lines).encode("utf-8") 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_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())
Lambda-Umgebungsvariablen konfigurieren
- Klicken Sie auf Konfiguration > Umgebungsvariablen > Bearbeiten > Umgebungsvariable hinzufügen.
Geben Sie die folgenden Umgebungsvariablen ein und ersetzen Sie die Platzhalter durch Ihre Werte:
Schlüssel Beispielwert SLACK_AUDIT_TOKENxoxp-...(Nutzer-Token auf Organisationsebene mitauditlogs:read)S3_BUCKETslack-audit-logsS3_PREFIXslack/audit/STATE_KEYslack/audit/state.jsonLIMIT200MAX_PAGES20LOOKBACK_SECONDS3600HTTP_TIMEOUT60HTTP_RETRIES3RETRY_AFTER_DEFAULT2ACTIONS(optional, kommagetrennter Aktionsfilter) Klicken Sie auf Speichern.
Wählen Sie den Tab Konfiguration aus. Klicken Sie im Bereich Allgemeine Konfiguration auf Bearbeiten.
Ändern Sie Zeitlimit in
5 minutes(300 Sekunden) und klicken Sie auf Speichern.
EventBridge-Zeitplan erstellen
- Gehen Sie zu Amazon EventBridge > Scheduler > Create schedule (Amazon EventBridge > Scheduler > Zeitplan erstellen).
- Geben Sie die folgenden Konfigurationsdetails an:
- Name: Geben Sie
slack-audit-1hein. - Wiederkehrender Zeitplan: Wählen Sie Ratenbasierter Zeitplan aus.
- Raten-Ausdruck: Geben Sie
1 hoursein. - Flexibles Zeitfenster: Wählen Sie Aus aus.
- Name: Geben Sie
- Klicken Sie auf Weiter.
- Ziel auswählen:
- Ziel-API: Wählen Sie AWS Lambda Invoke aus.
- Lambda-Funktion: Wählen Sie
slack_audit_to_s3aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Weiter (überspringen Sie optionale Einstellungen).
- Prüfen Sie den Zeitplan und klicken Sie auf Zeitplan erstellen.
Optional: IAM-Nutzer mit Lesezugriff für Google SecOps erstellen
- Rufen Sie die AWS-Konsole > IAM > Nutzer > Nutzer erstellen auf.
- Geben Sie die folgenden Konfigurationsdetails an:
- Nutzername: Geben Sie
secops-readerein. - Zugriffstyp: Wählen Sie Programmatischer Zugriff aus.
- Nutzername: Geben Sie
- Klicken Sie auf Weiter.
- Wählen Sie Richtlinien direkt anhängen aus.
Klicken Sie auf Richtlinie erstellen. Geben Sie auf dem Tab JSON Folgendes ein:
{ "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" } ] }Klicken Sie auf Weiter.
Geben Sie den Richtliniennamen
secops-reader-policyein.Klicken Sie auf Richtlinie erstellen.
Kehren Sie zur Seite zur Nutzererstellung zurück, aktualisieren Sie die Richtlinienliste und wählen Sie
secops-reader-policyaus.Klicken Sie auf Weiter.
Klicken Sie auf Nutzer erstellen.
Wählen Sie den erstellten Nutzer
secops-readeraus.Rufen Sie Sicherheitsanmeldedaten > Zugriffsschlüssel > Zugriffsschlüssel erstellen auf.
Wählen Sie Drittanbieterdienst aus.
Klicken Sie auf Weiter.
Klicken Sie auf Zugriffsschlüssel erstellen.
Klicken Sie auf CSV-Datei herunterladen, um die Anmeldedaten zu speichern.
Feed in Google SecOps konfigurieren, um Slack-Audit-Logs aufzunehmen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf Einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Slack Audit Logs. - Wählen Sie Amazon S3 V2 als Quelltyp aus.
- Wählen Sie Slack Audit als Log type (Logtyp) aus.
Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
S3-URI: Geben Sie den S3-Bucket-URI mit dem Präfixpfad ein:
s3://slack-audit-logs/slack/audit/Ersetzen Sie
slack-audit-logsdurch den Namen Ihres tatsächlichen S3-Buckets.Option zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus.
Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
Zugriffsschlüssel-ID: Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket (vom
secops-reader-IAM-Nutzer).Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket (vom
secops-reader-IAM-Nutzer).Asset-Namespace: Der Asset-Namespace.
Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
action |
metadata.product_event_type |
Direkt aus dem Feld action zugeordnet |
actor.type |
principal.labels |
Direkt mit dem Schlüssel actor.type zugeordnet |
actor.user.email |
principal.user.email_addresses |
Direkt zugeordnet |
actor.user.id |
principal.user.product_object_id |
Direkt zugeordnet |
actor.user.id |
principal.user.userid |
Direkt zugeordnet |
actor.user.name |
principal.user.user_display_name |
Direkt zugeordnet |
actor.user.team |
principal.user.group_identifiers |
Direkt zugeordnet |
context.ip_address |
principal.ip |
Direkt zugeordnet |
context.location.domain |
about.resource.attribute.labels |
Direkt mit dem Schlüssel context.location.domain zugeordnet |
context.location.id |
about.resource.id |
Direkt zugeordnet |
context.location.name |
about.resource.name |
Direkt zugeordnet |
context.location.name |
about.resource.attribute.labels |
Direkt mit dem Schlüssel context.location.name zugeordnet |
context.location.type |
about.resource.resource_subtype |
Direkt zugeordnet |
context.session_id |
network.session_id |
Direkt zugeordnet |
context.ua |
network.http.user_agent |
Direkt zugeordnet |
context.ua |
network.http.parsed_user_agent |
Geparster User-Agent, der aus dem Feld context.ua abgeleitet wurde |
country |
principal.location.country_or_region |
Direkt zugeordnet |
date_create |
metadata.event_timestamp.seconds |
Epoch-Zeitstempel in Zeitstempelobjekt konvertiert |
details.inviter.email |
target.user.email_addresses |
Direkt zugeordnet |
details.inviter.id |
target.user.product_object_id |
Direkt zugeordnet |
details.inviter.name |
target.user.user_display_name |
Direkt zugeordnet |
details.inviter.team |
target.user.group_identifiers |
Direkt zugeordnet |
details.reason |
security_result.description |
Direkt zugeordnet; bei einem Array durch Kommas verkettet |
details.type |
about.resource.attribute.labels |
Direkt mit dem Schlüssel details.type zugeordnet |
details.type |
security_result.summary |
Direkt zugeordnet |
entity.app.id |
target.resource.id |
Direkt zugeordnet |
entity.app.name |
target.resource.name |
Direkt zugeordnet |
entity.channel.id |
target.resource.id |
Direkt zugeordnet |
entity.channel.name |
target.resource.name |
Direkt zugeordnet |
entity.channel.privacy |
target.resource.attribute.labels |
Direkt mit dem Schlüssel entity.channel.privacy zugeordnet |
entity.file.filetype |
target.resource.attribute.labels |
Direkt mit dem Schlüssel entity.file.filetype zugeordnet |
entity.file.id |
target.resource.id |
Direkt zugeordnet |
entity.file.name |
target.resource.name |
Direkt zugeordnet |
entity.file.title |
target.resource.attribute.labels |
Direkt mit dem Schlüssel entity.file.title zugeordnet |
entity.huddle.date_end |
about.resource.attribute.labels |
Direkt mit dem Schlüssel entity.huddle.date_end zugeordnet |
entity.huddle.date_start |
about.resource.attribute.labels |
Direkt mit dem Schlüssel entity.huddle.date_start zugeordnet |
entity.huddle.id |
about.resource.attribute.labels |
Direkt mit dem Schlüssel entity.huddle.id zugeordnet |
entity.huddle.participants.0 |
about.resource.attribute.labels |
Direkt mit dem Schlüssel entity.huddle.participants.0 zugeordnet |
entity.huddle.participants.1 |
about.resource.attribute.labels |
Direkt mit dem Schlüssel entity.huddle.participants.1 zugeordnet |
entity.type |
target.resource.resource_subtype |
Direkt zugeordnet |
entity.user.email |
target.user.email_addresses |
Direkt zugeordnet |
entity.user.id |
target.user.product_object_id |
Direkt zugeordnet |
entity.user.name |
target.user.user_display_name |
Direkt zugeordnet |
entity.user.team |
target.user.group_identifiers |
Direkt zugeordnet |
entity.workflow.id |
target.resource.id |
Direkt zugeordnet |
entity.workflow.name |
target.resource.name |
Direkt zugeordnet |
id |
metadata.product_log_id |
Direkt zugeordnet |
ip |
principal.ip |
Direkt zugeordnet |
user_agent |
network.http.user_agent |
Direkt zugeordnet |
user_id |
principal.user.product_object_id |
Direkt zugeordnet |
username |
principal.user.product_object_id |
Direkt zugeordnet |
metadata.event_type |
Der Standardwert ist USER_COMMUNICATION. Er wird auf USER_CREATION festgelegt, wenn die Aktion user_created ist, auf USER_LOGIN, wenn die Aktion user_login oder user_login_failed ist, auf USER_LOGOUT, wenn die Aktion user_logout ist, auf USER_RESOURCE_ACCESS, wenn die Aktion mit file_ übereinstimmt, auf USER_RESOURCE_UPDATE_PERMISSIONS, wenn die Aktion mit app_, private_, public_ oder auth_policy_ übereinstimmt, auf USER_CHANGE_PERMISSIONS, wenn die Aktion mit pref, legal_hold_, workflow_, channel_, user_deactivated, user_reactivated, role_change_ oder user_channel_ übereinstimmt. |
|
metadata.log_type |
Fest codiert auf SLACK_AUDIT |
|
metadata.product_name |
Wird auf Enterprise Grid gesetzt, wenn date_create vorhanden ist, andernfalls auf Audit Logs, wenn user_id vorhanden ist. |
|
metadata.vendor_name |
Fest codiert auf Slack |
|
extensions.auth.mechanism |
Fest codiert auf REMOTE |
|
extensions.auth.type |
Wird auf SSO gesetzt, wenn die Aktion user_login oder user_logout enthält, andernfalls auf MACHINE. |
|
security_result.action |
Standardmäßig ALLOW; auf BLOCK festgelegt, wenn die Aktion user_login_failed ist |
|
target.application |
Wird auf Slack gesetzt, wenn date_create vorhanden ist, andernfalls auf SLACK, wenn user_id vorhanden ist. |
|
details.url_private |
target.url |
Aus dem Änderungsprotokoll zugeordnet |
details.previous_ip_address |
principal.labels |
Aus dem Änderungsprotokoll zugeordnet |
details.previous_ua |
principal.labels |
Aus dem Änderungsprotokoll zugeordnet |
Änderungsprotokoll
Änderungsprotokoll für diesen Parser ansehen
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten