2017-11-28 4 views
2

Zur Zeit habe ich eine Richtlinie auf einen Test-Bucket angewendet, der verhindern soll, dass Benutzer s3objects mit den ACLs "public-read" und "public-read-write" hochladen.AWS S3-Webkonsole überschreibt Bucket-Richtlinie

Wenn ich versuche, über die Kommandozeile die Anforderungen zum Hochladen erfolgreich geblockt werden mit "Zugriff verweigert" wie erwartet:

Write-S3Object -bucketname testbucket -File C:\Users\user\Desktop\DemoFolder\secret_data.txt -cannedACLName public-read 

gleiche Ergebnis mit "public-read-write":

Write-S3Object -bucketname testbucket -File C:\Users\user\Desktop\DemoFolder\secret_data.txt -CannedACLName public-read-write 

Aber wenn ich über die GUI der Webkonsole auf den s3bucket zugreife, kann ich öffentliche Objekte hochladen. Zusammen mit der Manipulation eines bestehenden "privaten" Objekts für die Öffentlichkeit über die Schaltfläche "make public". Hier

ist der Eimer Politik:

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "DenyPublic", 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": [ 
      "s3:PutObject", 
      "s3:PutObjectAcl" 
     ], 
     "Resource": "arn:aws:s3:::testbucket/*", 
     "Condition": { 
      "StringEquals": { 
       "s3:x-amz-acl": [ 
        "public-read", 
        "public-read-write" 
       ] 
      } 
     } 
    } 
] 

Auch hier ist die Politik für s3 Zugang vom Benutzer:

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

}

ich wie die fix oder Logik fühlen wirklich einfach. Ich kann es einfach nicht sagen.

+0

Ich glaube, es kann mit IAM Politik erfolgen. – Asdfg

Antwort

2

Ich denke, was passiert hier ist, dass die AWS-Konsole nicht Ihre Verweigern-Richtlinie auslöst, weil es keine vordefinierten ACLs verwendet. Stattdessen ist es die Gewährung ausdrücklich READ_ACP Erlaubnis zum AllUsers Gruppe (die x-amz-grant-lesen-Headers), nach dem Hochladen der Datei.

stellte ich eine ähnliche Politik und getestet, um den Dosen ACL Ansatz auf PutObject (es nicht):

$ aws s3 cp myfile s3://B/K --acl public-read 
Result: Access Denied 

Dann testete ich eine nicht-ACL Kopie, gefolgt von einem ACL-Update auf das Objekt mit den Dosen ACL-Ansatz (der Upload erfolgreich war, aber das ACL-Update ist fehlgeschlagen):

$ aws s3 cp myfile s3://B/K 
Result: OK 

$ aws s3api put-object-acl --bucket B --key K --acl public-read 
Result: Access Denied 

Dann habe ich versucht, die Gewährung Ansatz mit der AllUsers Gruppe (es gelungen):

$ aws s3 cp myfile s3://B/K 
Result: OK 

$ aws s3api put-object-acl --bucket B --key K --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers 
Result: OK 

Die letzten beiden Tests versuchen, dasselbe zu tun (ein Objekt hochladen und weltweit lesbar machen), aber sie tun es auf unterschiedliche Weise und eines wird von Ihrer Richtlinie abgelehnt, während das andere nicht.

+0

Das macht Sinn. Die Berechtigung READ_ACP kam mir nicht in den Sinn. Danke! – sean