Option 3: Konfigurieren der AWS-IAM-Benutzeranmeldeinformationen für 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 |
---|---|
|
Entladen von Dateien in den Bucket. |
|
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:
Anmelden bei der AWS-Managementkonsole.
Wählen Sie auf dem Startseiten-Dashboard die Option Identity & Access Management (IAM) aus:
Wählen Sie im linken Navigationsbereich Account settings aus.
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.
Wählen Sie im linken Navigationsbereich Policies aus.
Klicken Sie auf Create Policy:
Klicken Sie auf die Registerkarte JSON.
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
undprefix
durch Ihren tatsächlichen Bucket-Namen bzw. Ihr Ordnerpfad-Präfix ersetzt wurden.Die Amazon Resource Names (ARN) für Buckets in Regionen für Regierungsbehörden haben das Präfix
arn:aws-us-gov:s3:::
.
{ "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.Klicken Sie auf Review policy.
Geben Sie den Richtliniennamen (z. B.
snowflake_access
) und eine optionale Beschreibung ein. Klicken Sie dann auf Create policy, um die Richtlinie zu erstellen.
Schritt 2: AWS-IAM-Benutzer erstellen¶
Wählen Sie im linken Navigationsbereich Users aus, und klicken Sie auf Add user.
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:Klicken Sie auf Attach existing policies directly, und wählen Sie die zuvor erstellte Richtlinie aus. Klicken Sie dann auf Next:
Überprüfen Sie die Benutzerdetails, und klicken Sie dann auf Create user.
Notieren Sie sich die Zugriffsanmeldeinformationen. Dazu klicken Sie am besten auf Download Credentials, um sie in eine Datei zu schreiben (z. B.
credentials.csv
).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.
Bemerkung
Snowflake speichert die temporären Anmeldeinformationen im Cache für einen Zeitraum, der die Ablaufzeit von 60 Minuten nicht überschreiten darf. Wenn Sie den Zugriff von Snowflake widerrufen, sind Benutzer vor Ablauf des Cache möglicherweise in der Lage, Dateien auflisten und Daten vom Cloudspeicherort zu laden.
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