2016-08-04 10 views
31

Ich bekomme An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied, wenn ich versuche, Ordner aus meinem S3-Bucket zu bekommen.AccessDenied für ListObjects für S3-Bucket, wenn Berechtigungen s3 sind: *

mit diesem Befehl aws s3 cp s3://bucket-name/data/all-data/ . --recursive

Die IAM-Berechtigungen für den Eimer so aussehen

{ 
"Version": "version_id", 
"Statement": [ 
    { 
     "Sid": "some_id", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:*" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::bucketname/*" 
     ] 
    } 
] } 

Was ich erfolgreich copy und ls in der Lage sein ändern tun müssen?

Antwort

61

Sie haben die Berechtigung zum Ausführen von Befehlen für Objekte im S3-Bucket erteilt, aber Sie haben keine Berechtigung zum Ausführen von Aktionen für den Bucket selbst erteilt. Ändern Sie bitte Ihre Politik, die folgenden sein:

{ 
"Version": "version_id", 
"Statement": [ 
    { 
     "Sid": "some_id", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:*" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::bucketname", 
      "arn:aws:s3:::bucketname/*" 
     ] 
    } 
] } 
+5

Dies ist zu breit eine Aktionsliste. Was würden Sie für Listen- und Kopierrechte vorschlagen? –

+1

@domfarr Ich habe gerade so wenig wie möglich daran gearbeitet, die OP-Richtlinien anzupassen, damit es für ihn funktioniert. Wenn Sie eine bestimmte Frage haben, sollten Sie sie als separate Frage auf dieser Website veröffentlichen, anstatt sie mit Kommentaren zu versehen. Obwohl es sehr einfach sein sollte, die Liste der S3-Aktionen zu betrachten und die gewünschte Richtlinie zu erstellen. –

+1

Ich habe nicht markiert. OP hat angefordert, was für Kopie und ls benötigt wurde. Das Fehlen von Bucket Level Arn wurde hinzugefügt, aber du hast die Aktionen nicht angepasst ... daher mein Kommentar. –

1

Ich war nicht in der Lage zu S3 zugreifen, da

  • ersten I-Taste Zugriff auf die Instanz konfiguriert (es war unmöglich Rolle nach dem Start befestigen dann)
  • vergaß es für ein paar Monate
  • angefügte Rolle zu Instanz
  • versucht, zuzugreifen. Der konfigurierte Schlüssel hatte eine höhere Priorität als die Rolle und der Zugriff wurde verweigert, da dem Benutzer nicht die erforderlichen S3-Berechtigungen erteilt wurden.

Lösung: rm -rf .aws/credentials, dann aws verwendet Rolle.

+0

Genau dasselbe Problem. Ein Symptom davon ist, dass ein Benutzer auf Dinge zugreifen kann, die ein anderer Benutzer nicht auf demselben EC2-Knoten haben kann. –

4

Sie müssen die Ressource für den Bucket über "arn: aws: 3 ::: Bucketname" oder "arn: aws: 3 ::: Bucketname *" angeben. Letzteres ist bevorzugt, da es auch Manipulationen an den Objekten des Löffels erlaubt. Beachten Sie, dass es keinen Schrägstrich gibt!

Objekte auflisten ist eine Operation auf Bucket. Daher ist die Aktion "s3: ListBucket" erforderlich. Das Hinzufügen eines Objekts zum Bucket ist eine Operation für Object. Daher wird die Aktion "s3: PutObject" benötigt. Sicherlich möchten Sie möglicherweise andere Aktionen hinzufügen, wie Sie benötigen.

{ 
"Version": "version_id", 
"Statement": [ 
    { 
     "Sid": "some_id", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:ListBucket", 
      "s3:PutObject" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::bucketname*" 
     ] 
    } 
] 
} 
+4

das Problem mit 'arn: aws: s3 ::: bucketname *' ist, dass es ermöglicht auch den Zugriff auf 'arn: aws: s3 ::: bucketname-mit-suffix' – Guss

0

Ich habe den gleichen Fehler, wenn wie unter Verwendung von Politik, obwohl ich habe „s3: ListBucket“ für s3: Betrieb Listobjects.

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Action": [ 
      "s3:ListBucket", 
      "s3:GetObject", 
      "s3:GetObjectAcl" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::<bucketname>/*", 
      "arn:aws:s3:::*-bucket/*" 
     ], 
     "Effect": "Allow" 
    } 
    ] 
} 

Dann fixiert ich es um eine Zeile Zusatz "arn: aws: s3 ::: bucketname"

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Action": [ 
      "s3:ListBucket", 
      "s3:GetObject", 
      "s3:GetObjectAcl" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::<bucketname>", 
      "arn:aws:s3:::<bucketname>/*", 
      "arn:aws:s3:::*-bucket/*" 
     ], 
     "Effect": "Allow" 
    } 
] 
} 
3

Wenn Sie rekursiv alle S3-Bucket-Objekte mit dem Befehl kopieren wollte " aws s3 cp s3. // eimer Name/data/all-data/--recursive“, wie Sie erwähnt haben, ist hier die Mindestpolitik notwendig, das zu tun:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::bucket-name" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::bucket-name/data/all-data/*" 
      ] 
     } 
    ] 
} 

die Tanne Die Anweisung st in dieser Richtlinie ermöglicht das Auflisten von Objekten innerhalb des Buckets. Beachten Sie, dass Sie mit dieser Einstellung auch Objekte in den Unterverzeichnissen dieses Buckets auflisten können.Es scheint nicht möglich zu sein, ls nur die s3-Unterverzeichnisse zu erlauben, also versuche diese Aktion auf die Ressource "arn: aws: s3 ::: // bucket-name/data/all-data /" won anzuwenden t arbeiten wie erwartet (Ich habe mehrere Möglichkeiten getestet und versucht, Hilfe hier wäre zu schätzen).

Die zweite Aussage in dieser Richtlinie kann für Objekte innerhalb des Eimers zu einem bestimmten Unterverzeichnis zu bekommen. Dies bedeutet, dass alles, was sich im Pfad "s3: // Bucket-Name/data/all-data /" befindet, kopiert werden kann. Beachten Sie, dass das Kopieren von übergeordneten Pfaden wie "s3: // Bucket-name/data /" nicht möglich ist.

Ein ähnliches Problem kann dies hier werden, die zur Lösung führte mich fand ich geben werde. https://github.com/aws/aws-cli/issues/2408

Hope this Hilfe!

+0

Eigentlich ist es scheint, wie Sie * kann * beschränken' ListBucket' zu einem Unterschlüssel: https://stackoverflow.com/a/35952877/89218 – paleozogt

+0

Vielen Dank, dass Sie mich wissen, werde ich versuchen, dies auf einige meiner aktuellen Projekte! –