Autorisierung von Amazon Redshift zum Zugriff auf andere AWS-Services für Sie - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Autorisierung von Amazon Redshift zum Zugriff auf andere AWS-Services für Sie

Einige Amazon Redshift-Funktionen erfordern Amazon Redshift, um in Ihrem Namen auf andere AWS-Services zuzugreifen. Beispielsweise können die Befehle COPY und UNLOAD mithilfe eines Amazon Redshift-Buckets Daten in Ihren Amazon S3-Cluster laden oder entladen. Der Befehl CREATE EXTERNAL FUNCTION kann eine AWS Lambda-Funktion mit einer skalaren benutzerdefinierten Lambda-Funktion (UDF) aufrufen. Amazon Redshift Spectrum kann einen Datenkatalog in Amazon Athena oder AWS Glue verwenden. Damit Ihre Amazon Redshift-Cluster für Sie handeln können, stellen Sie ihnen Sicherheitsanmeldeinformationen bereit. Zur Bereitstellung von Sicherheitsanmeldeinformationen geben Sie am besten eine AWS Identity and Access Management (IAM)-Rolle an. Für COPY und UNLOAD können Sie AWS-Zugriffsschlüssel bereitstellen.

Im Folgenden erfahren Sie, wie Sie eine IAM-Rolle mit den entsprechenden Berechtigungen für den Zugriff auf andere AWS-Services erstellen. Außerdem müssen Sie die Rolle Ihrem Cluster zuordnen und den Amazon-Ressourcennamen (ARN) der Rolle angeben, wenn Sie den Befehl Amazon Redshift ausführen. Weitere Informationen finden Sie unter Autorisieren von COPY-, UNLOAD-, CREATE EXTERNAL FUNCTION- und CREATE EXTERNAL SCHEMA-Operationen mithilfe von IAM-Rollen.

Darüber hinaus kann ein Superuser bestimmten Benutzern und Gruppen die ASSUMEROLE-Berechtigung erteilen, um Zugriff auf eine Rolle für COPY- und UNLOAD-Operationen zu gewähren. Weitere Informationen finden Sie unter GRANT im Amazon Redshift Database Developer Guide.

Erstellen einer IAM-Rolle, damit Ihr Amazon Redshift-Cluster auf AWS-Services zugreifen kann

Führen Sie die folgenden Schritte aus, um eine IAM-Rolle zu erstellen, mit der Ihr Amazon Redshift-Cluster in Ihrem Namen mit anderen AWS-Services kommunizieren kann. Die in diesem Abschnitt verwendeten Werte sind Beispiele, Sie können Werte basierend auf Ihren Anforderungen auswählen.

So erstellen Sie eine IAM-Rolle, damit Amazon Redshift auf AWS-Services zugreifen kann

  1. Öffnen Sie die IAM-Konsole.

  2. Wählen Sie im Navigationsbereich Roles aus.

  3. Wählen Sie Create role aus.

  4. Klicken Sie auf AWS service (AWS-Service) und anschließend auf Redshift.

  5. Wählen Sie unter Select your use case (Anwendungsfall auswählen) die Option Redshift - Customizable (Redshift – Anpassbar) und dann Next: (Weiter:) aus. Berechtigungen Die Seite Attach permissions policy (Berechtigungsrichtlinie anfügen) wird angezeigt.

  6. Für den Zugriff auf Amazon S3 mit COPY können Sie beispielsweise AmazonS3ReadOnlyAccess verwenden und anhängen. Für den Zugriff auf Amazon S3 mit COPY oder UNLOAD empfehlen wir, dass Sie verwaltete Richtlinien erstellen können, die den Zugriff auf den gewünschten Bucket und das Präfix entsprechend einschränken. Sowohl für Lese- als auch für Schreibvorgänge empfehlen wir, die geringsten Berechtigungen zu erzwingen und nur die Amazon S3-Buckets und Schlüsselpräfixe zu beschränken, die Amazon Redshift benötigt.

    Für den Zugriff auf das Aufrufen von Lambda-Funktionen für den Befehl CREATE EXTERNAL FUNCTION fügen Sie AWSLambdaRole hinzu.

    Für den Zugriff auf Redshift Spectrum zusätzlich zu Amazon S3 fügen Sie AWSGlueConsoleFullAccess or AmazonAthenaFullAccess hinzu.

    Wählen Sie Next: (Weiter:) aus. -Tags.

  7. Die Seite Add tags (Tags hinzufügen) wird angezeigt. Sie können optional Tags hinzufügen. Wählen Sie Next: (Weiter:) aus. -Prüfung.

  8. Geben Sie unter Role name (Rollenname) einen Namen für die Rolle ein, z. B. RedshiftCopyUnload. Wählen Sie Create role.

  9. Die neue Rolle ist für alle Benutzer auf Clustern verfügbar, die diese Rolle verwenden. Um den Zugriff auf bestimmte Benutzer auf bestimmten Clustern oder auf Clustern in bestimmten Regionen zu beschränken, bearbeiten Sie das Vertrauensverhältnis für die Rolle. Weitere Informationen finden Sie unter Einschränken des Zugriffs auf IAM-Rollen.

  10. Weisen Sie die Rolle zu Ihrem Cluster zu. Sie können eine IAM-Rolle einem Cluster zuweisen, wenn Sie den Cluster erstellen, Sie können sie aber auch einem vorhandenen Cluster zuweisen. Weitere Informationen finden Sie unter Verknüpfen von IAM-Rollen mit Clustern.

    Anmerkung

    Um den Zugriff auf bestimmte Daten einzuschränken, verwenden Sie eine IAM-Rolle, die die geringsten benötigten Berechtigungen gewährt.

Einschränken des Zugriffs auf IAM-Rollen

Standardmäßig sind IAM-Rollen, die in einem Amazon Redshift-Cluster verfügbar sind, für alle Benutzer in diesem Cluster verfügbar. Sie können die IAM-Rollen auch auf bestimmte Amazon Redshift-Datenbankbenutzer auf bestimmten Clustern oder in bestimmten Regionen einschränken.

Gehen Sie wie folgt vor, um nur bestimmten Datenbankbenutzern zu erlauben, eine IAM-Rolle zu verwenden.

So identifizieren Sie bestimmte Datenbankbenutzer mit Zugriff auf eine IAM-Rolle:

  1. Identifizieren Sie den Amazon-Ressourcennamen (ARN) für die Datenbankbenutzer in Ihrem Amazon Redshift-Cluster. Der ARN für einen Datenbankbenutzer hat das folgende Format: arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name:

  2. Öffnen Sie die IAM-Konsole unter url="https://console.aws.amazon.com/.

  3. Wählen Sie im Navigationsbereich Roles aus.

  4. Wählen Sie die IAM-Rolle, die Sie auf bestimmte Amazon Redshift-Datenbankbenutzer einschränken möchten.

  5. Wählen Sie die Registerkarte Trust Relationships (Vertrauensstellungen) und anschließend Edit Trust Relationship (Vertrauensstellung bearbeiten) aus. Eine neue IAM-Rolle, die Amazon Redshift den Zugriff auf andere AWS-Services gestattet, besitzt eine Vertrauensstellung, wie im Folgenden beschrieben:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  6. Fügen Sie dem Aktionsabschnitt sts:AssumeRole des Vertrauensverhältnisses eine Bedingung hinzu, die das Feld sts:ExternalId auf die von Ihnen angegebenen Werte beschränkt. Fügen Sie einen ARN für jeden Datenbankbenutzer hinzu, dem Sie den zugriff auf die Rolle gewähren möchten.

    Beispielsweise gibt das folgende Vertrauensverhältnis an, dass nur die Datenbankbenutzer user1 und user2 auf dem Cluster my-cluster in der Region us-west-2 zur Verwendung dieser IAM-Rolle berechtigt sind.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": [ "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1", "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2" ] } } }] }
  7. Wählen Sie Update Trust Policy.

Einschränkung einer IAM-Rolle auf eine AWS-Region

Sie können einschränken, dass eine IAM-Rolle nur in einer bestimmten AWS-Region zugänglich ist. Standardmäßig sind IAM-Rollen für Amazon Redshift nicht auf eine einzelne Region beschränkt.

Gehen Sie wie folgt vor, um die Nutzung einer IAM-Rolle nach Region einzuschränken.

So identifizieren Sie die zugelassenen Regionen für eine IAM-Rolle:

  1. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com.

  2. Wählen Sie im Navigationsbereich Roles aus.

  3. Wählen Sie die Rolle, die Sie für bestimmte Regionen modifizieren möchten.

  4. Wählen Sie die Registerkarte Trust Relationships (Vertrauensstellungen) und anschließend Edit Trust Relationship (Vertrauensstellung bearbeiten) aus. Eine neue IAM-Rolle, die Amazon Redshift den Zugriff auf andere AWS-Services gestattet, besitzt eine Vertrauensstellung, wie im Folgenden beschrieben:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  5. Ändern Sie die Service-Liste für den Principal mit der Liste der Regionen, für die die Verwendung der Rolle erlaubt sein soll. Jede Region in der Service-Liste muss das folgende Format aufweisen: redshift.region.amazonaws.com:

    Beispielsweise erlaubt das folgende bearbeitete Treuhandverhältnis die Verwendung der IAM-Rolle nur in den Regionen us-east-1 und us-west-2.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.us-east-1.amazonaws.com", "redshift.us-west-2.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. Wählen Sie Update Trust Policy (Vetrauensrichtlinie aktualisieren)

Verketten von IAM-Rollen in Amazon Redshift

Wenn Sie Ihrem Cluster eine Rolle anfügen, kann Ihr Cluster diese Rolle annehmen, um in Ihrem Namen auf Amazon S3, Amazon Athena, AWS Glue und AWS Lambda zuzugreifen. Wenn eine an den Cluster angefügte Rolle keinen Zugriff auf die erforderlichen Ressourcen hat, können Sie mit ihr eine andere Rolle verketten, die möglicherweise zu einem anderen Konto gehört. Ihr Cluster nimmt dann vorübergehend die verkettete Rolle an, um auf die Daten zuzugreifen. Sie können über verkettete Rollen auch kontoübergreifenden Zugriff gewähren. Jede Rolle in der Kette nimmt die nächste Rolle in der Kette an, bis hin zum Cluster, der die Rolle am Ende der Kette annimmt. Sie können maximal 10 Rollen miteinander verketten.

Angenommen, Unternehmen A möchte auf Daten eines Amazon S3-Buckets zugreifen, der Unternehmen B gehört. Unternehmen A erstellt eine AWS-Servicerolle für Amazon Redshift mit dem Namen RoleA und fügt sie seinem Cluster an. Unternehmen B erstellt eine Rolle mit dem Namen RoleB, die berechtigt ist, auf die Daten des Buckets von Unternehmen B zuzugreifen. Um auf die Daten im Bucket von Unternehmen B zuzugreifen, führt Unternehmen A einen COPY-Befehl mit einem iam_role-Parameter aus, der RoleA und RoleB verkettet. Für die Dauer der COPY-Operation nimmt RoleA vorübergehend RoleB an, um auf den Amazon S3-Bucket zuzugreifen.

Zum Verketten von Rollen richten Sie eine Vertrauensstellung zwischen den Rollen ein. Eine Rolle, die eine andere Rolle annimmt (z. B. RoleA), muss über eine Berechtigungsrichtlinie verfügen, die es ihr erlaubt, die nächste verkettete Rolle (z. B. RoleB) anzunehmen. Die Rolle, die Berechtigungen übergibt (RoleB), muss wiederum über eine Vertrauensstellung verfügen, die es ihr erlaubt, ihre Berechtigungen an die vorherige verkettete Rolle (RoleA) zu übergeben. Weitere Informationen finden Sie unter Verwenden von IAM-Rollen im IAM-Benutzerhandbuch.

Die erste Rolle in der Kette muss eine dem Cluster angefügte Rolle sein. Die erste und jede folgende Rolle, die die nächste Rolle in der Kette annimmt, muss über eine Richtlinie verfügen, die eine bestimmte Anweisung enthält. Diese Anweisung enthält die Auswirkung Allow auf die Aktion sts:AssumeRole und den Amazon-Ressourcennamen (ARN) der nächsten Rolle in einem Resource-Element. In unserem Beispiel verfügt RoleA über die folgende Berechtigungsrichtlinie, die es ihr erlaubt, RoleB anzunehmen, die dem AWS-Konto 210987654321 gehört.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487639602000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::210987654321:role/RoleB" } ] }

Eine Rolle, die einer anderen Rolle übergeben wird, muss eine Vertrauensstellung mit der Rolle einrichten, die die Rolle annimmt, oder mit dem AWS-Konto, dem die Rolle gehört. In unserem Beispiel verfügt RoleB über die folgende Vertrauensrichtlinie zum Einrichten einer Vertrauensstellung mit RoleA.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::role/RoleA" } ] }

Die folgende Vertrauensrichtlinie richtet eine Vertrauensstellung mit dem Eigentümer von RoleA, AWS-Konto 123456789012, ein.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:root" } } ] }

Wenn Sie den Befehl UNLOAD, COPY, CREATE EXTERNAL FUNCTION oder CREATE EXTERNAL SCHEMA ausführen, verketten Sie Rollen, indem Sie eine durch Komma getrennte Liste der Rolle ARNs im Parameter iam_role einschließen. Nachfolgend finden Sie die Syntax für die Verkettung von Rollen im iam_role-Parameter.

unload ('select * from venue limit 10') to 's3://acmedata/redshift/venue_pipe_' IAM_ROLE 'arn:aws:iam::<aws-account-id-1>:role/<role-name-1>[,arn:aws:iam::<aws-account-id-2>:role/<role-name-2>][,...]';
Anmerkung

Die gesamte Rollenkette ist in einfachen Anführungszeichen eingeschlossen und darf keine Leerzeichen enthalten.

In den folgenden Beispielen ist RoleA dem Cluster angefügt, der zum AWS-Konto 123456789012 gehört. RoleB, das zum Konto 210987654321 gehört, hat die Berechtigung für den Zugriff auf den Bucket mit dem Namen s3://companyb/redshift/. Im folgenden Beispiel werden RoleA und RoleB mit UNLOAD-Daten mit dem s3://companyb/redshift/-Bucket verkettet.

unload ('select * from venue limit 10') to 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Das folgende Beispiel verwendet den COPY-Befehl zum Laden der Daten, die im vorherigen Beispiel entladen wurden.

copy venue from 's3://companyb/redshift/venue_pipe_' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Im folgende Beispiel verwendet der CREATE EXTERNAL SCHEMA-Befehl verkettete Rollen, um die Rolle RoleB anzunehmen.

create external schema spectrumexample from data catalog database 'exampledb' region 'us-west-2' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';

Im folgenden Beispiel verwendet CREATE EXTERNAL FUNCTION verkettete Rollen, um die Rolle RoleB anzunehmen.

create external function lambda_example(varchar) returns varchar volatile lambda 'exampleLambdaFunction' iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';