Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting
Berechtigungen für den Zugriff auf andere AWS-Ressourcen
Um Daten zwischen Ihrem Cluster und einer anderen AWS-Ressource, etwa Amazon S3, Amazon DynamoDB, Amazon EMR oder Amazon EC2 zu verschieben, muss Ihr Cluster über die Berechtigung zum Zugriff auf die Ressource und zur Durchführung der erforderlichen Aktionen verfügen. Um beispielsweise Daten aus Amazon S3 zu laden, muss COPY über LIST-Zugriff auf den Bucket und GET-Zugriff auf die Bucket-Objekte verfügen. Weitere Informationen zu den mindestens erforderlichen Berechtigungen finden Sie unter IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY.
Um die Autorisierung für den Zugriff auf die Ressource zu erhalten, muss Ihr Cluster authentifiziert werden. Sie können eine der beiden folgenden Authentifizierungsmethoden verwenden:
-
Rollenbasierte Zugriffskontrolle – Für die rollenbasierte Zugriffssteuerung geben Sie eine AWS Identity and Access Management (IAM)-Rolle an, die Ihr Cluster für Authentifizierung und Autorisierung verwendet. Um Ihre AWS-Anmeldeinformationen und sensiblen Daten zu schützen, wird nachdrücklich die Verwendung der rollenbasierten Authentifizierung empfohlen.
-
Schlüsselbasierte Zugriffssteuerung – Für die schlüsselbasierte Zugriffssteuerung geben Sie die AWS-Zugriffsanmeldeinformationen (Zugriffsschlüssel-ID und geheimer Zugriffsschlüssel) für einen Benutzer in Form reinen Texts an.
Rollenbasierte Zugriffskontrolle
Mit einer rollenbasierten Zugriffssteuerung übernimmt Ihr Cluster vorübergehend in Ihrem Namen eine IAM-Rolle. Anschließend kann Ihr Cluster auf der Basis der Autorisierungen, die der Rolle gewährt wurden, auf die erforderlichen AWS-Ressourcen zugreifen.
Das Erstellen einer IAM-Rolle ähnelt insofern dem Erteilen von Berechtigungen für einen Benutzer, als es sich um eine AWS-Identität mit Berechtigungsrichtlinien handelt, die festlegen, welche Aktionen die Identität in AWS ausführen kann und welche nicht. Eine Rolle ist jedoch nicht einem einzigen Benutzer zugeordnet, sondern kann von allen Entitäten angenommen werden, die diese Rolle benötigen. Einer Rolle sind auch keine Anmeldeinformationen (Passwort oder Zugriffsschlüssel) zugeordnet. Wenn eine Rolle mit einem Cluster verknüpft ist, werden die Zugriffsschlüssel stattdessen dynamisch erstellt und dem Cluster bereitgestellt.
Die Verwendung einer rollenbasierten Zugriffssteuerung wird empfohlen, da diese nicht nur Schutz für Ihre AWS-Anmeldeinformationen bietet, sondern auch eine detaillierte Steuerung des Zugriffs auf AWS-Ressourcen und sensible Benutzerdaten mit mehr Sicherheit.
Die rollenbasierte Authentifizierung bietet folgende Vorteile:
-
Sie können AWS-Standardtools für IAM verwenden, um eine IAM-Rolle zu definieren und die Rolle mit mehreren Clustern zu verknüpfen. Wenn Sie die Zugriffsrichtlinie für eine Rolle ändern, werden die Änderungen automatisch auf alle Cluster angewendet, die diese Rolle verwenden.
-
Sie können detaillierte IAM-Richtlinien erstellen, die bestimmten Clustern und Datenbankbenutzern Berechtigungen für den Zugriff auf spezifische AWS-Ressourcen und -Aktionen gewähren.
-
Ihr Cluster erhält temporäre Sitzungsanmeldeinformationen zur Laufzeit. Die Anmeldeinformationen werden wie benötigt aktualisiert, bis die Operation abgeschlossen ist. Wenn Sie schlüsselbasierte temporäre Anmeldeinformationen verwenden, schlägt die Operation fehl, wenn die temporären Anmeldeinformationen ablaufen, bevor die Operation abgeschlossen ist.
-
Die Zugriffsschlüssel-ID und die ID des geheimen Zugriffsschlüssels werden nicht übertragen oder im SQL-Code gespeichert.
Um die rollenbasierte Zugriffssteuerung zu verwenden, müssen Sie zunächst unter Verwendung des Amazon-Redshift-Servicerollentyps eine IAM-Rolle erstellen und die Rolle anschließend Ihrem Cluster hinzufügen. Die Rolle muss mindestens die in aufgelisteten Berechtigungen besitzen IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY. Informationen zum Erstellen einer IAM-Rolle und Hinzufügen zu Ihrem Cluster finden Sie unter Amazon Redshift in Ihrem Namen für den Zugriff auf andere AWS-Services autorisieren im Amazon-Redshift-Verwaltungshandbuch.
Sie können über die Amazon-Redshift-Managementkonsole, die CLI oder eine API einem Cluster eine Rolle hinzufügen oder die Rollen anzeigen, die mit einem Cluster verknüpft sind. Weitere Informationen finden Sie unter Verknüpfen einer IAM-Rolle mit einem Cluster im Amazon-Redshift-Verwaltungshandbuch.
Beim Erstellen einer IAM-Rolle gibt IAM einen Amazon-Ressourcennamen (ARN) für die Rolle zurück. Um eine IAM-Rolle anzugeben, geben Sie für den ARN der Rolle entweder den Parameter Verwenden des Parameters IAM_ROLE oder den Parameter Verwenden des Parameters CREDENTIALS an.
Angenommen, die folgende Rolle ist dem Cluster angefügt.
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
Im folgenden Beispiel für den COPY-Befehl wird der Parameter IAM_ROLE mit dem ARN im vorherigen Beispiel verwendet, um Authentifizierung und Zugriff auf Amazon S3 bereitzustellen.
copy customer from 's3://amzn-s3-demo-bucket/mydata' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
Im folgenden Beispiel für den COPY-Befehl wird der Parameter CREDENTIALS verwendet, um die IAM-Rolle anzugeben.
copy customer from 's3://amzn-s3-demo-bucket/mydata' credentials 'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
Darüber hinaus kann ein Superuser Datenbankbenutzern und -gruppen das Privileg ASSUMEROLE gewähren, um einer Rolle Zugriff auf COPY-Operationen zu ermöglichen. Weitere Informationen finden Sie unter GRANT.
Schlüsselbasierte Zugriffssteuerung
Bei einer schlüsselbasierten Zugriffssteuerung geben Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel für einen IAM-Benutzer an, der zum Zugriff auf die AWS-Ressourcen berechtigt ist, die die Daten enthalten. Sie können entweder die Parameter Verwenden der Parameter ACCESS_KEY_ID und SECRET_ACCESS_KEY zusammen verwenden oder den Parameter Verwenden des Parameters CREDENTIALS verwenden.
Anmerkung
Es wird nachdrücklich empfohlen, eine IAM-Rolle für die Authentifizierung zu verwenden, statt eine Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel im Textformat bereitzustellen. Wenn Sie sich für eine schlüsselbasierte Zugriffssteuerung entscheiden, verwenden Sie auf keinen Fall die Anmeldeinformationen für Ihr AWS-Konto (Ihre Stamm-Anmeldeinformationen). Erstellen Sie stets einen IAM-Benutzer und geben Sie die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel für diesen Benutzer an. Schritte zum Erstellen eines IAM-Benutzers finden Sie unter Erstellen eines IAM-Benutzers in Ihrem AWS-Konto.
Um die Authentifizierung mittels ACCESS_KEY_ID und SECRET_ACCESS_KEY zu ermöglichen, ersetzen Sie <access-key-id> und <secret-access-key> durch die Zugriffsschlüssel-ID und den vollständigen geheimen Zugriffsschlüssel eines autorisierten Benutzers für die Parameter ACCESS_KEY_ID und SECRET_ACCESS_KEY, wie im Folgenden gezeigt.
ACCESS_KEY_ID '<access-key-id>' SECRET_ACCESS_KEY '<secret-access-key>';
Um die Authentifizierung mittels des Parameters CREDENTIALS zu ermöglichen, ersetzen Sie <access-key-id> und <secret-access-key> durch die Zugriffsschlüssel-ID und den vollständigen geheimen Zugriffsschlüssel eines autorisierten Benutzers für die Parameter ACCESS_KEY_ID und SECRET_ACCESS_KEY, wie im Folgenden gezeigt.
CREDENTIALS 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';
Der IAM-Benutzer muss mindestens die in aufgelisteten Berechtigungen besitzen IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY.
Temporäre Sicherheitsanmeldeinformationen
Wenn Sie die schlüsselbasierte Zugriffssteuerung verwenden, können Sie den Zugriff weiter einschränken, den Benutzer auf Ihre Daten haben, indem Sie temporäre Sicherheitsanmeldeinformationen verwenden. Die rollenbasierte Authentifizierung verwendet automatisch temporäre Anmeldeinformationen.
Anmerkung
Es wird nachdrücklich empfohlen, die role-based access control zu verwenden, statt temporäre Anmeldeinformationen zu erstellen und Zugriffsschlüssel-ID und einen geheimen Zugriffsschlüssel in Form von reinem Text bereitzustellen. Die rollenbasierte Zugriffssteuerung verwendet automatisch temporäre Anmeldeinformationen.
Temporäre Sicherheitsanmeldeinformationen bieten erweiterte Sicherheit, da sie nur kurzlebig sind und nach ihrem Ablauf nicht erneut verwendet werden können. Die Zugriffsschlüssel-ID und der geheime Zugriffsschlüssel, die mit dem Token generiert werden, können nicht ohne das Token verwendet werden. Ein Benutzer, der diese temporären Sicherheitsanmeldeinformationen besitzt, kann auf Ihre Ressourcen nur solange zugreifen, bis die Anmeldeinformationen ablaufen.
Um Benutzern einen temporären Zugriff auf Ihre Ressourcen zu gewähren, können Sie AWS Security Token Service (AWS STS)-API-Operationen aufrufen. Die AWS STS-API-Operationen geben temporäre Sicherheitsanmeldeinformationen zurück, bestehend aus einem Sicherheitstoken, einer Zugriffsschlüssel-ID und einem geheimen Zugriffsschlüssel. Sie geben die temporären Sicherheitsanmeldeinformationen an die Benutzer aus, die temporären Zugriff auf Ihre Ressourcen benötigen. Bei diesen Benutzern kann es sich um vorhandene IAM-Benutzer oder um Benutzer außerhalb von AWS handeln. Weitere Informationen zum Erstellen temporärer Sicherheitsanmeldeinformationen finden Sie unter Temporäre Sicherheitsanmeldeinformationen im IAM-Benutzerhandbuch.
Sie können die Verwenden der Parameter ACCESS_KEY_ID und SECRET_ACCESS_KEY-Parameter zusammen mit dem Parameter SESSION_TOKEN oder dem Parameter Verwenden des Parameters CREDENTIALS verwenden. Sie müssen auch die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel bereitstellen, die mit dem Token bereitgestellt wurden.
Zur Authentifizierung der Verwendung von ACCESS_KEY_ID, SECRET_ACCESS_KEY, und SESSION_TOKEN ersetzen Sie <temporary-access-key-id>, <temporary-secret-access-key> und <temporary-token> wie nachfolgend gezeigt.
ACCESS_KEY_ID '<temporary-access-key-id>' SECRET_ACCESS_KEY '<temporary-secret-access-key>' SESSION_TOKEN '<temporary-token>';
Um die Authentifizierung mittels CREDENTIALS durchzuführen, fügen Sie session_token= in die Anmeldezeichenfolge ein wie im Folgenden gezeigt. <temporary-token>
CREDENTIALS 'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>';
Im folgenden Beispiel wird ein COPY-Befehl mit temporären Sicherheitsanmeldeinformationen gezeigt.
copy table-name from 's3://objectpath' access_key_id '<temporary-access-key-id>' secret_access_key '<temporary-secret-access-key>' session_token '<temporary-token>';
Im folgenden Beispiel wird die Tabelle LISTING unter Verwendung temporärer Anmeldeinformationen und Dateiverschlüsselung geladen.
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' access_key_id '<temporary-access-key-id>' secret_access_key '<temporary-secret-access-key>' session_token '<temporary-token>' master_symmetric_key '<root-key>' encrypted;
Im folgenden Beispiel wird die Tabelle LISTING unter Verwendung des Parameters CREDENTIALS mit temporären Anmeldeinformationen und Dateiverschlüsselung geladen.
copy listing from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' credentials 'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>;master_symmetric_key=<root-key>' encrypted;
Wichtig
Die temporären Sicherheitsanmeldeinformationen müssen für die gesamte Dauer der COPY- oder UNLOAD-Operation gültig sein. Wenn die temporären Sicherheitsanmeldeinformationen während der Operation ablaufen, schlägt der Befehl fehl und für die Transaktion wird ein Rollback ausgeführt. Wenn die temporären Sicherheitsanmeldeinformationen beispielsweise nach 15 Minuten ablaufen und die COPY-Operation eine Stunde benötigt, schlägt die Operation fehl, bevor sie abgeschlossen ist. Wenn Sie den rollenbasierten Zugriff verwenden, werden die temporären Sicherheitsanmeldeinformationen automatisch aktualisiert, bis die Operation abgeschlossen ist.
IAM-Berechtigungen für COPY, UNLOAD und CREATE LIBRARY
Die IAM-Rolle oder der Benutzer, die bzw. der durch den Parameter CREDENTIALS referenziert wird, muss mindestens die folgenden Berechtigungen besitzen:
-
Für COPY aus Amazon S3 die LIST-Berechtigung für Amazon-S3-Buckets und die GET-Berechtigung für Amazon-S3-Objekte, die geladen werden, sowie die Manifestdatei, falls eine solche verwendet wird.
-
Für COPY aus Amazon S3, Amazon EMR und Remote-Hosts (SSH) mit Daten im JSON-Format, LIST-Berechtigung und GET-Berechtigung für die JSONPaths-Datei in Amazon S3, wenn verwendet.
-
Für COPY aus DynamoDB, SCAN- und DESCRIBE-Berechtigung für die DynamoDB-Tabelle, die geladen wird.
-
Für COPY aus einem Amazon-EMR-Cluster die Berechtigung für die
ListInstances-Aktion auf dem Amazon EMR-Cluster. -
Für UNLOAD zu Amazon S3, GET-, LIST- und PUT-Berechtigungen für den Amazon-S3-Bucket, in den die Datendateien entladen werden.
-
Für CREATE LIBRARY aus Amazon S3 die LIST-Berechtigung für Amazon-S3-Buckets und die GET-Berechtigung für die zu importierenden Amazon-S3-Objekte.
Anmerkung
Wenn Sie bei Ausführung eines COPY-, UNLOAD- oder CREATE LIBRARY-Befehls die Fehlermeldung S3ServiceException: Access
Denied erhalten, besitzt Ihr Cluster nicht die korrekten Zugriffsberechtigungen für Amazon S3.
Sie können IAM-Berechtigungen verwalten, indem Sie einer IAM-Rolle, die Ihrem Cluster angefügt ist, Ihrem Benutzer oder der Gruppe, zu der Ihr Benutzer gehört, eine IAM-Richtlinie anfügen. Beispielsweise gewährt die verwaltete AmazonS3ReadOnlyAccess-Richtlinie LIST- und GET-Berechtigungen in Bezug auf Amazon-S3-Ressourcen. Weitere Informationen zu IAM-Richtlinien finden Sie unter Verwalten von IAM-Richtlinien im IAM-Benutzerhandbuch.