Direkt zum Inhalt

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 oder schreiben.

Kurzbeschreibung

Die folgenden Beispiele sind häufige Gründe dafür, dass möglicherweise die Fehlermeldung „Access Denied“ angezeigt wird:

  • 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. Die AWS-KMS-Richtlinie gewährt der IAM-Rolle nicht die Mindestberechtigungen, die für die Verwendung des Schlüssels erforderlich sind.
  • Im S3-Bucket ist die Option Zahlung durch den Aufforderer aktiviert.
  • Die Servicekontrollrichtlinien von AWS Organizations schränken den Zugriff auf den S3-Bucket ein.

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Die IAM-Rollenberechtigungen für den Zugriff auf den S3-Bucket aktualisieren

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

Um die Zugriffsberechtigungen der IAM-Rolle auf den Bucket zu aktualisieren, führe die folgende Schritte aus:

  1. Öffne die IAM-Konsole.
  2. Öffne die IAM-Rolle, die dem AWS Glue-Job zugeordnet ist und Zugriff auf den Bucket erfordert.
  3. Erweitere auf der Registerkarte Berechtigungen des IAM-Benutzers oder der IAM-Rolle jede Richtlinie, um das zugehörige JSON-Richtliniendokument anzuzeigen.
  4. Suche in den JSON-Richtliniendokumenten nach Richtlinien mit dem Namen des Buckets. Vergewissere dich dann, dass diese Richtlinien die richtigen S3-Aktionen für den Bucket zulassen. Wenn der IAM-Benutzer oder die IAM-Rolle keinen Zugriff auf den Bucket gewährt, füge 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/*"
          ]
        }
      ]
    }

Hinweis: Achte darauf, DOC-EXAMPLE-BUCKET in der Richtlinie durch den Namen des S3-Buckets zu ersetzen.

Die Bucket-Richtlinie aktualisieren, um der IAM-Rolle die erforderlichen Berechtigungen zu gewähren

Überprüfe die Bucket-Richtlinie für die folgenden Konfigurationen:

  • 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

Um die Bucket-Richtlinie zu überprüfen und zu ändern, um den erforderlichen Zugriff auf die IAM-Rolle zu gewähren, führe die folgenden Schritte aus:

  1. Öffne die Amazon-S3-Konsole.
  2. Wähle im Navigationsbereich Buckets.
  3. Wähle den S3-Bucket aus.
  4. Überprüfe auf der Seite Berechtigungen unter Bucket-Richtlinie die Bucket-Richtlinie auf alle Aussagen, die der Rolle den Zugriff auf den Bucket verweigern.
  5. Ändere 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 findest du unter Beispiele für Amazon S3-Bucket-Richtlinien.

Den Besitzer eines Objekts aktualisieren

Standardmäßig besitzt das AWS-Konto, das ein Objekt hochlädt, das S3-Objekt. Diese Einstellung gilt auch dann, wenn der Bucket einem anderen Konto gehört. Wenn andere Konten Objekte in den Bucket hochladen können, überprüfe, welchem Konto die Objekte gehören, auf die die IAM-Identität nicht zugreifen können. Um zu überprüfen, welchem Konto das Objekt gehört, führe den Befehl GetObjectACL aus.

Wenn IAM-Identitäten von anderen Konten Objekte in den S3-Bucket hochladen, konfiguriere dann S3 Object Ownership. Füge dann eine Bucket-Richtlinie hinzu, nach der Objekte mit der bucket-owner-full-control-Zugriffsstuerungsliste (ACL) hochgeladen werden müssen. Wenn du die Bucket-Richtlinie hinzufügst, ändert die Richtlinie automatisch den Besitzer des Objekts in den Bucket-Besitzer, wenn das Objekt mit der bucket-owner-full-control-ACL hochgeladen wird. Weitere Informationen findest du 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?

Aktualisieren der Amazon-VPC-Endpunktrichtlinie

Aktualisiere die VPC-Endpunktrichtlinie, um die erforderlichen Berechtigungen für den Zugriff auf die S3-Buckets und -Objekte miteinzubeziehen, wenn die beiden folgenden Bedingungen zutreffen:

  • Der AWS Glue-Job liest oder schreibt Objekte in Amazon S3.
  • Die Verbindung verwendet einen VPC-Endpunkt für die Weiterleitung zu Amazon S3.

Die folgende VPC-Endpunktrichtlinie ermöglicht beispielsweise den Zugriff nur auf den Bucket DOC-EXAMPLE-BUCKET. Wenn der Bucket in der Richtlinie nicht als zulässige Ressource aufgeführt ist, können die Benutzer oder Rollen den VPC-Endpunkt nicht verwenden, um auf den Bucket zuzugreifen:

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

Hinweis: Achte darauf, DOC-EXAMPLE-BUCKET in der Richtlinie durch den Namen des S3-Buckets zu ersetzen.

Wenn Benutzer oder Rollen Objekte mit einer ACL hochladen, musst du 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/*"
    }
  ]
}

Die AWS KMS-Schlüsselrichtlinie aktualisieren, um den Zugriff auf die IAM-Rolle zu ermöglichen

Wenn der ETL-Job (Extrahieren, Transformieren und Laden) verschlüsselte Daten in Amazon S3 liest oder schreibt, muss der Job die folgenden Konfigurationen haben:

  • 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.

Um die erforderlichen AWS KMS-Aktionen zuzulassen, nimm die folgenden Berechtigungen in die Richtlinie der IAM-Rolle auf:

{
  "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"
  }
}

Hinweis: Ersetze den Amazon-Ressourcennamen (ARN) in der Richtlinie durch den ARN deiner Wahl.

Weitere Informationen findest du unter Einrichten der Verschlüsselung in AWS Glue.

Überprüfe 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 findest du unter Schlüsselrichtlinien in AWS KMS.

Die Option „Zahlung durch den Aufforderer“ im S3-Bucket überprüfen

Wenn für den S3-Bucket die Option Zahlung durch den Aufforderer aktiviert ist, müssen alle Anfragen an den Bucket vom AWS Glue-Job den Header Requester Pays enthalten. Standardmäßig, enthalten AWS Glue-Anfragen an Amazon S3 nicht den Header Zahlung durch den Aufforderer. Ohne diesen Header schlägt ein API-Aufruf an einen Bucket Zahlung durch den Aufforderer mit der Ausnahme „Access Denied“ fehl. Um den Header Zahlung durch den Aufforderer zu einem ETL-Skript hinzuzufügen, verwende hadoopConfiguration().set(), um fs.s3.useRequesterPaysHeader in die GlueContext-Variable oder die Apache Spark-Sitzungsvariable aufzunehmen. Weitere Informationen findest du unter Wie greife ich von AWS Glue, Amazon EMR oder Amazon Athena aus auf die Buckets „Zahlung durch den Aufforderer“ in Amazon S3 zu?

Service-Kontrollrichtlinien in AWS Organizations prüfen

Wenn du AWS Organizations verwendest, überprüfe die Richtlinien zur Servicekontrolle, um sicherzustellen, dass die Richtlinie Zugriff auf Amazon S3 erlaubt. Die folgende Richtlinie verweigert beispielsweise explizit den Zugriff auf Amazon S3 und führt zu einem „Access-Denied“-Fehler:

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

Weitere Informationen findest du unter Alle Funktionen für eine Organisation bei AWS Organizations einschalten.

Ähnliche Informationen

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

AWS OFFICIALAktualisiert vor 8 Monaten