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

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

新規登録して質問してみよう
ただいま回答率
85.37%
AWS OpsWorks

AWS OpsWorksは、AWSが提供するChefベースのアプリケーション管理サービス。クラウド上でアプリケーションの起動や設定、デプロイ、停止などを管理することができます。セットアップやデプロイの際に起こる人的ミスや工数負荷を軽減するなど、運用の自動化も可能です。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

解決済

1回答

2160閲覧

AWS S3でエラーが発生しています

matu33

総合スコア1

AWS OpsWorks

AWS OpsWorksは、AWSが提供するChefベースのアプリケーション管理サービス。クラウド上でアプリケーションの起動や設定、デプロイ、停止などを管理することができます。セットアップやデプロイの際に起こる人的ミスや工数負荷を軽減するなど、運用の自動化も可能です。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2020/07/04 14:22

編集2020/07/05 06:57

前提・実現したいこと

S3に画像をアップロードしようとすると下記のようなエラーが生じました。

発生している問題・エラーメッセージ

エラーメッセージ Completed 500 Internal Server Error in 2687ms (ActiveRecord: 4.5ms) Excon::Error::Forbidden - Expected(200) <=> Actual(403 Forbidden) :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>4DE499D755D4FB9E</RequestId><HostId>HQU5DcRl2tfZW7TbQ8XQ5PLunUz8ycRSi+4Cb5PJOdlJRB2xg4A+/Ctrf3KzmT3SGnBZP1tAW7w=</HostId></Error>" :cookies => [ ] :headers => { "Connection" => "close" "Content-Type" => "application/xml" "Date" => "Sun, 05 Jul 2020 02:03:02 GMT" "Server" => "AmazonS3" "x-amz-id-2" => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "x-amz-request-id" => "xxxxxxxxxxxxxxxx" } :host => "バケット名.s3-ap-northeast-1.amazonaws.com" :local_address => "xxx.xxx.xx.x" :local_port => 63552 :path => "/uploads/tmp/1593914581-805977756192592-0002-3058/%E3%83%8F%E3%82%9A%E3%83%BC%E3%82%AB%E3%83%BC.jpg" :port => 443 :reason_phrase => "Forbidden" :remote_ip => "xx.xxx.x.xxx" :status => 403 :status_line => "HTTP/1.1 403 Forbidden\r\n" : app/controllers/products_controller.rb:36:in `create'

該当のソースコード

config/initilizers/carrierwave.rb

ruby

1 2require 'carrierwave/storage/abstract' 3require 'carrierwave/storage/file' 4require 'carrierwave/storage/fog' 5 6CarrierWave.configure do |config| 7 config.storage = :fog 8 config.fog_provider = 'fog/aws' 9 config.fog_credentials = { 10 provider: 'AWS', 11 aws_access_key_id: Rails.application.credentials[:aws][:access_key_id], 12 aws_secret_access_key: Rails.application.credentials[:aws][:secret_access_key], 13 region: 'ap-northeast-1' 14 } 15 config.fog_directory = 'バケット名' 16 config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/バケット名' 17end

環境変数は書き込んでいます。

試したこと

・環境変数の入力ミスがないかの確認
・S3のバケットポリシーの入力ミスがないかの確認

補足情報(FW/ツールのバージョンなど)

どう対処してよいか分からないのでアドバイス頂けると助かります。よろしくお願いします。

情報不足しておりましたら、ご指摘もおねがいします

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

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

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

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

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

guest

回答1

0

ベストアンサー

IAM まわりはセキュリティの都合でエラーメッセージが基本的に表示されません
そのため、いかに切り分けを行うかが重要です

まず、処理が成功する設定を探します

切り分けのためには、まず、処理が成功する設定を見つけると、
失敗する設定と違いがある設定項目のみに原因を絞ることができます

セキュリティ的に問題のない範囲で、
できるかぎり成功しやすい状態を作り、成功する設定を作ってしまうと
原因の特定は簡単になります

原因を切り分けるときの考え方

例えば、次のような原因が考えられます(ただし、これだけとは限りません):

  • Rails のコードの書き方の問題
  • 想定外の S3 バケットの設定の問題
  • IAM の設定の問題

これらの原因を一つずつ検証し原因を絞り込んでいきます

例えば、同じ access key, secret key で AWS CLI を使い
S3 バケットにファイルをアップロードできるか確認すると、
上記の考えられる原因のいくつかの可能性をなくすことができます

AWS CLI の使い方や設定については次の記事が参考になるかもしれません
Amazon S3にGUI・CLIでファイルをアップロード・ダウンロードする方法 | Developers.IO

投稿2020/07/04 19:01

編集2020/07/04 19:10
y_shinoda

総合スコア3272

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

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

matu33

2020/07/05 03:21

回答ありがとうございます。 shinodaさんが貼って頂いた記事を見てS3でアップロードとダウンロードはする事が出来たのですがこの結果がどの原因が絞り込めたのかが分からないのですがどのような考え方をしたらよいでしょうか?
y_shinoda

2020/07/05 03:45

成功した場合は、原因は失敗した場合と成功した場合の設定や環境の違いになります たとえば、実行したコードが Rails か、 AWS CLI か、は違いのひとつです 他に違っていることはないでしょうか? - Rails と AWS CLI - 対象のバケット - 実行元のインスタンスまたはPC - 他 これらの違いを合わせてみて、結果を確認し さらに原因を絞り込んでいきます
matu33

2020/07/05 13:39

環境変数の見直しでvim ~/.bash_profileコマンドでAWS_SECRET_ACCESS_KEYとAWS_ACCESS_KEY_IDを書き込んだ後にsource ~/.bash_profileで反映させたんですが rails cでRails.application.credentials[:aws][:access_key_id]とRails.application.credentials[:aws][:secret_access_key]で確認するとvim ~/.bash_profileコマンドで書き込んだAWS_SECRET_ACCESS_KEYとAWS_ACCESS_KEY_IDと違うのですがこれはエラーの原因になり得るのでしょうか?
y_shinoda

2020/07/05 13:56

最近の Rails に明るくないのですが、 Rails.application.credentials 上記の Ruby コードについて検索すると、 credentials.yml.enc というファイルを読み取るための記法となっているように見えます credentials.yml.enc を参照してみると、 環境変数に設定している access key id, secret key とは異なる方の値が設定されていないでしょうか?
matu33

2020/07/05 16:34

credentials.yml.encと環境変数に設定している access key id, secret key とは異なる値を設定していた為 credentials.yml.encのaccess key id, secret keyを環境変数に設定している access key id, secret keyに合わせるとエラーが解消されS3に画像をアップロードすることが出来ました。 エラー解決に助けて頂き、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問