##環境
AWSのcloud9を使用しています。
rubyのバージョンは 2.4.1p111
railsのバージョンはRails 5.0.7 です。
##S3のアクセス拒否が発生する
現在AWSのS3を活用してheroku上で画像をアップロードしようとしているのですが、S3へのアクセスが拒否されてしまいます。
ポリシーのアタッチは完了しているので、なぜアクセス拒否されてしまうかわかりません。
どなたかお詳しい方がいらっしゃれば教えていただけないでしょうか。
##エラー内容
herokuへのデプロイは問題なくできます。
アプリ上で、画像を投稿しようとすると、エラーが発生します。
rb
1 22018-12-16T03:26:35.918036+00:00 app[web.1]: I, [2018-12-16T03:26:35.917962 #8] INFO -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] Parameters: {"utf8"=>"✓", "authenticity_token"=>"mek0Ftx+4ADE3Jyl4QMlwg91JCkPbTj2s074f7Z9xIzM4bw/kajk302vnZx8nNh4AKNavkM/Iim6XGYeZUGPPQ==", "post"=>{"title"=>"test", "content"=>"test", "tag_ids"=>[""], "picture"=>#<ActionDispatch::Http::UploadedFile:0x00007f5c0c4430d0 @tempfile=#<Tempfile:/tmp/RackMultipart20181216-8-s5yei8.jpeg>, @original_filename="オムライス.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"post[picture]\"; filename=\"\xE3\x82\xAA\xE3\x83\xA0\xE3\x83\xA9\xE3\x82\xA4\xE3\x82\xB9.jpeg\"\r\nContent-Type: image/jpeg\r\n">, "user_id"=>"1"}, "commit"=>"投稿"} 32018-12-16T03:26:35.925264+00:00 app[web.1]: D, [2018-12-16T03:26:35.924960 #8] DEBUG -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] User Load (1.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 42018-12-16T03:26:36.151115+00:00 app[web.1]: D, [2018-12-16T03:26:36.150974 #8] DEBUG -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] Tag Load (3.0ms) SELECT "tags".* FROM "tags" WHERE 1=0 52018-12-16T03:26:36.158762+00:00 app[web.1]: D, [2018-12-16T03:26:36.158656 #8] DEBUG -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] (5.5ms) BEGIN 62018-12-16T03:26:36.168197+00:00 app[web.1]: D, [2018-12-16T03:26:36.168095 #8] DEBUG -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] SQL (5.6ms) INSERT INTO "posts" ("title", "content", "created_at", "updated_at", "picture", "user_id") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["title", "test"], ["content", "test"], ["created_at", "2018-12-16 03:26:36.160656"], ["updated_at", "2018-12-16 03:26:36.160656"], ["picture", "オムライス.jpeg"], ["user_id", 1]] 72018-12-16T03:26:39.615149+00:00 heroku[router]: at=info method=POST path="/posts" host=tsukutta.herokuapp.com request_id=ba6bbeb7-e536-4820-9c32-4aae8933f5ab fwd="111.217.135.221" dyno=web.1 connect=0ms service=4935ms status=500 bytes=1733 protocol=https 82018-12-16T03:26:39.612104+00:00 app[web.1]: D, [2018-12-16T03:26:39.611970 #8] DEBUG -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] (3.3ms) ROLLBACK 92018-12-16T03:26:39.612691+00:00 app[web.1]: I, [2018-12-16T03:26:39.612617 #8] INFO -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] Completed 500 Internal Server Error in 3694ms (ActiveRecord: 23.5ms) 102018-12-16T03:26:39.613722+00:00 app[web.1]: F, [2018-12-16T03:26:39.613664 #8] FATAL -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] 112018-12-16T03:26:39.613781+00:00 app[web.1]: F, [2018-12-16T03:26:39.613724 #8] FATAL -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] Excon::Error::Forbidden (Expected(200) <=> Actual(403 Forbidden) 122018-12-16T03:26:39.613783+00:00 app[web.1]: excon.error.response 132018-12-16T03:26:39.613790+00:00 app[web.1]: :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>B6D08C35865AD73A</RequestId><HostId>fr8ifGtcKMVRRXEEWZX3mjKG4EZ6ARfD+im/PzBBrHifJ2uGtr+lDB856LLM9dsl/+xfhIJC8Bw=</HostId></Error>" 142018-12-16T03:26:39.613791+00:00 app[web.1]: :cookies => [ 152018-12-16T03:26:39.613793+00:00 app[web.1]: ] 162018-12-16T03:26:39.613794+00:00 app[web.1]: :headers => { 172018-12-16T03:26:39.613796+00:00 app[web.1]: "Connection" => "close" 182018-12-16T03:26:39.613798+00:00 app[web.1]: "Content-Type" => "application/xml" 192018-12-16T03:26:39.613800+00:00 app[web.1]: "Date" => "Sun, 16 Dec 2018 03:26:38 GMT" 202018-12-16T03:26:39.613801+00:00 app[web.1]: "Server" => "AmazonS3" 212018-12-16T03:26:39.613803+00:00 app[web.1]: "x-amz-id-2" => "fr8ifGtcKMVRRXEEWZX3mjKG4EZ6ARfD+im/PzBBrHifJ2uGtr+lDB856LLM9dsl/+xfhIJC8Bw=" 222018-12-16T03:26:39.613805+00:00 app[web.1]: "x-amz-request-id" => "B6D08C35865AD73A" 232018-12-16T03:26:39.613806+00:00 app[web.1]: } 242018-12-16T03:26:39.613808+00:00 app[web.1]: :host => "tsukutta.s3-ap-northeast-1.amazonaws.com" 252018-12-16T03:26:39.613809+00:00 app[web.1]: :local_address => "172.16.54.22" 262018-12-16T03:26:39.613811+00:00 app[web.1]: :local_port => 37038 272018-12-16T03:26:39.613813+00:00 app[web.1]: :path => "/tukutta/20/%E3%82%AA%E3%83%A0%E3%83%A9%E3%82%A4%E3%82%B9.jpeg" 282018-12-16T03:26:39.613815+00:00 app[web.1]: :port => 443 292018-12-16T03:26:39.613816+00:00 app[web.1]: :reason_phrase => "Forbidden" 302018-12-16T03:26:39.613818+00:00 app[web.1]: :remote_ip => "52.219.68.191" 312018-12-16T03:26:39.613820+00:00 app[web.1]: :status => 403 322018-12-16T03:26:39.613835+00:00 app[web.1]: :status_line => "HTTP/1.1 403 Forbidden\r\n" 332018-12-16T03:26:39.613837+00:00 app[web.1]: ): 342018-12-16T03:26:39.613843+00:00 app[web.1]: F, [2018-12-16T03:26:39.613776 #8] FATAL -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] 352018-12-16T03:26:39.613847+00:00 app[web.1]: F, [2018-12-16T03:26:39.613815 #8] FATAL -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] app/controllers/posts_controller.rb:27:in `create'
##関連コード
carrierwave.rb ※herokuの環境変数を設定済
rb
1require 'carrierwave/storage/abstract' 2require 'carrierwave/storage/file' 3require 'carrierwave/storage/fog' 4 5if Rails.env.production? 6CarrierWave.configure do |config| 7 config.cache_dir = "#{Rails.root}/tmp/uploads" 8 config.fog_provider = 'fog/aws' 9 config.fog_credentials = { 10 11 provider: 'AWS', 12 region: ENV['S3_REGION'], 13 aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], 14 aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 15 16 } 17 config.fog_directory = ENV['S3_BUCKET'] 18end 19end
picture_uploader.rb
rb
1class PictureUploader < CarrierWave::Uploader::Base 2 # Include RMagick or MiniMagick support: 3 #include CarrierWave::RMagick 4 #include Piet::CarrierWaveExtension 5 include CarrierWave::MiniMagick 6 process resize_to_limit: [200, 200] 7 8 if Rails.env == 'production' 9 storage :fog 10 else 11 storage :file 12 end 13 14 15 def store_dir 16 "sample-image/#{model.id}" 17 end 18 19 20 def extension_whitelist 21 %w(jpg jpeg gif png) 22 end 23 24end 25
carrierwaveに関するpost.rbへのバリデーションやリレーションは問題なく設定されていると思います。
##AWSの管理画面
このようなサイトを見つけ、S3FullAccessだけではなく、AdministratorAccessもアタッチしないと不十分ですとのことだったので、やってみましたが、改善しませんでした。Excon::Errors::Forbidden (参考:Expected(200) <=> Actual(403 Forbidden)
管理画面からポリシーをアタッチしました。IAMユーザでログインしても、ポリシーがアタッチされていることは確認できています。S3FullAccessはグループからアタッチしていましたが、念のため、直接アタッチもしてみました。
特にエラーは治りませんでした。
ちなみにS3にはtsukuttaというフォルダをAWS側から直接作成済です。
いろんなサイトを参考にし、このエラーに2週間ほど取り組んでいるのですが、なかなか解決策が見いだせません。
お力をお貸しいただけると嬉しいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/30 06:27