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();
    
    Copy
  • 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:

  1. Melden Sie sich bei der AWS Management Console an, und navigieren Sie zum IAM-Dienst.

  2. Wählen Sie im linken Navigationsbereich Account settings aus.

  3. 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.

  4. Wählen Sie im linken Navigationsbereich Policies aus und anschließend Create policy.

  5. Wählen Sie unter Policy editor die Option JSON aus.

  6. Fügen Sie ein Richtliniendokument hinzu, das Snowflake den Zugriff auf den S3-Bucket und -Ordner ermöglicht. Ersetzen Sie bucket_name und prefix durch 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/*"
                        ]
                    }
                }
            }
        ]
    }
    
    Copy

    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

  7. Wählen Sie Next aus.

  8. Geben Sie einen Richtliniennamen (z. B.``snowflake_pg_lake_access``) und eine optionale Beschreibung ein.

  9. 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.

  1. Wählen Sie im linken Navigationsbereich des Identity and Access Management (IAM)-Dashboards die Option Roles aus.

  2. Wählen Sie Create role aus.

  3. Wählen Sie AWS account als Typ der vertrauenswürdigen Entität aus.

  4. Wählen Sie Another AWS account aus.

  5. 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.

  6. 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.

  7. Wählen Sie Next aus.

  8. 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.

  9. Wählen Sie Next aus.

  10. 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.

  11. 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.

  12. 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/');
Copy

Wobei:

  • my_pg_lake_integration ist der Name, den Sie für die Speicherintegration wählen.

  • TYPE = POSTGRES_EXTERNAL_STORAGE gibt an, dass diese Integration für die Verwendung mit Snowflake Postgres ist.

  • STORAGE_AWS_ROLE_ARN ist die Rollen-ARN, die Sie in Schritt 3 aufgezeichnet haben: Erstellen Sie eine IAM-Rolle.

  • STORAGE_ALLOWED_LOCATIONS gibt den S3-Bucket und das Pfadpräfix an. Ersetzen Sie my-bucket und my-prefix mit 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;
Copy

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 wird

  • STORAGE_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:

  1. Melden Sie sich bei der AWS Management Console an, und navigieren Sie zum IAM-Dienst.

  2. Wählen Sie im linken Navigationsbereich Roles aus.

  3. Wählen Sie die Rolle aus, die Sie in Schritt 3 erstellt haben. Erstellen Sie eine IAM-Rolle.

  4. Wählen Sie die Registerkarte Trust relationships aus.

  5. Wählen Sie Edit trust policy aus.

  6. 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>"
                    }
                }
            }
        ]
    }
    
    Copy

    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_arn durch den Wert STORAGE_AWS_IAM_USER_ARN. Dies ist eine vollständige ARN im Format arn: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_id durch den Wert STORAGE_AWS_EXTERNAL_ID.

  7. 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;
Copy

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;
Copy

So entfernen Sie eine Speicherintegration aus einer Postgres-Instanz:

ALTER POSTGRES INSTANCE my_postgres_instance
  UNSET STORAGE_INTEGRATION;
Copy

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.

  1. Erstellen Sie die Erweiterung „pg_lake“:

    CREATE EXTENSION pg_lake CASCADE;
    
    Copy
  2. 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';
    
    Copy

    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';
    
    Copy
  3. Ü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/*');
    
    Copy

    Ersetzen Sie my-bucket und my-prefix mit 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.

  4. Ü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;
    
    Copy

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_ARN oder``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:ListBucket und``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_LOCATIONS angegebenen 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_ID der Speicherintegration genau übereinstimmt.

  • Bestätigen Sie, dass die Prinzipal-ARN in der Vertrauensrichtlinie mit der STORAGE_AWS_IAM_USER_ARN der Speicherintegration übereinstimmt.

  • Überprüfen Sie, ob die maximale Sitzungsdauer für die IAM-Rolle auf 12 Stunden eingestellt ist.