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

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

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

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

AWS(Amazon Web Services)

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

Q&A

解決済

2回答

8393閲覧

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

ayachika

総合スコア36

Ruby on Rails

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

AWS(Amazon Web Services)

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

0グッド

1クリップ

投稿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

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週間ほど取り組んでいるのですが、なかなか解決策が見いだせません。
お力をお貸しいただけると嬉しいです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

私も同じ問題に遭遇しました。

結論から言うとs3のバケットポリシーを変更することで解決しました。
下記の方の記事を参考に設定したら動きました。
https://qiita.com/yukiyukimiyaiwa/items/a9e0103c8342b81f6ac1

2018/11/15に発表されたパブリックアクセス設定機能のおかげでデフォルトでは管理者しかアクセスできず、IAMユーザーのアクセスがブロックされているという結論に至りました。

AWSマジキチ変化が激しくて大変ですね。

どうやらAWSの設定から反映まで、時間がかかるようなのです。
(一晩待ったら動いたと言っている人がいて、
私も上記の方の設定からもともと自分でしていた設定に戻しても動くようになりました。)

上記を試す前に、一応下記をためしました。
問題の切り分けとして
①S3バケットのアクセス権限をパブリックに読み込み・書き込み許可にして試す。(とても危険なのでためしたらすぐに戻してください)
=>動いた。バケット名やリージョンは合っていそう。
②AWS CLIを使って、バケットにファイルをアップロードする。
=>できた。IAMの権限やアクセスキー、シークレットキーは大丈夫そう
③コンフィグ設定の見直し
=>何回も見直したが間違っていない
④S3のバケットポリシー
すべて許可するように設定したが、うまく動かない。

投稿2018/12/29 02:19

編集2018/12/29 02:32
alohaoe

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayachika

2018/12/30 06:27

とても丁寧なご回答ありがとうございます。まだ試していないのですが、挑戦してみます。AWS結構難しいですね。どんどん更新されていくのも原因なのでしょうか。いろいろなサイトをみて試しましたがどれもだめだったので・・・本当にありがとうございます。
guest

0

すいません。コードあまり見てないのですが。。。
IAMだけで言うと、S3FullAccessがついていれば十分です。
ですので、もし権限で蹴られているとするなら、S3バケット側の権限の可能性も見てみた方が良いと思います。

ちなみに、初歩的というか1番ありがちなのが、アクセスキーがそもそも間違っているとかなのですが、
そこは問題ないのでしょうか?
S3以外の操作はできた実績があるアクセスキーですか?

投稿2018/12/18 03:18

IPU

総合スコア283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayachika

2018/12/19 13:35

回答が遅くなり大変申し訳ありません。他の機能において実績はないのですが、キーが間違っていることはおそらくないと思います。というのも、このエラーが出る前はキーの入力を間違えており、キーのエラーが出ていましたが、それらは解消されたため。S3バケット側の権限は確認していなかったのでそこは確認しようと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問