Mein Amazon S3-Bucket enthält Datendateien, die mit dem Befehl UNLOAD aus einem Amazon Redshift-Cluster in einem anderen Konto erstellt wurden. Warum kann ich nicht auf diese Dateien zugreifen?

Lesedauer: 4 Minute
0

Mein Amazon Simple Storage Service (Amazon S3)-Bucket enthält Datendateien, die mit dem Befehl UNLOAD aus einem Amazon Redshift-Cluster in einem anderen AWS-Konto erstellt wurden. Ich erhalte jedoch die Fehlermeldung 403 Access Denied, wenn ich versuche, von meinem eigenen Konto aus auf diese Dateien zuzugreifen. Wie kann ich das beheben?

Kurzbeschreibung

Standardmäßig gehört ein S3-Objekt dem AWS-Konto, das es hochgeladen hat. Dies gilt auch dann, wenn der Bucket einem anderen Konto gehört. Wenn Amazon Redshift-Datendateien von einem anderen Konto in Ihren Bucket aufgenommen werden, haben Sie daher keine Standardberechtigungen für diese Dateien.

Um Zugriff auf die Datendateien zu erhalten, muss eine AWS Identity and Access Management (IAM)-Rolle mit kontoübergreifenden Berechtigungen den Befehl UNLOAD erneut ausführen. Gehen Sie wie folgt vor, um den Amazon Redshift-Cluster mit kontoübergreifenden Berechtigungen für den Bucket einzurichten:

1.    Erstellen Sie vom Konto des S3-Buckets aus eine IAM-Rolle mit Berechtigungen für den Bucket. Das ist die Bucket-Rolle.

2.    Erstellen Sie vom Konto des Amazon Redshift-Clusters aus eine weitere IAM-Rolle mit den Berechtigungen, die Bucket-Rolle zu übernehmen. Dies ist die Cluster-Rolle.

3.    Aktualisieren Sie die Bucket-Rolle, um Bucket-Zugriff zu gewähren, und erstellen Sie dann eine Vertrauensbeziehung mit der Clusterrolle.

4.    Führen Sie vom Amazon Redshift-Cluster aus den Befehl UNLOAD mit der Cluster-Rolle und der Bucket-Rolle.

Wichtig: Diese Behebung gilt nicht für Amazon Redshift-Cluster oder S3-Buckets, die serverseitige Verschlüsselung mit AWS Key Management Service (AWS KMS) verwenden.

Lösung

Eine Bucket-Rolle erstellen

Erstellen Sie vom Konto des S3-Buckets aus eine IAM-Rolle mit Berechtigungen für den Bucket:

1.    Öffnen Sie im Konto des S3-Buckets die IAM-Konsole.

2.    Erstellen Sie eine IAM-Rolle. Wählen Sie beim Erstellen der Rolle Folgendes aus:

Wählen Sie für **Typ der vertrauenswürdigen Entität auswählen ** die Option AWS-Service aus.

Wählen Sie unter Auswählen des Dienstes, der diese Rolle verwenden wird, Redshift.

Wählen Sie unter Auswählen Ihres Anwendungsfalls die Option Redshift – Personalisierbar.

3.    Nachdem Sie die IAM-Rolle erstellt haben, fügen Sie eine Richtlinie hinzu, die dem Bucket Berechtigungen erteilt. Sie können eine Richtlinie verwenden, die der folgenden ähnelt:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1234537676482",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::awsexamplebucket/*",
        "arn:aws:s3:::awsexamplebucket"
      ]
    }
  ]
}

4.Rufen Sie den Amazon-Ressourcennamen (ARN) der Bucket-Rolle ab. Sie benötigen den ARN der Rolle für einen späteren Schritt.

Clusterrolle erstellen

Erstellen Sie vom Konto des Amazon Redshift-Clusters aus eine weitere IAM-Rolle mit den Berechtigungen, die Bucket-Rolle zu übernehmen:

1.    Öffnen Sie vom Konto des Amazon Redshift-Clusters aus die IAM-Konsole.

2.    Erstellen Sie eine IAM-Rolle. Wählen Sie beim Erstellen der Rolle Folgendes aus:

Wählen Sie für **Typ der vertrauenswürdigen Entität auswählen ** die Option AWS-Service aus.

Wählen Sie unter Auswählen des Dienstes, der diese Rolle verwenden wird, Redshift.

Wählen Sie unter Auswählen Ihres Anwendungsfalls die Option Redshift – Personalisierbar.

3.    Nachdem Sie die IAM-Rolle erstellt haben, fügen Sie der Rolle die folgende Richtlinie hinzu:

Wichtig: Ersetzen Sie arn:aws:iam::123456789012:role/Bucket_Role durch den ARN der Bucket-Rolle, die Sie erstellt haben.

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

4.     Ruft den ARN der Clusterrolle ab. Sie benötigen den ARN der Rolle für einen späteren Schritt.

Aktualisieren Sie die Bucket-Rolle, um eine Vertrauensbeziehung mit der Clusterrolle herzustellen

1.    Öffnen Sie im Konto des S3-Buckets die IAM-Konsole.

2.    Wählen Sie im Navigationsbereich Rollen.

3.    Öffnen Sie in der Liste der Rollen die von Ihnen erstellte Bucket-Rolle.

4.    Wählen Sie die Registerkarte Vertrauensbeziehungen.

5.    Wählen Sie Vertrauensbeziehung bearbeiten.

6.    Ersetzen Sie für das Richtliniendokument die bestehende Richtlinie durch die folgende:

Wichtig: Ersetzen Sie arn:aws:iam::012345678901:role/Cluster_Role durch den ARN der Clusterrolle, die Sie erstellt haben.

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

7.    Wählen Sie Vertrauensrichtlinie aktualisieren.

Führen Sie vom Amazon Redshift-Cluster aus den Entladevorgang mithilfe der Cluster-Rolle und der Bucket-Rolle aus

1.    Stellen Sie eine Verbindung zum Amazon Redshift-Cluster her.

2.    Führen Sie den Befehl UNLOAD mit den beiden IAM-Rollen aus, die Sie erstellt haben, ähnlich der folgenden:

Wichtig: Ersetzen Sie arn:aws:iam::012345678901:role/Cluster_Role durch den ARN Ihrer Cluster-Rolle. Ersetzen Sie dann arn:aws:iam::123456789012:role/Bucket_Role durch den ARN Ihrer Bucket-Rolle.

unload ('select * from TABLE_NAME')
to 's3://awsexamplebucket'
iam_role 'arn:aws:iam::012345678901:role/Cluster_Role,arn:aws:iam::123456789012:role/Bucket_Role';

Nachdem Sie den Befehl UNLOAD ausgeführt haben, gehören die Datendateien demselben Konto wie der Bucket, in dem sie gespeichert sind.


Ähnliche Informationen

UNLOAD-Beispiele

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr