2014-10-28 6 views
32

Ich habe eine Berechtigung auf den Bucket, der "authentifizierte Benutzer" ermöglicht, aufzulisten, hochzuladen und Löschen aus einem Bucket, den ich erstellt habe. Dies scheint mir zu ermöglichen, Dateien in den Bucket hochzuladen, aber es scheint, dass das Herunterladen von Dateien aus dem Bucket nicht von dieser Berechtigung abgedeckt ist, und ich stattdessen eine Richtlinie für den Bucket definieren muss. Es ist mir nicht klar, wie ich eine solche Politik festlegen soll. Ich habe versucht, den Policy Generator mit meinen besten Annahmen, was ich ausfüllen sollte, aber das Ergebnis war keine gültige Richtlinie, als ich es als neue Richtlinie für den Bucket eingefügt (es fehlgeschlagen mit der Nachricht Action does not apply to any resource(s) in statement - Action "s3:ListBucket" in Statement "Stmt-some-number"). Kann jemand erklären, was mit der folgenden Richtlinie falsch ist und wie sie korrekt festgelegt wird, damit authentifizierte Benutzer Dateien aus dem Bucket abrufen können?Wie kann ich eine Richtlinie für einen S3-Bucket festlegen, die es authentifizierten Benutzern ermöglicht, den Bucket aufzulisten oder eine Datei aus dem Bucket zu holen

{ 
    "Id": "Policy-some-number", 
    "Statement": [ 
    { 
     "Sid": "Stmt-some-number", 
     "Action": [ 
     "s3:GetObject", 
     "s3:ListBucket" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::my-bucket/*", 
     "Principal": { 
     "AWS": [ 
      "*" 
     ] 
     } 
    } 
    ] 
} 

Antwort

80

s3:GetObject gilt für die Objekte in den Eimer, so dass die Ressource korrekt ist: "Resource": "arn:aws:s3:::my-bucket/*".

s3:ListBucket gilt für die Eimer selbst und so sollte die Ressource "Resource": "arn:aws:s3:::my-bucket"

Ihre daraus resultierende Politik sollte ähnlich sein:

{ 
    "Id": "Policy-some-number", 
    "Statement": [ 
    { 
     "Sid": "Stmt-some-number", 
     "Action": [ 
     "s3:GetObject" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::my-bucket/*", 
     "Principal": { 
     "AWS": [ 
      "*" 
     ] 
     } 
    }, 
    { 
     "Sid": "Stmt-some-other-number", 
     "Action": [ 
     "s3:ListBucket" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::my-bucket", 
     "Principal": { 
     "AWS": [ 
      "*" 
     ] 
     } 
    } 
    ] 
} 
+1

bedeutet das, dass Sie getrenntes "Statement" für "s3: GetObject" verwenden und "s3: ListBucket"? – Tjunkie

+3

@Tjunkie ja, weil die 'Ressource' anders ist. – c4urself

+3

Die Tatsache ist falsch, Ressource kann "merge" sein, verwenden Sie einfach [] Join beide als Liste. – mootmoot

22

Gerade @ c4urself Antwort zu beglückwünschen. Die Antwort hilft auch, mein Problem zu lösen, aber es gibt Hinweise aus der AWS-Dokumentation, der Sie mehr als eine Ressource hinzufügen können. Verwenden Sie einfach [], um sie zu einer Liste zu machen. http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html#vpc-endpoints-s3-bucket-policies

{ 
    "Statement": [ 
    { 
     "Sid": "Access-to-specific-bucket-only", 
     "Principal": "*", 
     "Action": [ 
     "s3:ListBucket", 
     "s3:GetObject", 
     "s3:PutObject" 
     ], 
     "Effect": "Allow", 
     "Resource": ["arn:aws:s3:::my_secure_bucket", 
        "arn:aws:s3:::my_secure_bucket/*"] 
    } 
    ] 
} 
+0

was für ein Gott !!!!!! – aschyiel

Verwandte Themen