Snowflake-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Snowflake-Logs in Google Security Operations aufnehmen. Sie können die Aufnahme mit zwei Methoden konfigurieren: Cloud Storage V2 (empfohlen) oder Amazon S3 V2. Beide Methoden verwenden auf Snowflake-Seite denselben Mechanismus: Eine geplante Aufgabe lädt Daten zur Kontonutzung in eine externe Phase und Google SecOps liest die exportierten Dateien mit einem Feed.
Snowflake ist eine Cloud-Datenplattform, die Kontoaktivitäten im Schema SNOWFLAKE.ACCOUNT_USAGE speichert. In der Ansicht LOGIN_HISTORY werden Authentifizierungsversuche aufgezeichnet, einschließlich der Client-IP-Adresse, des Authentifizierungsfaktors und des Grunds für den Fehler. In der Ansicht QUERY_HISTORY werden alle im Konto ausgeführten Anweisungen aufgezeichnet, einschließlich Nutzer, Rolle, Warehouse und betroffener Objekte.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Zugriff auf Snowflake mit einer Rolle, die Speicherintegrationen (nur
ACCOUNTADMINhat diese Berechtigung standardmäßig), Datenbanken, Warehouses, Stages und Aufgaben erstellen kann - Für Cloud Storage V2: ein Google Cloud -Projekt mit aktivierter Cloud Storage API und Berechtigungen zum Erstellen von Buckets, zum Erstellen von IAM-Rollen (Identity and Access Management) und zum Verwalten von IAM-Richtlinien für Buckets
- Für Amazon S3 V2: privilegierter Zugriff auf AWS, um S3-Buckets, IAM-Richtlinien, IAM-Rollen und IAM-Nutzer zu erstellen
Zugriff auf Nutzungsdaten des Snowflake-Kontos gewähren
Die SNOWFLAKE.ACCOUNT_USAGE-Ansichten sind nur für ACCOUNTADMIN lesbar, bis der Zugriff explizit gewährt wird. Erstellen Sie eine dedizierte Rolle für den Export und weisen Sie ihr die beiden Datenbankrollen zu, die die Ansichten abdecken, die dieses Dokument exportiert.
- Melden Sie sich in Snowflake an und öffnen Sie ein Arbeitsblatt.
Erstellen Sie die Exportrolle und gewähren Sie ihr Lesezugriff auf die Ansichten zur Kontonutzung:
USE ROLE ACCOUNTADMIN; CREATE ROLE IF NOT EXISTS SECOPS_EXPORTER; GRANT DATABASE ROLE SNOWFLAKE.SECURITY_VIEWER TO ROLE SECOPS_EXPORTER; GRANT DATABASE ROLE SNOWFLAKE.GOVERNANCE_VIEWER TO ROLE SECOPS_EXPORTER;Erstellen Sie die Datenbank, das Schema und das Warehouse, die für den Export verwendet werden, und weisen Sie sie der Rolle so zu:
CREATE DATABASE IF NOT EXISTS SECOPS_EXPORT; CREATE SCHEMA IF NOT EXISTS SECOPS_EXPORT.ACTIVITY; CREATE WAREHOUSE IF NOT EXISTS SECOPS_EXPORT_WH WITH WAREHOUSE_SIZE = 'XSMALL' AUTO_SUSPEND = 60 AUTO_RESUME = TRUE INITIALLY_SUSPENDED = TRUE; GRANT USAGE ON DATABASE SECOPS_EXPORT TO ROLE SECOPS_EXPORTER; GRANT USAGE, CREATE STAGE, CREATE TABLE, CREATE PROCEDURE, CREATE TASK, CREATE FILE FORMAT ON SCHEMA SECOPS_EXPORT.ACTIVITY TO ROLE SECOPS_EXPORTER; GRANT USAGE, OPERATE ON WAREHOUSE SECOPS_EXPORT_WH TO ROLE SECOPS_EXPORTER; GRANT EXECUTE TASK ON ACCOUNT TO ROLE SECOPS_EXPORTER; GRANT ROLE SECOPS_EXPORTER TO USER <YOUR_USER>;- Ersetzen Sie
<YOUR_USER>durch den Snowflake-Nutzer, der Inhaber des Exports ist.
- Ersetzen Sie
Methode 1: Cloud Storage V2 (empfohlen)
Cloud Storage-Bucket erstellen
- Rufen Sie die Google Cloud Console auf.
- Wählen Sie Ihr Projekt aus oder erstellen Sie ein neues.
- Rufen Sie im Navigationsmenü Cloud Storage > Buckets auf.
- Klicken Sie auf Bucket erstellen.
Geben Sie die folgenden Konfigurationsdetails an:
Einstellung Wert Bucket benennen Geben Sie einen global eindeutigen Namen ein (z. B. snowflake-activity-logs).Standorttyp Wählen Sie die Option, die am besten zu Ihren Anforderungen passt (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Standort aus (z. B. us-central1).Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird) Zugriffssteuerung Einheitlich (empfohlen) Schutztools Optional: Objektversionsverwaltung oder Aufbewahrungsrichtlinie aktivieren Klicken Sie auf Erstellen.
Benutzerdefinierte Cloud Storage-Rolle für Snowflake erstellen
- Rufen Sie in der Google Cloud Console IAM & Verwaltung > Rollen auf.
- Klicken Sie auf Rolle erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Titel: Geben Sie
Snowflake Unloadein. - ID: Geben Sie
snowflake_unloadein. - Rollenstartphase: Wählen Sie Allgemeine Verfügbarkeit aus.
- Titel: Geben Sie
- Klicken Sie auf Berechtigungen hinzufügen und fügen Sie die folgenden Berechtigungen hinzu:
storage.buckets.getstorage.objects.createstorage.objects.deletestorage.objects.list
Klicken Sie auf Erstellen.
Snowflake-Speichereinbindung für Cloud Storage erstellen
Erstellen Sie in einem Snowflake-Arbeitsblatt die Speicherintegration so:
USE ROLE ACCOUNTADMIN; CREATE STORAGE INTEGRATION SECOPS_GCS_INT TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'GCS' ENABLED = TRUE STORAGE_ALLOWED_LOCATIONS = ('gcs://snowflake-activity-logs/snowflake/'); GRANT USAGE ON INTEGRATION SECOPS_GCS_INT TO ROLE SECOPS_EXPORTER;- Ersetzen Sie
snowflake-activity-logsdurch den Namen Ihres Buckets.
- Ersetzen Sie
Rufen Sie das Dienstkonto, das Snowflake für die Integration erstellt hat, so ab:
DESC STORAGE INTEGRATION SECOPS_GCS_INT;Kopieren Sie den Wert des Attributs
STORAGE_GCP_SERVICE_ACCOUNT. Der Wert hat folgendes Format:service-account-id@project1-123456.iam.gserviceaccount.com
Dem Snowflake-Dienstkonto Zugriff auf den Bucket gewähren
- Rufen Sie in der Google Cloud Console Cloud Storage > Buckets auf.
- Klicken Sie auf den Bucket, den Sie erstellt haben (z. B.
snowflake-activity-logs). - Wechseln Sie zum Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie die folgenden Konfigurationsdetails an:
- Hauptkonten hinzufügen: Fügen Sie den Wert
STORAGE_GCP_SERVICE_ACCOUNTein. - Rollen zuweisen: Wählen Sie Snowflake Unload aus.
- Hauptkonten hinzufügen: Fügen Sie den Wert
- Klicken Sie auf Speichern.
Dateiformat und externe Stage erstellen
Erstellen Sie in einem Snowflake-Arbeitsblatt das Dateiformat und die Stage, die in den Bucket schreibt, so:
USE ROLE SECOPS_EXPORTER; USE SCHEMA SECOPS_EXPORT.ACTIVITY; CREATE OR REPLACE FILE FORMAT SECOPS_JSON_FORMAT TYPE = JSON; CREATE OR REPLACE STAGE SECOPS_EXPORT_STAGE URL = 'gcs://snowflake-activity-logs/snowflake/' STORAGE_INTEGRATION = SECOPS_GCS_INT FILE_FORMAT = SECOPS_JSON_FORMAT;
Tabelle für den Exportstatus erstellen
Beim Export wird erfasst, wie weit in jeder Ansicht gelesen wurde. Ohne dieses Wasserzeichen würde bei jeder Ausführung die gesamte Ansicht neu exportiert und dieselben Ereignisse würden noch einmal aufgenommen.
Erstellen Sie die Statustabelle und füllen Sie sie so:
CREATE TABLE IF NOT EXISTS SECOPS_EXPORT_STATE ( VIEW_NAME STRING NOT NULL, LAST_EXPORTED TIMESTAMP_LTZ NOT NULL, WINDOW_END TIMESTAMP_LTZ ); INSERT INTO SECOPS_EXPORT_STATE (VIEW_NAME, LAST_EXPORTED) SELECT 'LOGIN_HISTORY', DATEADD('day', -7, CURRENT_TIMESTAMP()) UNION ALL SELECT 'QUERY_HISTORY', DATEADD('day', -7, CURRENT_TIMESTAMP());
Exportprozedur erstellen
Erstellen Sie die Prozedur, die beide Ansichten entlädt und den Wasserzeichenwert wie folgt erhöht:
CREATE OR REPLACE PROCEDURE SECOPS_EXPORT_ACTIVITY() RETURNS STRING LANGUAGE SQL AS $$ BEGIN UPDATE SECOPS_EXPORT_STATE SET WINDOW_END = DATEADD('hour', -3, CURRENT_TIMESTAMP()); COPY INTO @SECOPS_EXPORT_STAGE/login_history/ FROM ( SELECT OBJECT_CONSTRUCT( 'application', 'snowflake', 'log_type', 'login_history', 'EVENT_TIMESTAMP', EVENT_TIMESTAMP, 'EVENT_TYPE', EVENT_TYPE, 'USER_NAME', USER_NAME, 'CLIENT_IP', CLIENT_IP, 'REPORTED_CLIENT_TYPE', REPORTED_CLIENT_TYPE, 'REPORTED_CLIENT_VERSION', REPORTED_CLIENT_VERSION, 'FIRST_AUTHENTICATION_FACTOR', FIRST_AUTHENTICATION_FACTOR, 'SECOND_AUTHENTICATION_FACTOR', SECOND_AUTHENTICATION_FACTOR, 'IS_SUCCESS', IS_SUCCESS, 'ERROR_CODE', ERROR_CODE, 'ERROR_MESSAGE', ERROR_MESSAGE) FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY WHERE EVENT_TIMESTAMP > (SELECT LAST_EXPORTED FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'LOGIN_HISTORY') AND EVENT_TIMESTAMP <= (SELECT WINDOW_END FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'LOGIN_HISTORY') ) FILE_FORMAT = (TYPE = JSON) INCLUDE_QUERY_ID = TRUE; UPDATE SECOPS_EXPORT_STATE SET LAST_EXPORTED = WINDOW_END WHERE VIEW_NAME = 'LOGIN_HISTORY'; COPY INTO @SECOPS_EXPORT_STAGE/query_history/ FROM ( SELECT OBJECT_CONSTRUCT( 'application', 'snowflake', 'log_type', 'query_history', 'START_TIME', START_TIME, 'END_TIME', END_TIME, 'QUERY_ID', QUERY_ID, 'QUERY_TYPE', QUERY_TYPE, 'EXECUTION_STATUS', EXECUTION_STATUS, 'ERROR_MESSAGE', ERROR_MESSAGE, 'USER_NAME', USER_NAME, 'ROLE_NAME', ROLE_NAME, 'WAREHOUSE_NAME', WAREHOUSE_NAME, 'WAREHOUSE_SIZE', WAREHOUSE_SIZE, 'DATABASE_NAME', DATABASE_NAME, 'SCHEMA_NAME', SCHEMA_NAME, 'SESSION_ID', SESSION_ID, 'BYTES_SCANNED', BYTES_SCANNED, 'ROWS_PRODUCED', ROWS_PRODUCED, 'TOTAL_ELAPSED_TIME', TOTAL_ELAPSED_TIME) FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE START_TIME > (SELECT LAST_EXPORTED FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'QUERY_HISTORY') AND START_TIME <= (SELECT WINDOW_END FROM SECOPS_EXPORT_STATE WHERE VIEW_NAME = 'QUERY_HISTORY') ) FILE_FORMAT = (TYPE = JSON) INCLUDE_QUERY_ID = TRUE; UPDATE SECOPS_EXPORT_STATE SET LAST_EXPORTED = WINDOW_END WHERE VIEW_NAME = 'QUERY_HISTORY'; RETURN 'Export completed'; END; $$;
Jedes Element des Verfahrens hat einen bestimmten Zweck:
- Das Fenster schließt drei Stunden hinter der aktuellen Zeit. Snowflake füllt
LOGIN_HISTORYmit einer Latenz von bis zu zwei Stunden undQUERY_HISTORYmit einer Latenz von bis zu 45 Minuten. Ein Fenster, das jetzt endet, würde also Zeilen überspringen, die in der Ansicht noch nicht materialisiert wurden. Ereignisse erreichen Google SecOps daher etwa drei Stunden nach ihrem Auftreten. Wenn die Verzögerung verkürzt wird, geht das zulasten der Vollständigkeit, aber die Daten sind aktueller. WINDOW_ENDwird vor dem Entladen in die Tabelle geschrieben, sodass der von derCOPY INTO-Anweisung verwendete Wert und der inLAST_EXPORTEDzurückgeschriebene Wert identisch sind. Wenn die aktuelle Zeit in der zweiten Anweisung neu berechnet wird, wird alles übersprungen, was dazwischen passiert ist.- Jedes
LAST_EXPORTED-Update wird nach der zugehörigenCOPY INTO-Anweisung ausgeführt. Wenn ein Entladevorgang fehlschlägt, wird der Vorgang beendet, die Markierung bleibt an der aktuellen Position und beim nächsten Durchlauf wird dieses Zeitfenster wiederholt, anstatt es zu überspringen. INCLUDE_QUERY_ID = TRUEfügt jedem Dateinamen eine UUID hinzu. Ohne diesen Parameter werden entladene Dateien mitdata_0_0_0benannt und wiederholte Exporte in denselben Pfad kollidieren, was Snowflake als Quelle für duplizierte Daten in der Stage dokumentiert.
Exportaufgabe planen
So erstellen und starten Sie die Aufgabe:
CREATE OR REPLACE TASK SECOPS_EXPORT_TASK WAREHOUSE = SECOPS_EXPORT_WH SCHEDULE = 'USING CRON 0 * * * * UTC' AS CALL SECOPS_EXPORT_ACTIVITY(); ALTER TASK SECOPS_EXPORT_TASK RESUME;Führen Sie die Aufgabe einmal aus, um die Einrichtung zu überprüfen, ohne auf den Zeitplan zu warten:
EXECUTE TASK SECOPS_EXPORT_TASK;So prüfen Sie das Ergebnis der Ausführung und die Dateien, die die Phase erreicht haben:
SELECT NAME, STATE, ERROR_MESSAGE, SCHEDULED_TIME FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(TASK_NAME => 'SECOPS_EXPORT_TASK')) ORDER BY SCHEDULED_TIME DESC LIMIT 5; LIST @SECOPS_EXPORT_STAGE;
Google SecOps-Dienstkonto abrufen
Google SecOps verwendet ein eindeutiges Dienstkonto, um Daten aus Ihrem Cloud Storage-Bucket zu lesen. Sie müssen diesem Dienstkonto Zugriff auf Ihren Bucket gewähren.
- Rufen Sie die Einstellungen > Datenverwaltung > Feeds auf. Wenn Sie eine reine SIEM-Plattform verwenden, rufen Sie die 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.
Snowflake activity logs. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie Snowflake als Logtyp aus.
- Klicken Sie auf Dienstkonto abrufen.
Eine eindeutige E-Mail-Adresse für das Dienstkonto wird angezeigt, z. B.:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comKopieren Sie diese E-Mail-Adresse, um sie im nächsten Schritt zu verwenden.
Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
Storage-Bucket-URL: Geben Sie den Cloud Storage-Bucket-URI mit dem Präfixpfad ein:
gs://snowflake-activity-logs/snowflake/
Option zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus:
- Dateien nie löschen: Dateien werden nie aus der Quelle gelöscht (empfohlen für Tests).
- Übertragene Dateien und leere Verzeichnisse löschen: Dateien und leere Verzeichnisse werden nach einem erfolgreichen Abruf aus der Quelle gelöscht.
Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden (Standardwert: 180 Tage)
Asset-Namespace: Der Asset-Namespace
Labels für Datenaufnahme: 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.
Dem Google SecOps-Dienstkonto IAM-Berechtigungen gewähren
Das Google SecOps-Dienstkonto benötigt zwei Rollen für Ihren Cloud Storage-Bucket: Storage Object Viewer zum Lesen der Logobjekte und eine Rolle auf Bucket-Ebene zum Lesen der Bucket-Metadaten.
- Rufen Sie Cloud Storage > Buckets auf.
- Klicken Sie auf den Namen Ihres Buckets.
- Wechseln Sie zum Tab Berechtigungen.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie die folgenden Konfigurationsdetails an:
- Hauptkonten hinzufügen: Fügen Sie die E‑Mail-Adresse des Google SecOps-Dienstkontos ein.
- Rollen zuweisen: Wählen Sie die beiden folgenden Rollen aus:
- Storage-Objekt-Betrachter: Liest die Logobjekte.
- Storage Legacy Bucket Reader: Liest die Bucket-Metadaten. Wenn Sie die Löschoption Übertragene Dateien und leere Verzeichnisse löschen ausgewählt haben, wählen Sie stattdessen Storage Legacy Bucket Writer aus. Dadurch wird auch die Löschberechtigung gewährt.
- Klicken Sie auf Speichern.
Methode 2: Amazon S3 V2
Verwenden Sie diese Methode, wenn die Logs in Amazon S3 gespeichert werden müssen. Die Snowflake-Seite ist bis auf die Speicherintegration und die Stage identisch. Daher werden das Exportverfahren und die Aufgabe aus Methode 1 unverändert wiederverwendet.
Amazon S3-Bucket konfigurieren
- Erstellen Sie einen Amazon S3-Bucket gemäß diesem Nutzerhandbuch: Bucket erstellen.
- Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung. Beispiel:
snowflake-activity-logs
AWS-IAM-Richtlinie für Snowflake konfigurieren
- Melden Sie sich bei der AWS Management Console an.
- Suchen Sie nach IAM und wählen Sie es aus.
- Wählen Sie Kontoeinstellungen aus.
- Suchen Sie unter Security Token Service (STS) in der Liste Endpunkte nach der Snowflake-Region, in der sich Ihr Konto befindet.
- Wenn der STS-Status inaktiv ist, stellen Sie den Schalter auf Aktiv.
- Wählen Sie Richtlinien aus.
- Wählen Sie Richtlinie erstellen aus.
- Wählen Sie im Richtlinieneditor die Option JSON aus.
Kopieren Sie die folgende Richtlinie und fügen Sie sie ein, um Snowflake die erforderlichen Berechtigungen zum Entladen von Daten in einen Bucket- und Ordnerpfad zu gewähren:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::snowflake-activity-logs/snowflake/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::snowflake-activity-logs", "Condition": { "StringLike": { "s3:prefix": [ "snowflake/*" ] } } } ] }Klicken Sie auf Weiter.
Geben Sie einen Richtliniennamen (z. B.
snowflake_access) und optional eine Beschreibung ein.Klicken Sie auf Richtlinie erstellen.
Snowflake-AWS-IAM-Rolle konfigurieren
- Wählen Sie unter IAM die Option Rollen aus.
- Klicken Sie auf Rolle erstellen.
- Wählen Sie AWS-Konto als Typ der vertrauenswürdigen Entität aus.
- Wählen Sie Anderes AWS-Konto aus.
- Geben Sie im Feld Konto-ID vorübergehend Ihre eigene AWS-Konto-ID ein. Später ändern Sie die Vertrauensstellung und gewähren Zugriff auf Snowflake.
- Wählen Sie die Option Externe ID erforderlich aus.
- Geben Sie eine Platzhalter-ID ein, z. B.
0000. Sie ersetzen sie später durch die externe ID der Speicherintegration. - Klicken Sie auf Weiter.
- Wählen Sie die zuvor erstellte IAM-Richtlinie aus.
- Klicken Sie auf Weiter.
- Geben Sie einen Namen und eine Beschreibung für die Rolle ein.
- Klicken Sie auf Rolle erstellen.
- Kopieren und speichern Sie auf der Seite mit der Rollenzusammenfassung den Wert für Role ARN.
Snowflake-Speicherintegration für Amazon S3 erstellen
Erstellen Sie in einem Snowflake-Arbeitsblatt die Speicherintegration so:
USE ROLE ACCOUNTADMIN; CREATE STORAGE INTEGRATION SECOPS_S3_INT TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'S3' ENABLED = TRUE STORAGE_AWS_ROLE_ARN = '<IAM_ROLE_ARN>' STORAGE_ALLOWED_LOCATIONS = ('s3://snowflake-activity-logs/snowflake/'); GRANT USAGE ON INTEGRATION SECOPS_S3_INT TO ROLE SECOPS_EXPORTER;- Ersetzen Sie
<IAM_ROLE_ARN>durch den gespeicherten Rollen-ARN.
- Ersetzen Sie
Rufen Sie die AWS-Identität ab, die Snowflake für die Integration erstellt hat:
DESC INTEGRATION SECOPS_S3_INT;Kopieren und speichern Sie die Werte der folgenden Attribute:
- STORAGE_AWS_IAM_USER_ARN
- STORAGE_AWS_EXTERNAL_ID
Snowflake-IAM-Nutzer Zugriff auf den Bucket gewähren
- Rufen Sie die AWS Management Console auf.
- Wählen Sie IAM > Rollen aus.
- Wählen Sie die zuvor erstellte Rolle aus.
- Wählen Sie den Tab Vertrauensstellungen aus.
- Klicken Sie auf Vertrauensrichtlinie bearbeiten.
Aktualisieren Sie das Richtliniendokument mit den
DESC INTEGRATION-Ausgabewerten so:{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<STORAGE_AWS_IAM_USER_ARN>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<STORAGE_AWS_EXTERNAL_ID>" } } } ] }Klicken Sie auf Richtlinie aktualisieren.
Dateiformat, Stage und Exportobjekte erstellen
Erstellen Sie in einem Snowflake-Arbeitsblatt das Dateiformat und die Stage, die in den Bucket schreibt, so:
USE ROLE SECOPS_EXPORTER; USE SCHEMA SECOPS_EXPORT.ACTIVITY; CREATE OR REPLACE FILE FORMAT SECOPS_JSON_FORMAT TYPE = JSON; CREATE OR REPLACE STAGE SECOPS_EXPORT_STAGE URL = 's3://snowflake-activity-logs/snowflake/' STORAGE_INTEGRATION = SECOPS_S3_INT FILE_FORMAT = SECOPS_JSON_FORMAT;Erstellen Sie die Statustabelle, die Prozedur und die Aufgabe genau wie in Methode 1 in den Abschnitten Statustabelle für den Export erstellen, Exportprozedur erstellen und Exportaufgabe planen beschrieben. Die Anweisungen verweisen auf den Namen der Phase, sodass sie nicht geändert werden müssen.
AWS IAM für Google SecOps konfigurieren
- Melden Sie sich bei der AWS Management Console an.
- Erstellen Sie einen Nutzer gemäß diesem Nutzerhandbuch: IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Bereich Access Keys (Zugriffsschlüssel) auf Create Access Key (Zugriffsschlüssel erstellen).
- Wählen Sie als Anwendungsfall die Option Drittanbieterdienst aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungs-Tag hinzu.
- Klicken Sie auf Zugriffsschlüssel erstellen.
- Klicken Sie auf CSV-Datei herunterladen, um den Zugriffsschlüssel und den geheimen Zugriffsschlüssel für die spätere Verwendung zu speichern.
- Klicken Sie auf Fertig.
- Wählen Sie den Tab Berechtigungen aus.
- Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
- Wählen Sie Berechtigungen hinzufügen aus.
- Wählen Sie Richtlinien direkt anhängen aus.
- Suchen Sie nach der Richtlinie AmazonS3FullAccess und wählen Sie sie aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Berechtigungen hinzufügen.
Feed in Google SecOps konfigurieren, um Snowflake-Logs aufzunehmen
- Rufen Sie die Einstellungen > Datenverwaltung > Feeds auf. Wenn Sie eine reine SIEM-Plattform verwenden, rufen Sie die Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Snowflake activity logs. - Wählen Sie als Quelltyp Amazon S3 V2 aus.
- Wählen Sie Snowflake als Logtyp aus.
- Klicken Sie auf Weiter.
Geben Sie die folgenden Werte für die Eingabeparameter an:
- S3-URI:
s3://snowflake-activity-logs/snowflake/ - Option zum Löschen der Quelle: Wählen Sie die gewünschte Löschoption aus.
- Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden (Standardwert: 180 Tage)
- Zugriffsschlüssel-ID: Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket
- Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.
- Asset-Namespace: Der Asset-Namespace
- Labels für Datenaufnahme: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.
- S3-URI:
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 |
|---|---|---|
column4_label |
additional.fields |
Zusammengeführt |
column7_label |
additional.fields |
Zusammengeführt |
first_authentication_factor_label |
additional.fields |
Zusammengeführt |
host_list |
additional.fields |
Zusammengeführt |
query_text_label |
additional.fields |
Zusammengeführt |
query_type_label |
additional.fields |
Zusammengeführt |
roleIds_list |
additional.fields |
Zusammengeführt |
roleNames_list |
additional.fields |
Zusammengeführt |
rolecount_label |
additional.fields |
Zusammengeführt |
user_count_label |
additional.fields |
Zusammengeführt |
has_principal |
extensions.auth.type |
Zugeordnet: true → AUTHTYPE_UNSPECIFIED |
START_TIME |
metadata.event_timestamp |
Geparst als yyyy-MM-dd HH:mm:ss.SSS Z |
column2 |
metadata.event_timestamp |
Geparst als yyyy-MM-dd HH:mm:ss.SSS Z |
column20 |
metadata.event_timestamp |
Geparst als yyyy-MM-dd HH:mm:ss.SSS Z |
ts |
metadata.event_timestamp |
Geparst als ISO8601 |
event_type |
metadata.event_type |
Direkt zugeordnet |
has_principal |
metadata.event_type |
Zugeordnet: true → NETWORK_CONNECTION, true → STATUS_UPDATE, true → USER_LOGIN |
has_principal_user |
metadata.event_type |
Zugeordnet: true → USER_UNCATEGORIZED |
column10 |
metadata.product_event_type |
Direkt zugeordnet |
QUERY_ID |
metadata.product_log_id |
Direkt zugeordnet |
column1 |
metadata.product_log_id |
Direkt zugeordnet |
column6 |
metadata.product_version |
Direkt zugeordnet |
SESSION_ID |
network.http.session_id |
Direkt zugeordnet |
RECEIVED_BYTES |
network.received_bytes |
Umbenannt/zugeordnet |
BYTES_SENT_OVER_THE_NETWORK |
network.sent_bytes |
Umbenannt/zugeordnet |
SENT_BYTES |
network.sent_bytes |
Umbenannt/zugeordnet |
APPLICATION |
principal.application |
Direkt zugeordnet |
data.user_name |
principal.asset.hostname |
Direkt zugeordnet |
CLIENT_IP |
principal.asset.ip |
Zusammengeführt |
IP |
principal.asset.ip |
Zusammengeführt |
column5 |
principal.asset.ip |
Zusammengeführt |
SOURCE_REGION |
principal.cloud.availability_zone |
Direkt zugeordnet |
SOURCE_CLOUD |
principal.cloud.environment |
Zugeordnet: (?i)azure → MICROSOFT_AZURE, (?i)amazon → AMAZON_WEB_SERVICES, (?i)google ... |
data.user_name |
principal.hostname |
Direkt zugeordnet |
CLIENT_IP |
principal.ip |
Zusammengeführt |
IP |
principal.ip |
Zusammengeführt |
column5 |
principal.ip |
Zusammengeführt |
OS |
principal.platform |
Zugeordnet: (?i)Linux → LINUX, (?i)windows → WINDOWS, (?i)mac/ios → MAC |
OS_VERSION |
principal.platform_version |
Direkt zugeordnet |
SOURCE_CLOUD_label |
principal.resource.attribute.labels |
Zusammengeführt |
roles |
principal.user.attribute.roles |
Zusammengeführt |
data.role_name |
principal.user.role_name |
Direkt zugeordnet |
column9 |
principal.user.user_display_name |
Direkt zugeordnet |
USER_NAME |
principal.user.userid |
Direkt zugeordnet |
column10 |
principal.user.userid |
Direkt zugeordnet |
column3 |
principal.user.userid |
Direkt zugeordnet |
EXECUTION_STATUS |
security_result.action |
Zugeordnet: (?i)success → action, (?i)fail → security_result_action_block |
STATUS |
security_result.action |
Zugeordnet: (?i)success → action, (?i)fail → action |
action |
security_result.action |
Zusammengeführt |
security_result_action_block |
security_result.action |
Zusammengeführt |
OCSP_MODE |
security_result.action_details |
Direkt zugeordnet |
column11 |
security_result.action_details |
Direkt zugeordnet |
column3 |
security_result.action_details |
Direkt zugeordnet |
BYTES_DELETED_label |
security_result.detection_fields |
Zusammengeführt |
BYTES_READ_FROM_RESULT_label |
security_result.detection_fields |
Zusammengeführt |
BYTES_SCANNED_label |
security_result.detection_fields |
Zusammengeführt |
BYTES_SPILLED_TO_LOCAL_STORAGE_label |
security_result.detection_fields |
Zusammengeführt |
BYTES_SPILLED_TO_REMOTE_STORAGE_label |
security_result.detection_fields |
Zusammengeführt |
BYTES_WRITTEN_TO_RESULT_label |
security_result.detection_fields |
Zusammengeführt |
BYTES_WRITTEN_label |
security_result.detection_fields |
Zusammengeführt |
CHILD_QUERIES_WAIT_TIME_label |
security_result.detection_fields |
Zusammengeführt |
CLUSTER_NUMBER_label |
security_result.detection_fields |
Zusammengeführt |
COMPILATION_TIME_label |
security_result.detection_fields |
Zusammengeführt |
CREDITS_USED_CLOUD_SERVICES_label |
security_result.detection_fields |
Zusammengeführt |
DATABASE_ID_label |
security_result.detection_fields |
Zusammengeführt |
DATABASE_NAME_label |
security_result.detection_fields |
Zusammengeführt |
END_TIME_label |
security_result.detection_fields |
Zusammengeführt |
ERROR_MESSAGE_label |
security_result.detection_fields |
Zusammengeführt |
EXECUTION_TIME_label |
security_result.detection_fields |
Zusammengeführt |
EXTERNAL_FUNCTION_TOTAL_INVOCATIONS_label |
security_result.detection_fields |
Zusammengeführt |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES_label |
security_result.detection_fields |
Zusammengeführt |
EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS_label |
security_result.detection_fields |
Zusammengeführt |
EXTERNAL_FUNCTION_TOTAL_SENT_BYTES_label |
security_result.detection_fields |
Zusammengeführt |
EXTERNAL_FUNCTION_TOTAL_SENT_ROWS_label |
security_result.detection_fields |
Zusammengeführt |
INBOUND_DATA_TRANSFER_BYTES_label |
security_result.detection_fields |
Zusammengeführt |
IS_CLIENT_GENERATED_STATEMENT_label |
security_result.detection_fields |
Zusammengeführt |
LIST_EXTERNAL_FILES_TIME_label |
security_result.detection_fields |
Zusammengeführt |
OUTBOUND_DATA_TRANSFER_BYTES_label |
security_result.detection_fields |
Zusammengeführt |
PARTITIONS_SCANNED_label |
security_result.detection_fields |
Zusammengeführt |
PARTITIONS_TOTAL_label |
security_result.detection_fields |
Zusammengeführt |
PERCENTAGE_SCANNED_FROM_CACHE_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_ACCELERATION_BYTES_SCANNED_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_ACCELERATION_PARTITIONS_SCANNED_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_HASH_VERSION_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_HASH_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_LOAD_PERCENT_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_PARAMETERIZED_HASH_VERSION_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_TAG_label |
security_result.detection_fields |
Zusammengeführt |
QUERY_TYPE_label |
security_result.detection_fields |
Zusammengeführt |
QUEUED_OVERLOAD_TIME_label |
security_result.detection_fields |
Zusammengeführt |
QUEUED_PROVISIONING_TIME_label |
security_result.detection_fields |
Zusammengeführt |
QUEUED_REPAIR_TIME_label |
security_result.detection_fields |
Zusammengeführt |
RELEASE_VERSION_label |
security_result.detection_fields |
Zusammengeführt |
ROLE_TYPE_label |
security_result.detection_fields |
Zusammengeführt |
ROWS_DELETED_label |
security_result.detection_fields |
Zusammengeführt |
ROWS_INSERTED_label |
security_result.detection_fields |
Zusammengeführt |
ROWS_PRODUCED_label |
security_result.detection_fields |
Zusammengeführt |
ROWS_UNLOADED_label |
security_result.detection_fields |
Zusammengeführt |
ROWS_UPDATED_label |
security_result.detection_fields |
Zusammengeführt |
ROWS_WRITTEN_TO_RESULT_label |
security_result.detection_fields |
Zusammengeführt |
SCHEMA_ID_label |
security_result.detection_fields |
Zusammengeführt |
SCHEMA_NAME_label |
security_result.detection_fields |
Zusammengeführt |
TOTAL_ELAPSED_TIME_label |
security_result.detection_fields |
Zusammengeführt |
TRANSACTION_BLOCKED_TIME_label |
security_result.detection_fields |
Zusammengeführt |
TRANSACTION_ID_label |
security_result.detection_fields |
Zusammengeführt |
WAREHOUSE_ID_label |
security_result.detection_fields |
Zusammengeführt |
WAREHOUSE_NAME_label |
security_result.detection_fields |
Zusammengeführt |
WAREHOUSE_SIZE_label |
security_result.detection_fields |
Zusammengeführt |
WAREHOUSE_TYPE_label |
security_result.detection_fields |
Zusammengeführt |
authentication_factor_label |
security_result.detection_fields |
Zusammengeführt |
column4_label |
security_result.detection_fields |
Zusammengeführt |
column6_label |
security_result.detection_fields |
Zusammengeführt |
column7_label |
security_result.detection_fields |
Zusammengeführt |
column8_label |
security_result.detection_fields |
Zusammengeführt |
event_id_label |
security_result.detection_fields |
Zusammengeführt |
event_type_label |
security_result.detection_fields |
Zusammengeführt |
is_success_label |
security_result.detection_fields |
Zusammengeführt |
python_compiler_label |
security_result.detection_fields |
Zusammengeführt |
python_runtime_label |
security_result.detection_fields |
Zusammengeführt |
python_version_label |
security_result.detection_fields |
Zusammengeführt |
reported_client_type_label |
security_result.detection_fields |
Zusammengeführt |
reported_client_version_label |
security_result.detection_fields |
Zusammengeführt |
tracing_label |
security_result.detection_fields |
Zusammengeführt |
EXECUTION_STATUS |
security_result.summary |
Direkt zugeordnet |
STATUS |
security_result.summary |
Direkt zugeordnet |
column17 |
security_result.summary |
Direkt zugeordnet |
TARGET_REGION |
target.cloud.availability_zone |
Direkt zugeordnet |
TARGET_CLOUD |
target.cloud.environment |
Zugeordnet: (?i)azure → MICROSOFT_AZURE, (?i)amazon → AMAZON_WEB_SERVICES, (?i)google ... |
TARGET_CLOUD_label |
target.resource.attribute.labels |
Zusammengeführt |
column2_label |
target.resource.attribute.labels |
Zusammengeführt |
column7_label |
target.resource.attribute.labels |
Zusammengeführt |
USER_NAME |
target.user.userid |
Direkt zugeordnet |
column4 |
target.user.userid |
Direkt zugeordnet |
| – | extensions.auth.type |
Konstante: AUTHTYPE_UNSPECIFIED |
| – | metadata.event_type |
Konstante: NETWORK_CONNECTION |
| – | metadata.product_name |
Konstante: SNOWFLAKE |
| – | metadata.vendor_name |
Konstante: SNOWFLAKE |
| – | principal.cloud.environment |
Konstante: MICROSOFT_AZURE |
| – | principal.platform |
Konstante: LINUX |
| – | target.cloud.environment |
Konstante: MICROSOFT_AZURE |
Änderungsprotokoll
Änderungsprotokoll für diesen Parser ansehen
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten