2016-06-26 21 views
0

私は新しく作成されたバケットへの読み取りアクセス&をアップロードしたい新しいIAMユーザを持っています - myappAWS S3 403新しいIAMユーザ用に新しく作成されたIAMインラインポリシーに禁止されたエラー

これは私が今の私のユーザーのために使用していたポリシーです。このポリシーに

{ 
    "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/*" 
      ] 
     } 
    ] 
} 

、私はフォルダを作成することができ、私はこれらのフォルダに画像をアップロードすることができ、コンソールにログインすることができます。

私は私のアプリを介して画像をアップロードしようとしたときしかし、これは私が得るものである:ここでは

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" 

は私の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> 

これは私のconfig/initializers/carrierwave.rbファイルです。

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    provider:    'AWS', 
    aws_access_key_id:  ENV["MYAPP_S3_KEY"], 
    aws_secret_access_key: ENV["MYAPP_SECRET_KEY"] 
    } 
    config.fog_directory = ENV["MYBUCKET"] 
end 

何が原因で発生する可能性があり、解決するにはどうすればよいですか?

答えて

1

私は実際にそれを分かりました。それは小さなものでした。

私がしなければならなかったのは、私の方針に"s3:PutObjectAcl"を加えることでした。

だから今、私のポリシーは次のようになります。

{ 
    "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/*" 
      ] 
     } 
    ] 
} 

そして今、それが動作します。

this answerからヒントを得て、私のベーコンを保存しました。

関連する問題