2016-06-26 18 views
0

Ich habe einen brandneuen IAM-Benutzer, den ich hochladen möchte & Lesezugriff auf meinen neu erstellten Bucket - myapp.AWS S3 403 Verbotener Fehler bei neu erstellter IAM-Inline-Richtlinie für einen neuen IAM-Benutzer

Das ist die Politik, die ich für meine Benutzer jetzt bin mit:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetBucketLocation", 
       "s3:ListAllMyBuckets" 
      ], 
      "Resource": "arn:aws:s3:::*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::myapp" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:PutObject", 
       "s3:GetObject", 
       "s3:DeleteObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::myapp/*" 
      ] 
     } 
    ] 
} 

Mit dieser Politik, ich kann an der Konsole anmelden, ich Ordner erstellen kann, und ich kann Bilder auf diese Ordner hochladen.

Allerdings, wenn ich versuche, ein Bild, das durch meine App zu laden, das ist, was ich bekomme:

Excon::Errors::Forbidden at /jobs 
Expected(200) <=> Actual(403 Forbidden) 
excon.error.response 
    :body   => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>0FF1D4848595DCFB</RequestId><HostId>+RrQvNFwV2hAcYPK3ZJJYzy5uiA7Aag0oc1Gpp3hENJ9lzJz453j8qJeLbdQ8jN4cc3ViRJ1lEg=</HostId></Error>" 
    :cookies  => [ 
    ] 
    :headers  => { 
    "Connection"  => "close" 
    "Content-Type"  => "application/xml" 
    "Date"    => "Sat, 25 Jun 2016 18:54:24 GMT" 
    "Server"   => "AmazonS3" 
    "x-amz-id-2"  => "+R3ViRJ1lEg=" 
    "x-amz-request-id" => "0FF1DCFB" 
    } 
    :host   => "s3.amazonaws.com" 
    :local_address => "192.168.1.102" 
    :local_port => 23456 
    :path   => "/logos/company/logo/48/amped-logo.png" 
    :port   => 443 
    :reason_phrase => "Forbidden" 
    :remote_ip  => "xx.xx.xxx.xxx" 
    :status  => 403 
    :status_line => "HTTP/1.1 403 Forbidden\r\n" 

Hier sind Regeln meines CORS:

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
     <AllowedOrigin>http://localhost:3000</AllowedOrigin> 
     <AllowedMethod>HEAD</AllowedMethod> 
     <AllowedMethod>GET</AllowedMethod> 
     <AllowedMethod>PUT</AllowedMethod> 
     <AllowedMethod>POST</AllowedMethod> 
     <AllowedMethod>DELETE</AllowedMethod> 
     <ExposeHeader>ETag</ExposeHeader> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 
</CORSConfiguration> 

Das ist meine config/initializers/carrierwave.rb Datei:

Was könnte das verursachen und wie behebe ich es?

Antwort

1

Ich habe es gerade herausgefunden, und es war eine kleine Sache.

Alles, was ich tun musste, war "s3:PutObjectAcl" meiner Richtlinie hinzuzufügen.

So, jetzt sieht meine Politik wie folgt aus:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetBucketLocation", 
       "s3:ListAllMyBuckets" 
      ], 
      "Resource": "arn:aws:s3:::*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::myapp" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:PutObject", 
       "s3:PutObjectAcl", 
       "s3:GetObject", 
       "s3:DeleteObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::myapp/*" 
      ] 
     } 
    ] 
} 

Und nun das funktioniert.

Ich habe den Tipp von this answer, die meinen Speck gerettet.