2017-05-15 3 views
0

Ich versuche, einen S3-Bucket einzurichten, um anonyme Uploads zu akzeptieren und gleichzeitig dem Bucket-Besitzer volle Rechte zu gewähren und öffentlichen Lesezugriff zu verhindern. Nach dem Code von here habe ich die Bucket-Richtlinie unten eingerichtet. Ich möchte curl verwenden, um den Eimer zu laden, aber alles, was ich bekommen habe, istAmazon AWS S3-Bucket anonymer Upload mit Hilfe von curl

Zugriff verweigert

Hier ist der Eimer Politik:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "allow-anon-put", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:PutObject", 
      "Resource": "arn:aws:s3:::[mybucket]/uploads/*", 
      "Condition": { 
       "StringEquals": { 
        "s3:x-amz-acl": "bucket-owner-full-control" 
       } 
      } 
     }, 
     { 
      "Sid": "deny-other-actions", 
      "Effect": "Deny", 
      "NotPrincipal": { 
       "AWS": "arn:aws:iam::[myid]:root" 
      }, 
      "NotAction": [ 
       "s3:PutObject", 
       "s3:PutObjectAcl" 
      ], 
      "Resource": "arn:aws:s3:::[mybucket]/*" 
     } 
    ] 
} 

Und die Locke POST :

curl --request PUT --upload-file "thefile.gif" -k https://[mybucket].s3.amazonaws.com/uploads/

+1

Es ist wirklich, wirklich, wirklich keine Rechtfertigung für anonyme Uploads ermöglicht. Keiner. Aber da Ihre Richtlinie "x-amz-acl: bucket-owner-full-control" erfordert, haben Sie versucht, eine Anfrage zu stellen, die mit Ihrer Richtlinie übereinstimmt? 'curl ... -H 'x-amz-acl: Eimer-Besitzer-volle Kontrolle'' –

+0

Danke. Das hat funktioniert. Jetzt suche ich nach vordefinierten POST-URLs für bessere Sicherheit, kann aber die curl-Abfragezeichenfolge nicht richtig abrufen. Hier eine neue Frage erstellt, wenn Sie helfen können. http://stackoverflow.com/q/43991783/3198281 – UltrasoundJelly

Antwort

0

Anonymous Uploads sind eine schlechte Idee, aber zumindest diese Politik Einschränkung erfordert, dass der Uploader Sie die Kontrolle über das Objekt geben:

 "Condition": { 
      "StringEquals": { 
       "s3:x-amz-acl": "bucket-owner-full-control" 
      } 
     } 

Es ist nicht intuitiv offensichtlich, aber einen Eimer zu besitzen bedeutet nicht, dass Sie die Objekte besitzen. Wenn sie nicht mit Anmeldeinformationen von Ihrem Konto hochgeladen werden, besitzen Sie sie nicht. Sie zahlen natürlich dafür, aber wenn ein Objekt von einem anderen Konto oder von einem anonymen Benutzer in Ihren Bucket hochgeladen wird, können Sie das einzige Privileg für dieses Objekt haben, dass Sie es löschen können - Sie können damit enden Objekte, die Sie nicht herunterladen oder kopieren können, löschen Sie einfach.

Mit dieser Politik im Ort, haben die Uploads mit der Politik zu erfüllen, um das Objekt ACL-Einstellung Sie geben steuern:

curl ... -H 'x-amz-acl: bucket-owner-full-control'