Option 3: Konfigurieren der AWS-IAM-Benutzeranmeldeinformationen für den Zugriff auf Amazon S3

In diesem Abschnitt wird beschrieben, wie Sie eine Sicherheitsrichtlinie für einen S3-Bucket und Zugriffsanmeldeinformationen für einen bestimmten IAM-Benutzer konfigurieren, um sicher auf einen externen Stagingbereich zugreifen zu können.

Unter diesem Thema:

Schritt 1: S3-Bucket-Zugriffsrichtlinie konfigurieren

Anforderungen an die AWS-Zugriffssteuerung

Snowflake benötigt die folgenden Berechtigungen für einen S3-Bucket und -Ordner, um auf Dateien in dem Ordner (und allen seinen Unterordnern) zugreifen zu können:

  • s3:GetBucketLocation

  • s3:GetObject

  • s3:GetObjectVersion

  • s3:ListBucket

Bemerkung

Die folgenden zusätzlichen Berechtigungen sind erforderlich, um zusätzliche SQL-Aktionen auszuführen:

Berechtigung

SQL-Aktion

s3:PutObject

Entladen von Dateien in den Bucket.

s3:DeleteObject

Entweder automatisches Löschen von Dateien aus dem Stagingbereich nach erfolgreichem Laden oder Ausführen von REMOVE-Anweisungen zum manuellen Entfernen von Dateien.

Als Best Practice empfiehlt Snowflake für den Zugriff von Snowflake auf den S3-Bucket die Erstellung einer IAM-Richtlinie und eines Benutzers. Sie können die Richtlinie dann an den Benutzer anhängen und die von AWS generierten Sicherheitsanmeldeinformationen verwenden, damit der Benutzer auf Dateien im Bucket zugreifen kann.

Erstellen einer IAM-Richtlinie

Die folgende Schritt-für-Schritt-Anleitung beschreibt, wie Sie die Zugriffsberechtigungen für Snowflake über Ihre AWS Management Console so konfigurieren, dass Sie einen S3-Bucket zum Laden und Entladen von Daten verwenden können:

  1. Melden Sie sich bei der AWS Management Console an.

  2. Wählen Sie auf dem Startseiten-Dashboard die Option Identity & Access Management (IAM) aus:

    Identity & Access Management in AWS Management Console
  3. Wählen Sie im linken Navigationsbereich Account settings aus.

  4. Erweitern Sie die Security Token Service Regions-Liste, suchen Sie die AWS-Region, die der Region entspricht, in der sich Ihr Konto befindet, und wählen Sie Activate, wenn der Status Inactive ist.

  5. Wählen Sie im linken Navigationsbereich Policies aus.

  6. Klicken Sie auf Create Policy:

    Create Policy button on Policies page
  7. Klicken Sie auf die Registerkarte JSON.

  8. Fügen Sie das Richtliniendokument hinzu, das Snowflake den Zugriff auf den S3-Bucket und -Ordner ermöglicht.

    Die folgende Richtlinie (im JSON-Format) stellt Snowflake die erforderlichen Zugriffsberechtigungen für den angegebenen Bucket und Ordnerpfad zur Verfügung. Sie können den Text kopieren und in den Richtlinieneditor einfügen:

    Bemerkung

    Stellen Sie sicher, dass Bucket-Name und Präfix durch Ihren tatsächlichen Bucket-Namen und Ihr Ordnerpfad-Präfix ersetzt wurden.

    {
        "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>/*"
                        ]
                    }
                }
            }
        ]
    }
    

    Bemerkung

    Durch Setzen der Bedingung "s3:prefix": auf entweder ["*"] oder ["<Pfad>/* "] wird Zugriff auf alle Präfixe im angegebenen Bucket bzw. Pfad im Bucket gewährt.

  9. Klicken Sie auf Review policy.

  10. Geben Sie den Richtliniennamen (z. B. snowflake_access) und eine optionale Beschreibung ein. Klicken Sie dann auf Create policy, um die Richtlinie zu erstellen.

    Create Policy button in Review Policy page

Schritt 2: AWS-IAM-Benutzer erstellen

  1. Wählen Sie im linken Navigationsbereich Users aus, und klicken Sie auf Add user.

  2. Geben Sie auf der Seite Add user einen neuen Benutzernamen ein (z. B. snowflake1). Wählen Sie als Zugriffstyp Programmatic access aus, und klicken Sie auf Next:

    Add user page
  3. Klicken Sie auf Attach existing policies directly, und wählen Sie die zuvor erstellte Richtlinie aus. Klicken Sie dann auf Next:

    Set permissions page
  4. Überprüfen Sie die Benutzerdetails, und klicken Sie dann auf Create user.

    Review user details page
  5. Notieren Sie sich die Zugriffsanmeldeinformationen. Dazu klicken Sie am besten auf Download Credentials, um sie in eine Datei zu schreiben (z. B. credentials.csv).

    Attach policy on the user details page

    Achtung

    Sobald Sie diese Seite verlassen, wird der geheime Zugriffsschlüssel nicht mehr in der AWS-Konsole verfügbar sein. Wenn Sie den Schlüssel verlieren, müssen Sie neue Anmeldeinformationen für den Benutzer generieren.

Sie haben jetzt Folgendes erreicht:

  • IAM-Richtlinie für einen Bucket erstellt,

  • IAM-Benutzer erstellt und Zugriffsdaten für den Benutzer generiert,

  • Richtlinie zu Benutzer hinzugefügt.

Mit dem AWS-Schlüssel und dem geheimen Schlüssel für den S3-Bucket haben Sie die notwendigen Anmeldeinformationen, um in Snowflake über einen externen Stagingbereich auf Ihren S3-Bucket zuzugreifen.

Schritt 3: Externen (d. h. S3) Stagingbereich erstellen

Erstellen Sie einen externen Stagingbereich, der auf die von Ihnen erstellten AWS-Anmeldeinformationen verweist.

Erstellen Sie den Stagingbereich mit dem Befehl CREATE STAGE, oder ändern Sie einen vorhandenen externen Stagingbereich, und legen Sie die Option CREDENTIALS fest.

Bemerkung

Anmeldeinformationen werden getrennt von anderen Parametern des Stagingbereichs wie ENCRYPTION und FILE_FORMAT verarbeitet. Die Unterstützung für diese anderen Parameter ist dieselbe, unabhängig von den Anmeldeinformationen, die für den Zugriff auf Ihren externen S3-Bucket verwendet werden.

Legen Sie beispielsweise mydb.public als aktuelle Datenbank und aktuelles Schema für die Benutzersitzung fest, und erstellen Sie dann einen Stagingbereich namens my_S3_stage. In diesem Beispiel verweist der Stagingbereich auf den S3-Bucket und den Pfad mybucket/load/files. Dateien im S3-Bucket werden mit serverseitiger Verschlüsselung (AWS_SSE_KMS) verschlüsselt:

USE SCHEMA mydb.public;

CREATE OR REPLACE STAGE my_S3_stage
  URL='s3://mybucket/load/files/'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');

Nächstes Thema: Verschlüsselung von AWS-Datendateien