質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

解決済

AWS::S3::ERRORS::ACCESSDENIED (ACCESS DENIED):の解決方法について

ayachika
ayachika

総合スコア36

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

2回答

0評価

1クリップ

6898閲覧

投稿2018/12/16 03:36

編集2018/12/16 11:55

##環境
AWSのcloud9を使用しています。
rubyのバージョンは 2.4.1p111
railsのバージョンはRails 5.0.7 です。

##S3のアクセス拒否が発生する
現在AWSのS3を活用してheroku上で画像をアップロードしようとしているのですが、S3へのアクセスが拒否されてしまいます。
ポリシーのアタッチは完了しているので、なぜアクセス拒否されてしまうかわかりません。
どなたかお詳しい方がいらっしゃれば教えていただけないでしょうか。

##エラー内容
herokuへのデプロイは問題なくできます。
アプリ上で、画像を投稿しようとすると、エラーが発生します。

rb

2018-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"=>"投稿"} 2018-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]] 2018-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 2018-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 2018-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]] 2018-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 2018-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 2018-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) 2018-12-16T03:26:39.613722+00:00 app[web.1]: F, [2018-12-16T03:26:39.613664 #8] FATAL -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] 2018-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) 2018-12-16T03:26:39.613783+00:00 app[web.1]: excon.error.response 2018-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>" 2018-12-16T03:26:39.613791+00:00 app[web.1]: :cookies => [ 2018-12-16T03:26:39.613793+00:00 app[web.1]: ] 2018-12-16T03:26:39.613794+00:00 app[web.1]: :headers => { 2018-12-16T03:26:39.613796+00:00 app[web.1]: "Connection" => "close" 2018-12-16T03:26:39.613798+00:00 app[web.1]: "Content-Type" => "application/xml" 2018-12-16T03:26:39.613800+00:00 app[web.1]: "Date" => "Sun, 16 Dec 2018 03:26:38 GMT" 2018-12-16T03:26:39.613801+00:00 app[web.1]: "Server" => "AmazonS3" 2018-12-16T03:26:39.613803+00:00 app[web.1]: "x-amz-id-2" => "fr8ifGtcKMVRRXEEWZX3mjKG4EZ6ARfD+im/PzBBrHifJ2uGtr+lDB856LLM9dsl/+xfhIJC8Bw=" 2018-12-16T03:26:39.613805+00:00 app[web.1]: "x-amz-request-id" => "B6D08C35865AD73A" 2018-12-16T03:26:39.613806+00:00 app[web.1]: } 2018-12-16T03:26:39.613808+00:00 app[web.1]: :host => "tsukutta.s3-ap-northeast-1.amazonaws.com" 2018-12-16T03:26:39.613809+00:00 app[web.1]: :local_address => "172.16.54.22" 2018-12-16T03:26:39.613811+00:00 app[web.1]: :local_port => 37038 2018-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" 2018-12-16T03:26:39.613815+00:00 app[web.1]: :port => 443 2018-12-16T03:26:39.613816+00:00 app[web.1]: :reason_phrase => "Forbidden" 2018-12-16T03:26:39.613818+00:00 app[web.1]: :remote_ip => "52.219.68.191" 2018-12-16T03:26:39.613820+00:00 app[web.1]: :status => 403 2018-12-16T03:26:39.613835+00:00 app[web.1]: :status_line => "HTTP/1.1 403 Forbidden\r\n" 2018-12-16T03:26:39.613837+00:00 app[web.1]: ): 2018-12-16T03:26:39.613843+00:00 app[web.1]: F, [2018-12-16T03:26:39.613776 #8] FATAL -- : [ba6bbeb7-e536-4820-9c32-4aae8933f5ab] 2018-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

require 'carrierwave/storage/abstract' require 'carrierwave/storage/file' require 'carrierwave/storage/fog' if Rails.env.production? CarrierWave.configure do |config| config.cache_dir = "#{Rails.root}/tmp/uploads" config.fog_provider = 'fog/aws' config.fog_credentials = { provider: 'AWS', region: ENV['S3_REGION'], aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], } config.fog_directory = ENV['S3_BUCKET'] end end

picture_uploader.rb

rb

class PictureUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: #include CarrierWave::RMagick #include Piet::CarrierWaveExtension include CarrierWave::MiniMagick process resize_to_limit: [200, 200] if Rails.env == 'production' storage :fog else storage :file end def store_dir "sample-image/#{model.id}" end def extension_whitelist %w(jpg jpeg gif png) end end

carrierwaveに関するpost.rbへのバリデーションやリレーションは問題なく設定されていると思います。

##AWSの管理画面

このようなサイトを見つけ、S3FullAccessだけではなく、AdministratorAccessもアタッチしないと不十分ですとのことだったので、やってみましたが、改善しませんでした。Excon::Errors::Forbidden (参考:Expected(200) <=> Actual(403 Forbidden)

管理画面からポリシーをアタッチしました。IAMユーザでログインしても、ポリシーがアタッチされていることは確認できています。S3FullAccessはグループからアタッチしていましたが、念のため、直接アタッチもしてみました。
特にエラーは治りませんでした。

イメージ説明
ちなみにS3にはtsukuttaというフォルダをAWS側から直接作成済です。

いろんなサイトを参考にし、このエラーに2週間ほど取り組んでいるのですが、なかなか解決策が見いだせません。
お力をお貸しいただけると嬉しいです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。