Externes Volume für Amazon S3 konfigurieren¶
Gewähren Sie Snowflake eingeschränkten Zugriff auf Ihren Amazon S3 Bucket mithilfe eines externen Volumes für Apache Iceberg™-Tabellen in Snowflake.
Als bewährte Methode empfiehlt sich, eine spezifische IAM-Richtlinie zu erstellen, die Snowflake Zugriff auf den S3-Speicherort gewährt. Sie können dann die Richtlinie an die Rolle anhängen und die von AWS für die Rolle generierten Sicherheitsanmeldeinformationen verwenden, um auf die Dateien zuzugreifen.
Voraussetzungen¶
Bevor Sie ein externes Volume konfigurieren, benötigen Sie Folgendes:
Ein S3 Speicher-Bucket in derselben Region, in der sich Ihr Snowflake-Konto befindet.
Um das externe Volume für extern verwaltete Iceberg-Tabellen zu verwenden, müssen sich alle Ihre Tabellendaten und Metadaten-Dateien in diesem Bucket befinden.
Snowflake unterstützt keine externen Volumes mit Bucket-Namen , die Punkte enthalten (z. B.
my.s3.bucket
). Snowflake verwendet für den Zugriff auf Daten in S3 Pfade und HTTPS im „virtual-hosted-style“-Format. S3 unterstützt jedoch kein SSL bei „virtual-hosted-style“-Buckets mit Punkten im Namen.Um die Datenwiederherstellung zu unterstützen, aktivieren Sie die Versionierung für Ihren externen Cloudspeicherort.
Berechtigungen in AWS zum Erstellen und Verwalten von IAM-Richtlinien und -Rollen. Wenn Sie kein AWS-Administrator sind, bitten Sie Ihren AWS-Administrator, diese Aufgaben zu übernehmen.
Schritt 1: IAM-Richtlinie erstellen, die Zugriff auf den S3-Speicherort gewährt¶
Um die Zugriffsberechtigungen für Snowflake in der AWS-Managementkonsole zu konfigurieren, gehen Sie wie folgt vor:
Melden Sie sich bei der AWS Management Console an.
Suchen Sie auf dem Home-Dashboard nach IAM, und wählen Sie es aus.
Wählen Sie im linken Navigationsbereich Account settings aus.
Unter Security Token Service (STS) in der Liste Endpoints finden Sie die Snowflake-Region, in der sich Ihr Konto befindet. Wenn STS status inaktiv ist, stellen Sie den Umschalter auf Active.
Wählen Sie im linken Navigationsbereich Policies aus.
Wählen Sie Create Policy aus.
Wählen Sie unter Policy editor die Option JSON aus.
Fügen Sie eine Richtlinie hinzu, um Snowflake mit den erforderlichen Berechtigungen zum Lesen und Schreiben von Daten an Ihrem S3-Speicherort auszustatten.
Die folgende Beispielrichtlinie gewährt Zugriff auf alle Speicherorte im angegebenen Bucket.
Bemerkung
Ersetzen Sie
my_bucket
durch den tatsächlichen Namen Ihres Buckets. Sie können auch einen Pfad im Bucket angeben, zum Beispielmy_bucket/path
.Wenn Sie die Bedingung
"s3:prefix":
auf["*"]
setzen, erhalten Sie Zugriff auf alle Präfixe im angegebenen Bucket, und wenn Sie die Bedingung auf["path/*"]
setzen, erhalten Sie Zugriff auf einen bestimmten Pfad im Bucket.Für Buckets in Regionen für Regierungsbehörden wird für die Bucket-ARNs das Präfix
arn:aws-us-gov:s3:::
verwendet.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::<my_bucket>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<my_bucket>", "Condition": { "StringLike": { "s3:prefix": [ "*" ] } } } ] }
Wählen Sie Next aus.
Geben Sie unter Policy name den Namen der Richtlinie (z. B.
snowflake_access
) und unter Description eine optionale Beschreibung ein.Wählen Sie Create policy aus.
Schritt 2: IAM-Rolle erstellen¶
Erstellen Sie eine AWS-IAM-Rolle, um Berechtigungen für den S3-Bucket mit Ihren Datendateien zu vergeben.
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 für den Typ der vertrauenswürdigen Entität AWS account.
Wählen Sie unter An AWS account die Option This account aus. In einem späteren Schritt ändern Sie die Vertrauensstellung und gewähren Snowflake Zugriff.
Wählen Sie die Option Require external ID aus. Geben Sie eine externe ID Ihrer Wahl ein. Beispiel:
iceberg_table_external_id
.Eine externe ID wird verwendet, um einer dritten Partei wie Snowflake Zugriff auf Ihre AWS-Ressourcen (wie S3-Buckets) zu gewähren.
Wählen Sie Next aus.
Wählen Sie die Richtlinie, die Sie für das externe Volume erstellt haben, und wählen Sie dann Next.
Geben Sie unter Role name einen Namen und eine Beschreibung für die Rolle ein, und wählen Sie zum Erstellen Create role aus.
Sie haben nun eine IAM-Richtlinie für einen S3-Speicherort erstellt, eine IAM-Rolle erstellt und die Richtlinie an die Rolle angehängt.
Wählen Sie View role, um die Rollenübersichtsseite anzuzeigen. Suchen Sie den ARN (Amazon Resource Name) für die Rolle, und notieren Sie sich den Wert.
Schritt 3: Der IAM-Rolle die erforderliche Berechtigungen für die SSE-KMS-Verschlüsselung zuweisen (optional)¶
Wenn Sie ein mit einem AWS KMS-Schlüssel verschlüsseltes Objekt auf Amazon S3 hochladen möchten, benötigt die IAM-Rolle, die Sie für Ihr externes Volume erstellt haben, kms:GenerateDataKey
-Berechtigungen für den Schlüssel. Um ein mit einem AWS KMS-Schlüssel verschlüsseltes Objekt herunterzuladen, benötigt die IAM-Rolle die Berechtigung kms:Decrypt
für den Schlüssel.
Wenn Sie einen KMS-Schlüssel für Ihre serverseitige Verschlüsselung verwenden möchten, führen Sie die folgenden Schritte aus, um einen Schlüssel zu erstellen und ihn zu referenzieren.
Wechseln Sie in der AWS-Managementkonsole zum KMS-Dienst (Key Management Service). Wählen Sie in der linken Navigation die Option Customer managed keys und dann die Option Create key aus. Sie müssen einen Schlüssel in der gleichen Region erstellen, in der sich Ihr Bucket befindet.
Erstellen Sie einen Symmetric-Schlüsseltyp. Wählen Sie für die Schlüsselverwendung die Option Encrypt and decrypt aus. Wählen Sie Next aus.
Geben Sie unter Alias einen Namen für den Schlüssel ein, und wählen Sie Next aus.
Wählen Sie bei Bedarf einen Administrator für den Schlüssel aus, und wählen Sie Next aus.
Wählen Sie unter Define key usage permissions Ihre IAM-Rolle aus und dann Next.
Überprüfen Sie die Details der Schlüsselkonfiguration, und wählen Sie dann Finish aus, um den Schlüssel zu erstellen.
Suchen Sie den Schlüssel in der Liste der vom Kunden verwalteten Schlüssel, wählen Sie ihn aus, und notieren Sie seinen ARN. Ein ARN für einen Schlüssel wäre beispielsweise:
arn:aws:kms:us-west-2:111111122222:key/1a1a11aa-aa1a-aaa1a-a1a1-000000000000
.Wenn Sie Ihr externes Volume erstellen, setzen Sie den Wert
KMS_KEY_ID
auf den ARN Ihres Schlüssels.
Schritt 4: Externes Volume in Snowflake erstellen¶
Erstellen Sie mit dem Befehl CREATE EXTERNAL VOLUME ein externes Volume. Im folgenden Beispiel wird ein externes Volume namens iceberg_external_volume
erstellt, das einen Amazon S3-Speicherort mit Verschlüsselung definiert:
CREATE OR REPLACE EXTERNAL VOLUME iceberg_external_volume
STORAGE_LOCATIONS =
(
(
NAME = 'my-s3-us-west-2'
STORAGE_PROVIDER = 'S3'
STORAGE_BASE_URL = 's3://<my_bucket>/'
STORAGE_AWS_ROLE_ARN = '<arn:aws:iam::123456789012:role/myrole>'
STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id'
)
);
Das Beispiel gibt die externe ID (iceberg_table_external_id
) an, die mit der IAM-Rolle verbunden ist, die Sie für das externe Volume erstellt haben. Durch das Angeben einer externen ID können Sie dieselbe IAM-Rolle (und externe ID) für mehrere externe Volumes verwenden.
Bemerkung
Geben Sie ARNs genau so an, wie von AWS bereitgestellt. Bei ARNs wird die Groß-/Kleinschreibung unterschieden.
Schritt 5: AWS-IAM-Benutzer für Ihr Snowflake-Konto abrufen¶
Um den ARN für den AWS-IAM-Benutzer abzurufen, der automatisch für Ihr Snowflake-Konto erstellt wurde, verwenden Sie den Befehl DESCRIBE EXTERNAL VOLUME. Geben Sie den Namen Ihres externen Volumes an.
Im folgenden Beispiel wird ein externes Volume namens
iceberg_external_volume
beschrieben:DESC EXTERNAL VOLUME iceberg_external_volume;
Notieren Sie sich den Wert der Eigenschaft
STORAGE_AWS_IAM_USER_ARN
, der dem für Ihr Snowflake-Konto erstellten AWS-IAM-Benutzer entspricht, z. B.arn:aws:iam::123456789001:user/abc1-b-self1234
.Snowflake stellt genau einen IAM-Benutzer für Ihr gesamtes Snowflake-Konto bereit. Dieser IAM-Benutzer wird von allen externen S3-Volumes in Ihrem Konto verwendet.
Bemerkung
Wenn Sie beim Erstellen eines externen Volumes keine externe ID (
STORAGE_AWS_EXTERNAL_ID
) angegeben haben, generiert Snowflake eine ID, die Sie verwenden können. Notieren Sie sich den Wert, damit Sie Ihre IAM-Rollen-Vertrauensrichtlinie mit der generierten externen ID aktualisieren können.
Schritt 6: IAM-Benutzerberechtigungen für den Zugriff auf Bucket-Objekte erteilen¶
In diesem Schritt konfigurieren Sie Berechtigungen, die dem IAM-Benutzer Ihres Snowflake-Kontos den Zugriff auf Objekte in Ihrem S3-Bucket ermöglichen.
Melden Sie sich bei der AWS Management Console an.
Suchen Sie auf dem Home-Dashboard nach IAM, und wählen Sie es aus.
Wählen Sie im linken Navigationsbereich Roles aus.
Wählen Sie die IAM-Rolle aus, die Sie für Ihr externes Volume erstellt haben.
Wählen Sie die Registerkarte Trust relationships aus.
Wählen Sie Edit trust policy aus.
Ändern Sie das Richtliniendokument mit den DESC EXTERNAL VOLUME-Ausgabewerten, die Sie sich notiert haben.
Richtliniendokument für die IAM-Rolle
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<snowflake_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<iceberg_table_external_id>" } } } ] }
Wobei:
snowflake_user_arn
ist der von Ihnen notierte STORAGE_AWS_IAM_USER_ARN-Wert.iceberg_table_external_id
ist Ihre externe ID. Wenn Sie bereits beim Erstellen der Rolle eine externe ID angegeben haben und dieselbe ID zum Erstellen Ihres externen Volumes verwendet haben, lassen Sie den Wert unverändert. Andernfalls aktualisieren Siests:ExternalId
mit dem Wert, den Sie sich notiert haben.
Bemerkung
Sie müssen dieses Richtliniendokument aktualisieren, wenn Sie ein neues externes Volume erstellen (oder ein vorhandenes externes Volume mit der CREATE OR REPLACE EXTERNAL VOLUME-Syntax erneut erstellen) und keine eigene externe ID bereitstellen. Aus Sicherheitsgründen hat ein neues oder neu erstelltes externes Volume eine andere externe ID und kann die Vertrauensstellung nur auflösen, wenn Sie diese Vertrauensrichtlinie aktualisieren.
Wählen Sie Update policy aus, um Ihre Änderungen zu speichern.
Schritt 7: Prüfen Sie den Speicherzugriff¶
Um zu überprüfen, ob Snowflake sich erfolgreich bei Ihrem Speicheranbieter authentifizieren kann, rufen Sie die Funktion SYSTEM$VERIFY_EXTERNAL_VOLUME auf.
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Nächste Schritte¶
Nachdem Sie ein externes Volume konfiguriert haben, können Sie eine Iceberg-Tabelle erstellen.
Weitere Informationen zum Erstellen einer schreibgeschützten Iceberg-Tabelle, die einen externen Katalog verwendet, finden Sie unter Eine Katalogintegration konfigurieren.
Um eine Iceberg-Tabelle mit voller Unterstützung der Snowflake-Plattform zu erstellen, lesen Sie Eine Snowflake-verwaltete Tabelle erstellen.