Konfigurieren von S3-Speicher für „pg_lake“¶
„pg_lake“ ist eine PostgreSQL-Erweiterung, die ein effizientes Abfragen von Daten ermöglicht, die in Objektspeicherformaten wie Parquet und ORC gespeichert sind. Wenn Sie „pg_lake“ mit Snowflake Postgres verwenden, konfigurieren Sie den Zugriff auf einen Amazon S3-Bucket, in dem Ihre Daten gespeichert sind, indem Sie eine Snowflake-Speicherintegration verwenden.
In diesem Thema wird erklärt, wie Sie S3-Bucket-Berechtigungen in AWS konfigurieren und Sie eine Speicherintegration erstellen, die Snowflake Postgres den Zugriff auf Ihre Daten ermöglicht.
Bemerkung
Derzeit wird dieser S3-Speicher nicht von Snowflake Postgres verwaltet. Sie stellen Ihren eigenen S3-Bucket bereit und konfigurieren den Zugriff über eine Speicherintegration, die Sie an Ihre Postgres-Instanz anhängen.
Voraussetzungen¶
Bevor Sie den S3-Speicher für „pg_lake“ konfigurieren, stellen Sie sicher, dass Sie Folgendes haben:
Ein aktives AWS-Konto mit Berechtigungen zum Erstellen und Verwalten von S3-Buckets und IAM-Rollen.
Ein S3-Bucket in derselben AWS-Region wie Ihr Snowflake-Konto. Um Ihre Snowflake-Kontoregion zu bestimmen, führen Sie die folgende Abfrage in Snowflake aus (nicht auf Ihrer Postgres-Instanz):
SELECT CURRENT_REGION();
Vertrautheit mit AWS IAM-Rollen und -Richtlinien.
Eine Snowflake Postgres-Instanz mit pg_lake-Unterstützung.
Berechtigungen zum Erstellen von Speicherintegrationen in Snowflake (erfordert die ACCOUNTADMIN-Rolle oder eine Rolle mit der CREATEINTEGRATION-Berechtigung für das Konto).
Schritt 1: Erstellen eines S3-Buckets¶
Wenn Sie noch keinen haben, erstellen Sie einen S3-Bucket in derselben AWS-Region wie Ihr Snowflake-Konto. Beispiel: Wenn sich Ihr Snowflake-Konto in us-west-2 befindet, erstellen Sie den S3-Bucket in der us-west-2-Region.
Anweisungen zum Erstellen eines S3-Buckets finden Sie in der AWS-Dokumentation.
Schritt 2: Erstellen einer IAM-Richtlinie für den Zugriff auf S3¶
Erstellen Sie eine IAM-Richtlinie, die die erforderlichen Berechtigungen für „pg_lake“ zum Lesen bzw. Schreiben in Ihrem S3-Bucket erteilt:
Melden Sie sich bei der AWS Management Console an, und navigieren Sie zum IAM-Dienst.
Wählen Sie im linken Navigationsbereich Account settings aus.
Unter Security Token Service (STS) in der Liste der Endpunkte finden Sie die Snowflake-Region, in der sich Ihr Konto befindet. Wenn der Status STS inaktiv ist, stellen Sie den Umschalter auf Active. Weitere Informationen dazu finden Sie unter Aktivieren und Deaktivieren von AWS STS in einer AWS-Region.
Wählen Sie im linken Navigationsbereich Policies aus und anschließend Create policy.
Wählen Sie unter Policy editor die Option JSON aus.
Fügen Sie ein Richtliniendokument hinzu, das Snowflake den Zugriff auf den S3-Bucket und -Ordner ermöglicht. Ersetzen Sie
bucket_nameundprefixdurch den tatsächlichen Bucket-Namen bzw. das Ordnerpfad-Präfix:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::bucket_name/prefix/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucket_name", "Condition": { "StringLike": { "s3:prefix": [ "prefix/*" ] } } } ] }
Diese Richtlinie stellt Berechtigungen für Folgendes bereit:
Lesen, Schreiben und Löschen von Objekten im angegebenen S3-Pfad
Auflisten des Inhalts des Buckets und Abrufen des Speicherorts des Buckets
Unterstützen der Möglichkeit von „pg_lake“, Iceberg-Tabellen zu erstellen und zu verwalten
Wählen Sie Next aus.
Geben Sie einen Richtliniennamen (z. B.``snowflake_pg_lake_access``) und eine optionale Beschreibung ein.
Wählen Sie Create policy aus.
Schritt 3: -IAM Rolle erstellen¶
Erstellen Sie eine IAM-Rolle, die Snowflake für den Zugriff auf Ihren S3-Bucket annimmt.
Wichtig
Wenn Sie diese Rolle erstellen, müssen Sie die Maximum session duration auf 12 hours festlegen. Die Speicherintegration funktioniert nicht mit der Standard-Sitzungsdauer. Siehe den letzten Schritt in diesem Abschnitt.
Wählen Sie im linken Navigationsbereich des Identity and Access Management (IAM)-Dashboards die Option Roles aus.
Wählen Sie Create role aus.
Wählen Sie AWS account als Typ der vertrauenswürdigen Entität aus.
Wählen Sie Another AWS account aus.
Geben Sie im Feld Account ID vorläufig Ihre eigene AWS-Konto-ID ein. In einem späteren Schritt ändern Sie die Vertrauensstellung, um Zugriff auf Snowflake zu gewähren.
Wählen Sie die Option Require external ID aus. Geben Sie eine externe Platzhalter-ID, wie beispielsweise
0000, ein. Sie aktualisieren dies mit der tatsächlichen externen ID, die von Snowflake in einem späteren Schritt generiert wurde.Bemerkung
Eine externe ID wird verwendet, um einer dritten Partei wie Snowflake Zugriff auf Ihre AWS-Ressourcen (wie S3-Buckets) zu gewähren. Weitere Informationen finden Sie unter Verwenden einer externen ID beim Gewähren des Zugriff auf AWS-Ressourcen für Dritte.
Wählen Sie Next aus.
Suchen Sie nach der Richtlinie, die Sie in Schritt 2 erstellt haben, und wählen Sie diese aus: Erstellen Sie eine IAM-Richtlinie für den Zugriff auf S3.
Wählen Sie Next aus.
Geben Sie einen Namen und eine Beschreibung für die Rolle ein (beispielsweise
snowflake_pg_lake_role), und wählen Sie dann Create role aus.Notieren Sie den Wert von Role ARN, der auf der Übersichtsseite der Rolle angegeben ist. Sie benötigen diesen, wenn Sie die Speicherintegration in Snowflake erstellen.
Wählen Sie auf der Übersichtsseite der Rolle die Option Edit im Übersichtsabschnitt aus, und ändern Sie die Maximum session duration in
12 hours. Wählen Sie Save changes aus. Weitere Informationen dazu finden Sie unter Ändern der maximalen Sitzungsdauer einer Rolle (AWS).
Schritt 4: Erstellen einer Speicherintegration in Snowflake¶
Erstellen Sie in Snowflake ein Speicherintegrationsobjekt, das auf die IAM-Rolle verweist, die Sie erstellt haben. Die vollständige Befehlssyntax finden Sie unter CREATE STORAGE INTEGRATION.
CREATE STORAGE INTEGRATION my_pg_lake_integration
TYPE = POSTGRES_EXTERNAL_STORAGE
STORAGE_PROVIDER = 'S3'
ENABLED = TRUE
STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake_pg_lake_role'
STORAGE_ALLOWED_LOCATIONS = ('s3://my-bucket/my-prefix/');
Wobei:
my_pg_lake_integrationist der Name, den Sie für die Speicherintegration wählen.TYPE = POSTGRES_EXTERNAL_STORAGEgibt an, dass diese Integration für die Verwendung mit Snowflake Postgres ist.STORAGE_AWS_ROLE_ARNist die Rollen-ARN, die Sie in Schritt 3 aufgezeichnet haben: Erstellen Sie eine IAM-Rolle.STORAGE_ALLOWED_LOCATIONSgibt den S3-Bucket und das Pfadpräfix an. Ersetzen Siemy-bucketundmy-prefixmit dem Bucket-Namen und dem Ordnerpfad, den Sie in Schritt 1 erstellt haben: Erstellen Sie einen S3-Bucket. Beachten Sie, dass für Postgres-Speicherintegrationen nur ein Speicherort zulässig ist.
Bemerkung
Für das Erstellen einer Speicherintegration ist die ACCOUNTADMIN-Rolle oder eine Rolle mit der CREATE INTEGRATION-Berechtigung für das Konto erforderlich. Weitere Informationen dazu finden Sie unter Zugriffssteuerungsrechte.
Schritt 5: Abrufen der Snowflake-IAM-Benutzer-ARN und externen ID¶
Nachdem Sie die Speicherintegration erstellt haben, verwenden Sie den Befehl DESCRIBE INTEGRATION zum Abrufen des AWS IAM-Benutzenden und der externen ID, die Snowflake für diese Integration generiert hat:
DESCRIBE STORAGE INTEGRATION my_pg_lake_integration;
Suchen Sie in der Ausgabe die folgenden Werte, und notieren Sie sie:
STORAGE_AWS_IAM_USER_ARN: Die IAM-Benutzer-ARN, mit der Snowflake die Rolle übernehmen wirdSTORAGE_AWS_EXTERNAL_ID: Die externe ID, die in der Vertrauensrichtlinie zu verwenden ist
Sie benötigen diese Werte im nächsten Schritt, um die Vertrauensrichtlinie für die IAM-Rolle zu konfigurieren.
Schritt 6: Aktualisieren der Vertrauensrichtlinie für die IAM-Rolle¶
Aktualisieren Sie die Vertrauensrichtlinie der IAM-Rolle, die Sie in Schritt 3 erstellt haben: Erstellen Sie eine IAM-Rolle, damit Snowflake die Rolle übernehmen kann:
Melden Sie sich bei der AWS Management Console an, und navigieren Sie zum IAM-Dienst.
Wählen Sie im linken Navigationsbereich Roles aus.
Wählen Sie die Rolle aus, die Sie in Schritt 3 erstellt haben. Erstellen Sie eine IAM-Rolle.
Wählen Sie die Registerkarte Trust relationships aus.
Wählen Sie Edit trust policy aus.
Ersetzen Sie das Richtliniendokument durch den folgenden Text:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "<storage_aws_iam_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<storage_aws_external_id>" } } } ] }
Ersetzen Sie die Platzhalterwerte durch die Werte, die Sie in Schritt 5 notiert haben: Rufen Sie die Snowflake-IAM-Benutzer-ARN und die externe ID ab:
Ersetzen Sie
storage_aws_iam_user_arndurch den WertSTORAGE_AWS_IAM_USER_ARN. Dies ist eine vollständige ARN im Formatarn:aws:iam::<account_id>:user/snowflake-postgres-integration-management, wobei der Benutzername immer derselbe ist und nur die AWS-Konto-ID variiert.Ersetzen Sie
storage_aws_external_iddurch den WertSTORAGE_AWS_EXTERNAL_ID.
Wählen Sie Update policy aus, um die Änderungen zu speichern.
Schritt 7: Verknüpfen der Speicherintegration mit Ihrer Postgres-Instanz¶
Verknüpfen Sie die Speicherintegration mit Ihrer Snowflake Postgres-Instanz. Wenn die Speicherintegration angehängt ist, werden die S3-Anmeldeinformationen automatisch mit der Postgres-Kontrollebene synchronisiert und „pg_lake“ zur Verfügung gestellt:
ALTER POSTGRES INSTANCE my_postgres_instance
SET STORAGE_INTEGRATION = my_pg_lake_integration;
Sie können die Speicherintegration auch angeben, wenn Sie eine neue Postgres-Instanz erstellen:
CREATE POSTGRES INSTANCE my_postgres_instance
...
STORAGE_INTEGRATION = my_pg_lake_integration;
So entfernen Sie eine Speicherintegration aus einer Postgres-Instanz:
ALTER POSTGRES INSTANCE my_postgres_instance
UNSET STORAGE_INTEGRATION;
Schritt 8: Konfigurieren und Verwenden von „pg_lake“¶
Nachdem Sie die Speicherintegration angehängt haben, stellen Sie eine Verbindung zu Ihrer Postgres-Instanz her, und konfigurieren Sie „pg_lake“. Eine Liste der verfügbaren Erweiterungen finden Sie unter Snowflake Postgres-Erweiterungen.
Erstellen Sie die Erweiterung „pg_lake“:
CREATE EXTENSION pg_lake CASCADE;
Legen Sie den Standardspeicherort für Iceberg-Tabellen fest. Dieser sollte mit dem in Ihrer Speicherintegration angegebenen Speicherort übereinstimmen.
Der SET-Befehl gilt nur für die aktuelle Sitzung:
SET pg_lake_iceberg.default_location_prefix = 's3://my-bucket/my-prefix';
Um den Wert für alle aktuellen und zukünftigen Sitzungen festzulegen, verwenden Sie stattdessen den Befehl ALTERDATABASE. Wenn Sie mehrere Postgres-Datenbanken verwenden, stellen Sie sicher, dass Sie den Speicherort für jede Datenbank festlegen:
-- Substitute the name of your database ALTER DATABASE my_database SET pg_lake_iceberg.default_location_prefix = 's3://my-bucket/my-prefix';
Überprüfen Sie, ob die Speicherintegration korrekt konfiguriert ist, indem Sie den Inhalt Ihres S3-Buckets auflisten:
SELECT * FROM lake_file.list('s3://my-bucket/my-prefix/*');
Ersetzen Sie
my-bucketundmy-prefixmit Ihrem tatsächlichen Bucket-Namen und -Pfad. Wenn die Konfiguration korrekt ist, gibt diese Abfrage eine Liste der Dateien an diesem Speicherort zurück. Wenn der Bucket leer ist, gibt die Abfrage ein leeres Resultset ohne Fehler zurück.Überprüfen Sie die End-to-End-Konfiguration, indem Sie eine Iceberg-Tabelle erstellen, Daten einfügen und diese zurückfragen. Wenn dies erfolgreich ist, kann „pg_lake“ aus Ihrem S3-Bucket lesen bzw. in ihn schreiben:
CREATE TABLE my_table ( id INT, data TEXT ) USING iceberg; INSERT INTO my_table VALUES (1, 'hello iceberg'); SELECT * FROM my_table;
Sicherheitshinweise¶
Beachten Sie bei der Konfiguration des S3-Zugriffs für „pg_lake“ die folgenden bewährten Sicherheitsmethoden:
IAM-Rollen verwenden: Snowflake Postgres verwendet die Übernahme der IAM-Rolle anstelle von statischen Anmeldeinformationen, was für mehr Sicherheit durch temporäre Anmeldeinformationen und eine automatische Rotation der Anmeldeinformationen sorgt.
IAM-Berechtigungen beschränken: Erteilen Sie nur die erforderlichen Mindestberechtigungen für die S3-Bucket-Pfade, auf die „pg_lake“ zugreifen muss. Die IAM-Richtlinie sollte den Zugriff auf bestimmte Bucket-Präfixe beschränken.
Externe ID überwachen: Die externe ID in der Vertrauensrichtlinie stellt sicher, dass nur Ihr Snowflake-Konto die IAM-Rolle annehmen kann.
Änderungen der Speicherintegration überprüfen: Aktualisierungen bezüglich der Speicherintegration von
STORAGE_AWS_ROLE_ARNoder``STORAGE_ALLOWED_LOCATIONS`` werden automatisch mit der Postgres-Instanz synchronisiert.Bucket-Richtlinien verwenden: Erwägen Sie die Verwendung von S3-Bucket-Richtlinien zusätzlich zu den IAM-Richtlinien für einen umfassenden Schutz.
S3-Zugriffsprotokollierung aktivieren: Aktivieren Sie die Zugriffsprotokollierung für Ihren S3-Bucket, um Zugriffsmuster zu überwachen und zu prüfen.
Regionale Ausrichtung: Stellen Sie sicher, dass sich Ihr S3-Bucket in derselben AWS-Region befindet wie Ihr Snowflake-Konto, um optimale Leistung zu erzielen und die Anforderungen an die Datenresource zu erfüllen.
Problembehandlung¶
Fehler beim Erstellen der Speicherintegration¶
Wenn beim Erstellen der Speicherintegration Fehler auftreten:
Überprüfen Sie, ob Sie über die ACCOUNTADMIN-Rolle oder eine Rolle mit der CREATE INTEGRATION-Berechtigung für das Konto verfügen.
Stellen Sie sicher, dass die IAM-Rollen-ARN korrekt formatiert ist und in Ihrem AWS-Konto vorhanden ist.
Stellen Sie sicher, dass der Speicherort des S3-Buckets das korrekte Format verwendet:
s3://bucket-name/prefix/Beachten Sie, dass für
POSTGRES_EXTERNAL_STORAGE-Integrationen nur ein Speicherort zulässig ist.
Tipp
Speicherintegrationsfehler werden in den Postgres-Serverprotokollen mit einem Storage integration:-Präfix protokolliert. Beispiel:
Storage integration: IAM role must have Maximum Session Duration set to 12 hours
Informationen zum Zugriff auf Postgres-Protokolle finden Sie unter Snowflake Postgres-Protokollierung.
Verbindungsfehler¶
Wenn „pg_lake“ nach dem Anhängen der Speicherintegration nicht auf S3 zugreifen kann:
Überprüfen Sie, ob die Speicherintegration korrekt mit Ihrer Postgres-Instanz verbunden ist, indem Sie die Instanzeigenschaften abfragen.
Prüfen Sie, ob die Vertrauensrichtlinie der IAM-Rolle mit der korrekten Snowflake-IAM-Benutzer-ARN und der externen ID von der DESCRIBESTORAGEINTEGRATION-Ausgabe aktualisiert wurde.
Stellen Sie sicher, dass die S3-Bucket-Region mit Ihrer Snowflake-Kontoregion übereinstimmt.
Überprüfen Sie, ob der STS-Endpunkt Ihrer Region in den AWS IAM-Kontoeinstellungen aktiv ist.
Fehler mit verweigerter Berechtigung¶
Wenn Sie beim Zugriff auf S3 Fehler mit verweigerter Berechtigung erhalten:
Stellen Sie sicher, dass die IAM-Richtlinie, die der Rolle zugeordnet ist, alle erforderlichen Berechtigungen enthält:
s3:PutObject,s3:GetObject,s3:GetObjectVersion,s3:DeleteObject,s3:DeleteObjectVersion,s3:ListBucketund``s3:GetBucketLocation``.Überprüfen Sie, ob die Vertrauensrichtlinie der IAM-Rolle dem Snowflake-IAM-Benutzenden die Übernahme der Rolle ermöglicht.
Überprüfen Sie, ob die S3-Bucket-Richtlinie (falls vorhanden) den Zugriff von der IAM-Rolle nicht verweigert.
Stellen Sie sicher, dass die S3-Pfade, auf die Sie zugreifen, mit dem in
STORAGE_ALLOWED_LOCATIONSangegebenen Präfix übereinstimmen.
Fehler bei Vertrauensrichtlinien¶
Wenn Fehler im Zusammenhang mit der Annahme der IAM-Rolle auftreten:
Überprüfen Sie, ob die externe ID in der Vertrauensrichtlinie mit der
STORAGE_AWS_EXTERNAL_IDder Speicherintegration genau übereinstimmt.Bestätigen Sie, dass die Prinzipal-ARN in der Vertrauensrichtlinie mit der
STORAGE_AWS_IAM_USER_ARNder Speicherintegration übereinstimmt.Überprüfen Sie, ob die maximale Sitzungsdauer für die IAM-Rolle auf 12 Stunden eingestellt ist.