

 Amazon Redshift unterstützt UDFs ab Patch 198 nicht mehr die Erstellung von neuem Python. Das bestehende Python UDFs wird bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im [Blog-Posting](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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.

# Verketten von IAM-Rollen in Amazon Redshift
<a name="authorizing-redshift-service-chaining-roles"></a>

Wenn Sie Ihrem Cluster eine Rolle zuordnen, kann Ihr Cluster diese Rolle übernehmen, um auf Amazon S3, Amazon Athena und in AWS Lambda Ihrem Namen zuzugreifen. AWS Glue 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. Die maximale Anzahl von IAM-Rollen, die Sie zuordnen können, unterliegt einem Kontingent. Weitere Informationen finden Sie unter dem Kontingent „Cluster-IAM-Rollen für Amazon Redshift für den Zugriff auf andere AWS Dienste“ unter. [Kontingente für Amazon-Redshift-Objekte](amazon-redshift-limits.md#amazon-redshift-limits-quota) 

**Anmerkung**  
Sie müssen die IAM-Rollen angeben, damit die Verkettung ordnungsgemäß funktioniert.

Nehmen wir zum Beispiel an, Unternehmen A möchte auf Daten in einem Amazon S3 S3-Bucket zugreifen, der zu Unternehmen B gehört. Unternehmen A erstellt eine AWS Servicerolle für Amazon Redshift mit dem Namen `RoleA` und fügt sie ihrem Cluster hinzu. 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 den Befehl COPY mit einem `iam_role`-Parameter aus, der `RoleA` und `RoleB` verkettet. Für die Dauer des COPY-Vorgangs übernimmt `RoleA` vorübergehend `RoleB`, 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) 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` zu übernehmen, die dem AWS -Konto `210987654321` gehört. 

------
#### [ JSON ]

****  

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

------

Eine Rolle, die an eine andere Rolle übergeht, muss eine Vertrauensbeziehung mit der Rolle aufbauen, die die Rolle übernimmt, 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`.

------
#### [ JSON ]

****  

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

------

Mit der folgenden Vertrauensrichtlinie wird eine Vertrauensbeziehung mit dem AWS Kontoinhaber hergestellt`123456789012`. `RoleA`

------
#### [ JSON ]

****  

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

------

**Anmerkung**  
Um die Autorisierung zur Rollenverkettung auf bestimmte Benutzer zu beschränken, definieren Sie eine Bedingung. Weitere Informationen finden Sie unter [Einschränken des Zugriffs auf IAM-Rollen](authorizing-redshift-service-database-users.md).

Wenn Sie einen UNLOAD-, COPY-, CREATE EXTERNAL FUNCTION- oder CREATE EXTERNAL SCHEMA-Befehl ausführen, verketten Sie Rollen, indem Sie eine durch Kommas getrennte Rollenliste ARNs in den Parameter aufnehmen. `iam_role` 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 dem AWS -Konto `123456789012` gehört. `RoleB`, die dem Konto `210987654321` gehört, ist berechtigt, auf den Bucket mit dem Namen `s3://companyb/redshift/` zuzugreifen. Im folgenden Beispiel werden `RoleA` und `RoleB` verkettet, um Daten mit dem UNLOAD-Befehl im s3://companyb/redshift/-Bucket zu entladen. 

```
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 anzunehmen `RoleB`.

```
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 der Befehl CREATE EXTERNAL FUNCTION verkettete Rollen, um die Rolle anzunehmen `RoleB`.

```
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';
```