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. Bei beiden Methoden wird auf Snowflake-Seite derselbe Mechanismus verwendet: Bei einem geplanten Task werden Daten zur Kontonutzung in eine externe Staging-Umgebung entladen und Google SecOps liest die exportierten Dateien mit einem Feed.
Snowflake ist eine Cloud-Datenplattform, auf der Kontoaktivitäten im Schema SNOWFLAKE.ACCOUNT_USAGE gespeichert werden. 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 wird jede im Konto ausgeführte Anweisung aufgezeichnet, einschließlich des Nutzers, der Rolle, des Data Warehouse und der betroffenen Objekte.
Hinweis
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Zugriff auf Snowflake mit einer Rolle, die Speicherintegrationen erstellen kann (standardmäßig hat nur
ACCOUNTADMINdiese Berechtigung), Datenbanken, Warehouses, Stagingbereiche und Aufgaben - Für Cloud Storage V2: ein Google Cloud -Projekt mit aktivierter Cloud Storage API und Berechtigungen zum Erstellen von Buckets, IAM-Rollen (Identity and Access Management) und zum Verwalten von Bucket-IAM-Richtlinien
- Für Amazon S3 V2: privilegierter Zugriff auf AWS zum Erstellen von S3-Buckets, IAM-Richtlinien, IAM-Rollen und IAM-Nutzern
Zugriff auf Snowflake-Kontonutzungsdaten gewähren
Die Ansichten SNOWFLAKE.ACCOUNT_USAGE sind für ACCOUNTADMIN erst lesbar, wenn der Zugriff explizit gewährt wird. Erstellen Sie eine spezielle Rolle für den Export und weisen Sie ihr die beiden Datenbankrollen zu, die die in diesem Dokument exportierten Ansichten abdecken.
- 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 gewähren Sie der Rolle die entsprechenden Berechtigungen:
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, dem der Export gehört.
- 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 aus, die am besten zu Ihren Anforderungen passt (Region, Dual-Region, Multi-Region). Standort Wählen Sie den Speicherort aus, z. B. us-central1.Speicherklasse Standard (empfohlen für Logs, auf die häufig zugegriffen wird) Zugriffskontrolle Einheitlich (empfohlen) Schutztools Optional: Objektversionierung oder Aufbewahrungsrichtlinie aktivieren Klicken Sie auf Erstellen.
Benutzerdefinierte Cloud Storage-Rolle für Snowflake erstellen
- Rufen Sie in der Google Cloud Console die Seite 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-Speicherintegration für Cloud Storage erstellen
Erstellen Sie die Speicherintegration in einem Snowflake-Arbeitsblatt 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 ab, das Snowflake für die Integration erstellt hat:
DESC STORAGE INTEGRATION SECOPS_GCS_INT;Kopieren Sie den Wert der Property
STORAGE_GCP_SERVICE_ACCOUNT. Der Wert hat das folgende Format:service-account-id@project1-123456.iam.gserviceaccount.com
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
STORAGE_GCP_SERVICE_ACCOUNT-Wert ein. - Rollen zuweisen: Wählen Sie Snowflake Unload aus.
- Hauptkonten hinzufügen: Fügen Sie den
- Klicken Sie auf Speichern.
Dateiformat und externe Staging-Umgebung erstellen
Erstellen Sie in einem Snowflake-Arbeitsblatt das Dateiformat und die Staging-Umgebung, in die in den Bucket geschrieben wird:
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;
Exportstatus-Tabelle erstellen
Beim Export wird nachverfolgt, wie weit in jeder Ansicht gelesen wurde. Ohne dieses Wasserzeichen würde bei jedem Lauf die gesamte Ansicht noch einmal exportiert und dieselben Ereignisse würden noch einmal aufgenommen.
Erstellen Sie die Status-Tabelle 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, mit der beide Ansichten entladen und das Wasserzeichen verschoben wird:
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 nach der aktuellen Zeit. Snowflake füllt
LOGIN_HISTORYmit einer Latenz von bis zu zwei Stunden undQUERY_HISTORYmit einer Latenz von bis zu 45 Minuten. Bei einem Fenster, das jetzt endet, werden also Zeilen übersprungen, die in der Ansicht noch nicht materialisiert wurden. Ereignisse erreichen Google SecOps daher etwa drei Stunden nach ihrem Eintreten. Durch Verkürzen der Verzögerung wird die Aktualität der Daten erhöht. WINDOW_ENDwird vor dem Entladen in die Tabelle geschrieben. Der von derCOPY INTO-Anweisung verwendete Wert und der inLAST_EXPORTEDzurückgeschriebene Wert sind also identisch. Wenn die aktuelle Zeit in der zweiten Anweisung neu berechnet würde, würden alle Ereignisse, die in der Zwischenzeit passiert sind, übersprungen.- Jede
LAST_EXPORTED-Aktualisierung wird nach der zugehörigenCOPY INTO-Anweisung ausgeführt. Wenn das Entladen fehlschlägt, wird der Vorgang beendet, das Wasserzeichen bleibt an der ursprünglichen Position und beim nächsten Durchlauf wird das entsprechende Fenster wiederholt, anstatt es zu überspringen. INCLUDE_QUERY_ID = TRUEfügt jedem Dateinamen eine UUID hinzu. Ohne diese Option werden nicht geladene Dateien mitdata_0_0_0benannt und wiederholte Exporte in denselben Pfad führen zu Konflikten, was laut Snowflake eine Quelle für doppelte Daten in der Staging-Umgebung ist.
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 den Task 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 des Laufs 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 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.
Snowflake activity logs. - Wählen Sie Google Cloud Storage V2 als Quelltyp aus.
- Wählen Sie Snowflake als Protokolltyp aus.
- Klicken Sie auf Dienstkonto abrufen.
Es wird eine eindeutige E-Mail-Adresse für das Dienstkonto angezeigt, z. B.:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comKopieren Sie diese E‑Mail-Adresse für den nächsten Schritt.
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 Option zum Löschen 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.
Höchstalter der Datei: Dateien einbeziehen, 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 folgenden beiden Optionen aus:
- Storage Object Viewer: Liest die Logobjekte.
- Leser alter Storage-Buckets: Berechtigt zum Lesen der 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 erteilt.
- 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 Staging-Umgebung identisch. Das Exportverfahren und die Aufgabe aus Methode 1 werden daher unverändert wiederverwendet.
Amazon S3-Bucket konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu der Anleitung unter Bucket erstellen.
- Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung. Beispiel:
snowflake-activity-logs
Snowflake-AWS-IAM-Richtlinie 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 in der Liste Endpunkte unter Security Token Service (STS) 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. Sie gewährt Snowflake die Berechtigungen, die zum Entladen von Daten in einen Bucket- und Ordnerpfad erforderlich sind:
{ "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 ein (z. B.
snowflake_access) und optional eine Beschreibung.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 Art 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 IAM-Richtlinie aus, die Sie zuvor erstellt haben.
- 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 „Rollenübersicht“ den Wert für Rollen-ARN.
Snowflake-Speicherintegration für Amazon S3 erstellen
Erstellen Sie die Speicherintegration in einem Snowflake-Arbeitsblatt 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
So 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 so:
- 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 Rolle aus, die Sie zuvor erstellt haben.
- Wählen Sie den Tab Vertrauensstellungen aus.
- Klicken Sie auf Vertrauensrichtlinie bearbeiten.
Aktualisieren Sie das Richtliniendokument mit den
DESC INTEGRATION-Ausgabewerten:{ "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 erstellen, Objekte bereitstellen und exportieren
Erstellen Sie in einem Snowflake-Arbeitsblatt das Dateiformat und die Staging-Umgebung, in die in den Bucket geschrieben wird:
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 Status-Tabelle, die Prozedur und die Aufgabe genau wie in Methode 1 in den Abschnitten Status-Tabelle für den Export erstellen, Exportprozedur erstellen und Exportaufgabe planen beschrieben. In den Anweisungen wird auf die Phase mit dem Namen verwiesen, sodass keine Änderung erforderlich ist.
AWS IAM für Google SecOps konfigurieren
- Melden Sie sich bei der AWS Management Console an.
- Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Bereich Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie als Anwendungsfall Drittanbieterdienst aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungstag 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 zukünftige 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 SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B.
Snowflake activity logs. - Wählen Sie Amazon S3 V2 als Quelltyp aus.
- Wählen Sie Snowflake als Protokolltyp aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
- S3-URI:
s3://snowflake-activity-logs/snowflake/ - Option zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus.
- Höchstalter der Datei: Dateien einbeziehen, 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: Geheimer 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 |
Als yyyy-MM-dd HH:mm:ss.SSS Z geparst |
column2 |
metadata.event_timestamp |
Als yyyy-MM-dd HH:mm:ss.SSS Z geparst |
column20 |
metadata.event_timestamp |
Als yyyy-MM-dd HH:mm:ss.SSS Z geparst |
ts |
metadata.event_timestamp |
Als ISO8601 geparst |
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