Konfigurieren einer Integration für Google Cloud Storage

Unter diesem Thema wird beschrieben, wie Sie den sicheren Zugriff auf Datendateien konfigurieren, die in einem Google Cloud Storage-Bucket gespeichert sind.

Unter diesem Thema:

Konfigurieren einer Snowflake-Speicherintegration

In diesem Abschnitt wird beschrieben, wie Sie mit Speicherintegrationen dafür sorgen können, dass Snowflake Daten aus einem Google Cloud Storage-Bucket lesen und in einen solchen Bucket schreiben kann, auf den in einem externen (d. h. Cloud Storage) Stagingbereich verwiesen wird. Integrationen sind benannte First-Class-Snowflake-Objekte, bei denen keine expliziten Cloudanbieter-Anmeldeinformationen wie geheime Schlüssel oder Zugriffstoken übergeben werden müssen. Stattdessen verweisen Integrationsobjekte auf ein Cloud Storage-Dienstkonto. Ein Administrator in Ihrem Unternehmen gewährt die Dienstkontoberechtigungen im Cloud Storage-Konto.

Administratoren können Benutzer auch auf einen bestimmten Satz von Cloud Storage-Buckets (und optionale Pfade) beschränken, auf die von externen Stagingbereichen zugegriffen wird, die die Integration verwenden.

Bemerkung

Um die Anweisungen in diesem Abschnitt ausführen zu können, müssen Sie als Projekteditor auf Ihr Cloud Storage-Projekt zugreifen können. Wenn Sie kein Projekteditor sind, bitten Sie Ihren Cloud Storage-Administrator, diese Aufgaben auszuführen.

Die folgende Abbildung zeigt den Integrationsablauf für einen Cloud Storage-Stagingbereich:

Google Cloud Storage Stage Integration Flow
  1. Ein externer Stagingbereich (d. h. Cloud Storage) verweist in seiner Definition auf ein Speicherintegrationsobjekt.

  2. Snowflake ordnet die Speicherintegration automatisch einem für Ihr Konto erstellten Cloud Storage-Dienstkonto zu. Snowflake erstellt ein einzelnes Dienstkonto, auf das von allen GCS-Speicherintegrationen in Ihrem Snowflake-Konto verwiesen wird.

  3. Ein Projekteditor für Ihr Cloud Storage-Projekt gewährt dem Dienstkonto Berechtigungen für den Zugriff auf den in der Stagingbereichsdefinition angegebenen Bucket. Beachten Sie, dass viele externe Stagingobjekte auf unterschiedliche Buckets und Pfade verweisen und dieselbe Integration zur Authentifizierung verwenden können.

Wenn ein Benutzer Daten aus einem Stagingbereich lädt oder in einen Stagingbereich entlädt, überprüft Snowflake die Berechtigungen, die dem Dienstkonto für den Bucket erteilt wurden, bevor Zugriff gewährt oder verweigert wird.

Unter diesem Thema:

Schritt 1: Cloud Storage-Integration in Snowflake erstellen

Erstellen Sie mit dem Befehl CREATE STORAGE INTEGRATION eine Integration. Eine Integration ist ein Snowflake-Objekt, das die Authentifizierungsverantwortung für externen Cloudspeicher an eine von Snowflake generierte Entität (d. h. ein Cloud Storage-Dienstkonto) delegiert. Für den Zugriff auf Cloud Storage-Buckets erstellt Snowflake ein Dienstkonto, dem Berechtigungen für den Zugriff auf die Buckets erteilt werden können, in denen sich Ihre Datendateien befinden.

Eine einzelne Speicherintegration kann mehrere externe (d. h. GCS) Speicherintegrationen unterstützen. Die URL in der Stagingbereichsdefinition muss mit den für den Parameter STORAGE_ALLOWED_LOCATIONS angegebenen GCS-Buckets (und optionalen Pfaden) übereinstimmen.

Bemerkung

Dieser SQL-Befehl kann nur von Kontoadministratoren (Benutzer mit der Rolle ACCOUNTADMIN) oder von Rollen mit der globalen Berechtigung CREATE INTEGRATION ausgeführt werden.

CREATE STORAGE INTEGRATION <integration_name>
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://<bucket>/<path>/', 'gcs://<bucket>/<path>/')
  [ STORAGE_BLOCKED_LOCATIONS = ('gcs://<bucket>/<path>/', 'gcs://<bucket>/<path>/') ]
Copy

Wobei:

  • integration_name ist der Name der neuen Integration.

  • bucket ist der Name eines Cloud Storage-Buckets, in dem Ihre Datendateien gespeichert sind (z. B. mybucket). Die erforderlichen Parameter STORAGE_ALLOWED_LOCATIONS und STORAGE_BLOCKED_LOCATIONS beschränken bzw. blockieren den Zugriff auf diese Buckets, wenn Stagingbereiche, die auf diese Integration verweisen, erstellt oder geändert werden.

  • path ist ein optionaler Pfad, mit dem Sie Objekte im Bucket genauer steuern können.

Im folgenden Beispiel wird eine Integration erstellt, die externe Stagingbereiche, die die Integration nutzen, explizit darauf beschränkt, auf einen von zwei Buckets und Pfaden zu verweisen: In einem späteren Schritt werden wir einen externen Stagingbereich erstellen, der auf einen dieser Buckets und Pfade verweist.

Zusätzliche externe Stagingbereiche, die diese Integration ebenfalls verwenden, können auf die zulässigen Buckets und Pfade verweisen:

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://mybucket1/path1/', 'gcs://mybucket2/path2/')
  STORAGE_BLOCKED_LOCATIONS = ('gcs://mybucket1/path1/sensitivedata/', 'gcs://mybucket2/path2/sensitivedata/');
Copy

Schritt 2: Cloud Storage-Dienstkonto für Ihr Snowflake-Konto abrufen

Führen Sie den Befehl DESCRIBE INTEGRATION aus, um die ID für das Cloud Storage-Dienstkonto abzurufen, das automatisch für Ihr Snowflake-Konto erstellt wurde:

DESC STORAGE INTEGRATION <integration_name>;
Copy

Wobei:

Beispiel:

DESC STORAGE INTEGRATION gcs_int;

+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
| property                    | property_type | property_value                                                              | property_default |
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------|
| ENABLED                     | Boolean       | true                                                                        | false            |
| STORAGE_ALLOWED_LOCATIONS   | List          | gcs://mybucket1/path1/,gcs://mybucket2/path2/                               | []               |
| STORAGE_BLOCKED_LOCATIONS   | List          | gcs://mybucket1/path1/sensitivedata/,gcs://mybucket2/path2/sensitivedata/   | []               |
| STORAGE_GCP_SERVICE_ACCOUNT | String        | service-account-id@project1-123456.iam.gserviceaccount.com                  |                  |
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
Copy

Die Eigenschaft STORAGE_GCP_SERVICE_ACCOUNT in der Ausgabe zeigt das Cloud Storage-Dienstkonto an, das für Ihr Snowflake-Konto erstellt wurde (z. B. service-account-id@project1-123456.iam.gserviceaccount.com). Wir stellen ein einziges Cloud Storage-Dienstkonto für Ihr gesamtes Snowflake-Konto bereit. Alle Cloud Storage-Integrationen verwenden dieses Dienstkonto.

Schritt 3: Dienstkontoberechtigungen für den Zugriff auf Bucket-Objekte erteilen

Die folgende Schritt-für-Schritt-Anleitung beschreibt, wie Sie IAM-Zugriffsberechtigungen für Snowflake über Ihre Google Cloud Platform Console so konfigurieren, dass Sie einen Cloud Storage-Bucket zum Laden und Entladen von Daten verwenden können:

Kundenspezifische IAM-Rolle erstellen

Erstellen Sie eine kundenspezifische Rolle, die über die erforderlichen Berechtigungen verfügt, um auf den Bucket zuzugreifen und Objekte abzurufen.

  1. Melden Sie sich bei der Google Cloud Platform Console als Projekteditor an.

  2. Wählen Sie im Startseiten-Dashboard die Option IAM & admin » Roles.

  3. Klicken Sie auf Create Role.

  4. Geben Sie einen Namen und eine Beschreibung für die Rolle ein.

  5. Klicken Sie auf Add Permissions.

  6. Filtern Sie die Liste der Berechtigungen, und fügen Sie Folgendes aus der Liste hinzu:

    Aktionen

    Erforderliche Berechtigungen

    Nur Laden von Daten

    • storage.buckets.get

    • storage.objects.get

    • storage.objects.list

    Laden von Daten mit Bereinigungsoption, Ausführen des Befehls REMOVE im Stagingbereich

    • storage.buckets.get

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

    Laden und Entladen von Daten

    • storage.buckets.get (zur Berechnung der Datentransferkosten)

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

    Nur Entladen von Daten

    • storage.buckets.get

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.list

  7. Klicken Sie auf Create.

Zuweisen der kundenspezifischen Rolle zum Cloud Storage-Dienstkonto

  1. Melden Sie sich bei der Google Cloud Platform Console als Projekteditor an.

  2. Wählen Sie im Startseiten-Dashboard die Option Cloud Storage » Browser:

    Bucket List in Google Cloud Platform Console
  3. Wählen Sie einen Bucket aus, den Sie für den Zugriff konfigurieren möchten.

  4. Klicken Sie oben rechts auf SHOW INFO PANEL. Der Informationsbereich für den Bucket wird erweitert.

  5. Klicken Sie auf die Schaltfläche ADD PRINCIPAL.

  6. Suchen Sie im Feld New principals nach dem Namen des Dienstkontos aus der DESCRIBE INTEGRATION-Ausgabe von Schritt 2: Cloud Storage-Dienstkonto für Ihr Snowflake-Konto abrufen (unter diesem Thema).

    Bucket Information Panel in Google Cloud Platform Console
  7. Wählen Sie in der Dropdown-Liste Select a role die Option Custom » <Rolle> aus, wobei <Rolle> die kundenspezifische Cloud Storage-Rolle ist, die Sie in Erstellen einer kundenspezifischen IAM-Rolle (unter diesem Thema) erstellt haben.

  8. Klicken Sie auf die Schaltfläche Save. Der Name des Dienstkontos wird der Dropdown-Liste Storage Object Viewer im Informationsbereich hinzugefügt.

    Storage Object Viewer role list in Google Cloud Platform Console

Erteilen von Berechtigungen für das Cloud Storage-Dienstkonto für kryptografische Schlüssel des Cloud Key Management Service

Bemerkung

Dieser Schritt ist nur erforderlich, wenn Ihr GCS-Bucket mit einem in Google Cloud Key Management Service (Cloud KMS) gespeicherten Schlüssel verschlüsselt ist.

  1. Melden Sie sich bei der Google Cloud Platform Console als Projekteditor an.

  2. Wählen Sie im Startseiten-Dashboard die Option Security » Cryptographic keys.

  3. Wählen Sie den Schlüsselring aus, der Ihrem GCS-Bucket zugewiesen ist.

  4. Klicken Sie oben rechts auf SHOW INFO PANEL. Der Informationsbereich für den Schlüsselring wird erweitert.

  5. Klicken Sie auf die Schaltfläche ADD PRINCIPAL.

  6. Suchen Sie im Feld New principals nach dem Namen des Dienstkontos aus der DESCRIBE INTEGRATION-Ausgabe von Schritt 2: Cloud Storage-Dienstkonto für Ihr Snowflake-Konto abrufen (unter diesem Thema).

  7. Wählen Sie in der Dropdown-Liste Select a role die Rolle Cloud KMS CrytoKey Encryptor/Decryptor aus.

  8. Klicken Sie auf die Schaltfläche Save. Der Name des Dienstkontos wird der Dropdown-Liste Cloud KMS CrytoKey Encryptor/Decryptor im Informationsbereich hinzugefügt.

Schritt 4: Externen Stagingbereich erstellen

Erstellen Sie einen externen Stagingbereich, der auf die von Ihnen erstellte Integration verweist.

Bemerkung

  • Sie müssen eine Rolle verwenden, der die USAGE-Berechtigung für die Datenbank und das Schema sowie die CREATE STAGE-Berechtigung für das Schema erteilt wurden oder die diese Berechtigungen geerbt hat. Der Eigentümer des Stagingbereichs (d. h. die Rolle mit der Berechtigung OWNERSHIP für den Stagingbereich) muss zudem über die Berechtigung USAGE für die Speicherintegration verfügen.

    Weitere Informationen zu CREATE STAGE finden Sie unter Anforderungen an die Zugriffssteuerung.

  • Zum Laden oder Entladen von Daten aus oder in einen Stagingbereich, der eine Integration nutzt, muss eine Rolle über die Berechtigung USAGE für den Stagingbereich verfügen. Es ist nicht erforderlich, dass die Rolle auch über die Berechtigung USAGE für die Speicherintegration verfügt.

Externen Stagingbereich mit SQL erstellen

Stellen Sie sicher, dass die verwendete Rolle über die erforderlichen Berechtigungen zum Erstellen eines Stagingbereichs, der eine Speicherintegration verwendet, verfügt oder diese Berechtigungen erbt. Beispiel:

GRANT USAGE ON DATABASE mydb TO ROLE myrole;
GRANT USAGE ON SCHEMA mydb.stages TO ROLE myrole;
GRANT CREATE STAGE ON SCHEMA mydb.stages TO ROLE myrole;
GRANT USAGE ON INTEGRATION gcs_int TO ROLE myrole;
Copy

Erstellen Sie mit dem Befehl CREATE STAGE einen externen Stagingbereich.

Legen Sie beispielsweise mydb.stages als aktuelle Datenbank und aktuelles Schema für die Benutzersitzung fest, und erstellen Sie dann einen Stagingbereich namens my_gcs_stage. In diesem Beispiel verweist der Stagingbereich auf den Cloud Storage-Bucket und den Pfad mybucket1/path1, die von der Integration unterstützt werden. Der Stagingbereich verweist außerdem auf ein benanntes Dateiformatobjekt mit dem Namen my_csv_format:

USE SCHEMA mydb.stages;

CREATE STAGE my_gcs_stage
  URL = 'gcs://mybucket1/path1'
  STORAGE_INTEGRATION = gcs_int
  FILE_FORMAT = my_csv_format;
Copy

Bemerkung

  • Hängen Sie einen Schrägstrich (/) an den URL-Wert an, um nach dem angegebenen Ordnerpfad zu filtern. Wenn der Schrägstrich weggelassen wird, werden alle Dateien und Ordner einbezogen, die mit dem Präfix für den angegebenen Pfad beginnen.

    Beachten Sie, dass der Schrägstrich erforderlich ist, um auf unstrukturierte Datendateien im Stagingbereich zuzugreifen und diese abzurufen.

  • Der Parameter STORAGE_INTEGRATION wird getrennt von anderen Parametern des Stagingbereichs (wie z. B. FILE_FORMAT) verarbeitet. Unterstützung für diese anderen Parameter ist dieselbe, unabhängig von der Integration, die für den Zugriff auf Ihren GCS-Bucket verwendet wird.

Externen Stagingbereich mit Snowsight erstellen

Um mit Snowsight einen benannten externen Stagingbereich zu erstellen, gehen Sie wie folgt vor:

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Data » Databases aus.

  3. Wählen Sie die Datenbank und das Schema aus, in denen Sie einen Stagingbereich erstellen möchten.

  4. Wählen Sie Create » Stage aus.

  5. Wählen Sie Google Cloud Platform aus.

  6. Geben Sie einen Stage Name ein.

  7. Geben Sie die URL Ihres Google Cloud Storage-Buckets ein.

  8. Beachten Sie, dass Enable Directory Table standardmäßig ausgewählt ist. Verzeichnistabellen ermöglichen das Anzeigen der Dateien im Stagingbereich, erfordern jedoch ein Warehouse und sind daher mit Kosten verbunden. Sie können diese Option vorerst deaktivieren und eine Verzeichnistabelle später aktivieren.

  9. Aktivieren Sie Authentication.

  10. Wählen Sie im Menü Ihre Speicherintegration aus.

  11. Erweitern Sie optional SQL Preview (SQL-Vorschau), um eine generierte SQL-Anweisung anzuzeigen. Um für Ihren Stagingbereich zusätzliche Optionen wie AUTO_REFRESH festzulegen, können Sie die SQL-Vorschau in einem Arbeitsblatt öffnen.

  12. Wählen Sie Create aus.

Bearbeiten vorhandener Stagingbereiche zur Verwendung von Speicherintegrationen

Sie können die Konfiguration eines vorhandenen externen Stagingbereich zur Verwendung einer Speicherintegration entweder mit SQL oder über die Weboberfläche bearbeiten:

Bemerkung

  • Die Authentifizierungs- oder Verschlüsselungseinstellungen des Stagingbereichs können nicht deaktiviert werden.

  • Sie können eine Stagingbereich aktualisieren, um für die Authentifizierung eine Speicherintegration zu verwenden. Sie können den Authentifizierungstyp jedoch nicht in Anmeldeinformationen ändern, wenn der Stagingbereich bereits eine Speicherintegration verwendet. Um den Authentifizierungstyp zu ändern, können Sie den Stagingbereich löschen und neu erstellen.

Stagingbereich mit SQL bearbeiten

Verwenden Sie ALTER STAGE, um den Stagingbereich zu ändern. Beispiel:

ALTER STAGE my_gcs_stage
  SET STORAGE_INTEGRATION = gcs_int;
Copy

Stagingbereich mit Snowsight bearbeiten

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Data » Databases aus.

  3. Wählen Sie den Stagingbereich aus, den Sie bearbeiten möchten.

  4. Wählen Sie More options » Edit aus.

  5. Nehmen Sie die gewünschten Änderungen an dem Stagingbereich vor.

  6. Wählen Sie Save aus.