Warum erhalte ich einen „Zugriff verweigert“-Fehler für ListObjectsV2, wenn ich einen Sync-Befehl für meinen Amazon-S3-Bucket ausführe?

Letzte Aktualisierung: 01.11.2021

Ich führe den Befehl aws s3 sync aus, um Objekte in einen oder aus einem Amazon Simple Storage Service (Amazon S3)-Bucket zu kopieren. Ich erhalte jedoch die Fehlermeldung „Zugriff verweigert“, wenn ich den Vorgang ListObjectsV2 aufrufe. Wie kann ich dies beheben?

Kurzbeschreibung

Wenn Sie den Befehl aws s3 sync ausführen, gibt Amazon S3 die folgenden API-Aufrufe aus: ListObjectsV2, CopyObject, GetObject, and PutObject.

Genauer gesagt passiert Folgendes:

1.    Amazon S3 listet die Quelle und das Ziel auf, um zu überprüfen, ob das Objekt vorhanden ist.

2.    Amazon S3 führt dann die folgenden API-Aufrufe aus:

CopyObject-Aufruf für einen Bucket-to-Bucket-Betrieb
GetObject für einen Bucket-to-Local-Betrieb
PutObject für eine Local-to-Bucket-Operation

Hinweis: In dieser Auflösung wird davon ausgegangen, dass die Aufrufe GetObject und PutObject bereits dem AWS Identity Access Management (IAM)-Benutzer bzw. -Rolle gewährt wurden. Diese Auflösung befasst sich mit der Behebung des Fehlers „Zugriff verweigert“, der durch falsche ListBucket-Berechtigungen oder die Verwendung einer falschen sync-Befehlssyntax mit Requester Pays verursacht wurde.

Auflösung

Konfigurieren der IAM-Richtlinie

Stellen Sie sicher, dass Sie über die Berechtigung für s3:ListBucket für die Amazon-S3-Buckets verfügen, in die oder aus denen Sie Objekte kopieren. Sie benötigen diese Berechtigung, um ListObjectsV2-Aktionen auszuführen.

Hinweis: s3:ListBucket ist die Bezeichnung der Berechtigung, mit der ein Benutzer die Objekte in einem Bucket auflisten kann. ListObjectsV2 ist die Bezeichnung des API-Aufrufs, der die Objekte in einem Bucket auflistet.

Wenn Ihr IAM-Benutzer oder Ihre IAM-Rolle zu einem anderen AWS-Konto gehört, prüfen Sie, ob Ihre IAM- und Bucket-Richtlinien die Aktion s3:ListBucket erlauben. Sie müssen sowohl in Ihrer IAM-Richtlinie als auch in Ihrer Bucket-Richtlinie über die Berechtigung für s3:ListBucket verfügen.

Wenn Ihr Benutzer oder Ihre Rolle zum Konto des Bucket-Eigentümers gehört, benötigen Sie nicht sowohl die IAM- als auch die Bucket-Richtlinien, um s3:ListBucket zuzulassen. Nur eine davon ist notwendig, um die Aktion zu erlauben.

Wichtig: Wenn entweder die IAM-Richtlinie oder die Bucket-Richtlinie die Aktion s3:ListBucket bereits erlauben, überprüfen Sie die andere Richtlinie auf Anweisungen, die den Zugriff auf die Aktion explizit verweigern. Eine explizite Zugriffsverweigerung hebt eine Erlaubnis auf.

Im Folgenden finden Sie ein Beispiel für eine IAM-Richtlinie, die Zugriff auf s3:ListBucket gewährt:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Stmt1546506260896",
    "Action": "s3:ListBucket",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET"
  }]
}

Im Folgenden finden Sie ein Beispiel für eine Bucket-Richtlinie, die dem Benutzer arn:aws:iam::123456789012:user/testuser Zugriff auf s3:ListBucket gewährt:

{
  "Id": "Policy1546414473940",
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Stmt1546414471931",
    "Action": "s3:ListBucket",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET",
    "Principal": {
      "AWS": [
        "arn:aws:iam::123456789012:user/testuser"
      ]
    }
  }]
}

Verwenden des sync-Befehls mit Requester Pays

Wenn Ihr Bucket zu einem anderen AWS-Konto gehört und Requester Pays aktiviert ist, überprüfen Sie, ob Ihre Bucket-Richtlinie und IAM-Berechtigungen beide ListObjectsV2-Berechtigung gewähren. Wenn die ListObjectsV2-Berechtigungen ordnungsgemäß erteilt wurden, überprüfen Sie die Syntax Ihres sync-Befehls. Wenn Sie den sync-Befehl verwenden, müssen Sie die Requester-Option --request-payer einschließen. Andernfalls erhalten Sie einen „Zugriff verweigert“-Fehler.

Beispiel:

aws s3 sync ./ s3://requester-pays-bucket/ --request-payer requester

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?