Warum gibt mein AWS Glue-Job den Fehler 403 Access Denied zurück?

Lesedauer: 7 Minute
0

Mein AWS Glue-Job gibt den Fehler 403 Access Denied zurück, wenn der Job versucht, in einen Amazon Simple Storage Service (Amazon S3)-Bucket zu lesen/schreiben.

Kurzbeschreibung

Die Fehlermeldung „Zugriff verweigert“ wird normalerweise aus einem der folgenden Gründe angezeigt:

  • Die Rolle AWS Identity and Access Management (IAM) verfügt nicht über die erforderlichen Berechtigungen für den Zugriff auf den Bucket.
  • Die Amazon S3-Bucket-Richtlinien erlauben nicht die erforderlichen Berechtigungen für die IAM-Rolle.
  • Der S3-Bucket-Besitzer unterscheidet sich vom Objekteigentümer.
  • Die Endpunktrichtlinie von Amazon Virtual Private Cloud (Amazon VPC) beinhaltet nicht die erforderlichen Berechtigungen für den Zugriff auf den S3-Bucket.
  • Das Objekt wird vom AWS Key Management Service (AWS KMS) verschlüsselt, und die AWS KMS-Richtlinie gewährt der IAM-Rolle nicht die für die Verwendung des Schlüssels erforderlichen Mindestberechtigungen.
  • Im S3-Bucket ist Requester Paysaktiviert.
  • Der Zugriff auf den S3-Bucket ist durch die Servicekontrollrichtlinien von AWS Organizations eingeschränkt.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

Behebung

Stellen Sie sicher, dass die IAM-Rolle über die erforderlichen Berechtigungen für den Zugriff auf den S3-Bucket verfügt

Die IAM-Rolle, die den AWS Glue-Job ausführt, benötigt Zugriff auf den S3-Bucket. Sie können der IAM-Rolle die erforderlichen Berechtigungen gewähren, indem Sie der IAM-Rolle eine IAM-Richtlinie zuordnen. Es ist auch eine bewährte Methode, die verwaltete AwsGlueServiceRole Policy an die IAM-Rolle anzuhängen, um zu bestätigen, dass die grundlegenden AWS Glue-Auftragsberechtigungen bereitgestellt werden. Erstellen Sie außerdem eine vom Kunden verwaltete Richtlinie und hängen Sie an, um die Berechtigungen zum Ablegen von S3-Objekten während des Schreibens zu erhalten.

Gehen Sie wie folgt vor, um die Zugriffsberechtigungen der IAM-Rolle auf den Bucket zu aktualisieren:

1.    Öffnen Sie die IAM-Konsole.

2.    Öffnen Sie die IAM-Rolle, die dem AWS Glue-Job zugeordnet ist und Zugriff auf den Bucket erfordert.

3.    Erweitern Sie auf der Registerkarte Berechtigungen des IAM-Benutzers oder der IAM-Rolle jede Richtlinie, um das zugehörige JSON-Richtliniendokument anzuzeigen.

4.    Suchen Sie in den JSON-Richtliniendokumenten nach Richtlinien mit dem Namen des Buckets. Vergewissern Sie sich dann, dass diese Richtlinien die richtigen S3-Aktionen für den Bucket zulassen.

5.    Wenn der IAM-Benutzer oder die IAM-Rolle keinen Zugriff auf den Bucket gewährt, fügen Sie eine Richtlinie hinzu, dass die richtigen Berechtigungen gewährt. Beispielsweise gewährt die folgende IAM-Richtlinie der IAM-Rolle Zugriff darauf, Objekte (s3:putObject) in den S3-Bucket DOC-EXAMPLE-BUCKET zu legen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": "s3:PutObject",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ]
    }
  ]
}

Achten Sie darauf, DOC-EXAMPLE-BUCKETin der Richtlinie durch den Namen Ihres S3-Buckets zu ersetzen.

Stellen Sie sicher, dass die Bucket-Richtlinie der IAM-Rolle die erforderlichen Berechtigungen gewährt

In der Bucket-Richtlinie finden Sie Folgendes:

  • Alle Anweisungen, die der IAM-Rolle ausdrücklich den Zugriff auf den Bucket verweigern
  • Alle fehlenden Berechtigungen und Bedingungen, die den Zugriff der IAM-Rolle einschränken könnten

Gehen Sie wie folgt vor, um die Bucket-Richtlinie zu überprüfen und zu ändern, um den erforderlichen Zugriff auf die IAM-Rolle zu gewähren:

1.    Öffnen Sie die Amazon S3-Konsole.

2.    Wählen Sie im Navigationsbereich Buckets.

3.    Öffnen Sie in der Liste der Buckets den Bucket, den Sie überprüfen möchten.

4.    Wählen Sie Berechtigungenund scrollen Sie dann nach unten zum **Abschnitt **Bucket-Richtlinie.

5.    Überprüfen Sie die Bucket-Richtlinie auf alle Anweisungen, die der Rolle den Zugriff auf den Bucket verweigern.

6.Ändern Sie die Bucket-Richtlinie um alle Anweisungen zu bearbeiten oder zu entfernen, die der IAM-Rolle den Zugriff auf den Bucket verweigern.

Beispiele für Bucket-Richtlinien finden Sie unter Beispiele für Bucket-Richtlinien.

Stellen Sie sicher, dass der S3-Bucket-Besitzer Zugriff auf Objekte hat

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 andere Konten Objekte in Ihren Bucket hochladen können, überprüfen Sie, welchem Konto die Objekte gehören, auf die Ihre Benutzer/Rollen nicht zugreifen können. Sie können den Objekteigentümer überprüfen, indem Sie den Befehl GetObjectACL ausführen.

Wenn IAM-Benutzer/Rollen von anderen Konten Objekte in Ihren S3-Bucket hochladen, richten Sie S3 Object Ownership ein. Fügen Sie dann eine Bucket-Richtlinie hinzu, nach der Objekte mit der Bucket-Owner-Full-Control Access Control List (ACL) hochgeladen werden müssen. Durch das Hinzufügen der Bucket-Richtlinie wird der Besitzer des Objekts automatisch zum Bucket-Besitzer geändert, wenn das Objekt mit der bucket-owner-full-control-ACL hochgeladen wird. Weitere Informationen finden Sie unter Wenn andere AWS-Konten Objekte in meinen Amazon S3-Bucket hochladen, wie kann ich verlangen, dass sie mir die volle Kontrolle über die Objekte gewähren?

Stellen Sie sicher, dass die Amazon VPC-Endpunktrichtlinie die erforderlichen Aktionen für den S3-Bucket zulässt

Stellen Sie sicher, dass die VPC-Endpunktrichtlinie die erforderlichen Berechtigungen für den Zugriff auf die S3-Buckets und -Objekte enthält, wenn die beiden folgenden Bedingungen zutreffen:

  • Ihr AWS Glue-Job liest oder schreibt Objekte in S3.
  • Die Verbindung wird über einen VPC-Endpunkt an S3 weitergeleitet.

Die folgende VPC-Endpunktrichtlinie ermöglicht beispielsweise nur den Zugriff auf den Bucket ****DOC-EXAMPLE-BUCKET. Wenn Ihr Bucket in der Richtlinie nicht als zulässige Ressource aufgeführt ist, können die Benutzer/Rollen nicht über den VPC-Endpunkt auf Ihren Bucket zugreifen.

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Achten Sie darauf, DOC-EXAMPLE-BUCKETin der Richtlinie durch den Namen Ihres S3-Buckets zu ersetzen.

Wenn Benutzer/Rollen Objekte mit einer ACL hochladen, müssen Sie die VPC-Endpunktrichtlinie aktualisieren, um Zugriff auf die PutObjectAcl -Aktion zu gewähren. Zum Beispiel:

{
  "Statement": [
    {
      "Sid": "Access-to-specific-bucket-only",
      "Principal": "*",
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
    }
  ]
}

Stellen Sie sicher, dass die Richtlinie des AWS KMS-Schlüssels den Zugriff auf die IAM-Rolle zulässt

Wenn Ihr ETL-Job (Extrahieren, Transformieren und Laden) verschlüsselte Daten liest oder in Amazon S3 schreibt, sollten Sie Folgendes beachten:

  • Die Richtlinie der IAM-Rolle beinhaltet die Berechtigungen, die für die AWS KMS-Aktionen erforderlich sind.
  • Die Richtlinie des AWS KMS-Schlüssels beinhaltet die erforderlichen Berechtigungen für die IAM-Rolle.

Nehmen Sie die folgenden Berechtigungen in die Richtlinie der IAM-Rolle auf, um die erforderlichen AWS KMS-Aktionen zuzulassen:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Decrypt",
      "kms:Encrypt",
      "kms:GenerateDataKey"
    ],
    "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }
}

Achten Sie darauf, den ARN in der Richtlinie durch den ARN Ihrer Wahl zu ersetzen.

Weitere Informationen finden Sie unter Verschlüsselung in AWS Glue einrichten.

Überprüfen Sie die KMS-Schlüsselrichtlinie, um zu überprüfen, ob die Richtlinie den Zugriff auf die Rolle des AWS Glue-Jobs ermöglicht. Weitere Informationen zu den wichtigsten Richtlinien finden Sie unter Verwenden von Schlüsselrichtlinien in AWS KMS.

Stellen Sie sicher, dass Sie den Header „Requester Pays“ angeben, wenn im Bucket die Option „Requester Pays“ aktiviert ist

Wenn für den S3-Bucket Requester Pays aktiviert ist, müssen alle Anfragen an den Bucket vom AWS Glue-Job den Header Requester Pays enthalten. AWS Glue-Anfragen an Amazon S3 enthalten standardmäßig nicht den Header Requester Pays. Ohne diesen Header schlägt ein API-Aufruf an einen Requester Pays-Bucket mit der Ausnahme Access Denied fehl. Um den Requester Pays-Header zu einem ETL-Skript hinzuzufügen, verwenden Sie hadoopConfiguration().set(), um fs.s3.useRequesterPaysHeader in die GlueContext-Variable oder die Apache Spark-Sitzungsvariable aufzunehmen.

Weitere Informationen finden Sie unter Wie kann ich von AWS Glue, Amazon EMR oder Amazon Athena aus auf Amazon S3 Requester Pays-Buckets zugreifen?

Stellen Sie sicher, dass die Servicekontrollrichtlinien von AWS Organizations den Zugriff auf S3 zulassen

Wenn Sie AWS Organizations verwenden, überprüfen Sie die Richtlinien zur Servicekontrolle, um sicherzustellen, dass der Zugriff auf Amazon S3 zulässig ist. Die folgende Richtlinie verweigert beispielsweise ausdrücklich den Zugriff auf Amazon S3 und führt zu einem Fehler „Zugriff verweigert“.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

Weitere Informationen finden Sie unter Alle Funktionen in Ihrer Organisation aktivieren.


Ähnliche Informationen

Wie behebe ich Fehler vom Typ „403 Zugriff verweigert“ in Amazon S3?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren