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

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

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

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

Amazon S3

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

AWS(Amazon Web Services)

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

Q&A

解決済

2回答

2111閲覧

AWS S3 本番環境でのみエラー InvalidAccessKeyId

Shika_Tech

総合スコア13

Ruby on Rails

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

Amazon S3

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

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2020/02/18 10:51

編集2020/02/18 15:47

環境

rails 5.0.7
ruby 2.5.1
AWS
S3
carrierwave
capistrano
unicorn

エラー

ローカル環境ではS3に画像を保存することができますが、本番環境では下記のエラーが出てしまいます。

######ブラウザ

Excon::Error::Forbidden <Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message>

コード

id,keyはsecrets.ymlから環境変数を参照しております。

ruby

1#carrierwave.rb 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.secrets.aws_access_key_id, 12 aws_secret_access_key: Rails.application.secrets.aws_secret_access_key, 13 region: 'ap-northeast-1' 14 } 15 16 config.fog_directory = 'app' 17 config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/app' 18end
#secrets.yml production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> aws_access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %> aws_secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>

ruby

1lock '3.11.2' 2 3set :application, 'book-cafe-review-app' 4 5set :repo_url, 'git@github.com:usename/app.git' 6 7set :branch, 'master' 8 9set :deploy_to, '/var/www/projects/app' 10 11set :linked_files, %w{ config/secrets.yml } 12 13set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads') 14 15set :keep_releases, 5 16 17set :rbenv_ruby, '2.5.1' 18 19set :log_level, :debug 20 21namespace :deploy do 22 desc 'Restart application' 23 task :restart do 24 invoke 'unicorn:restart' 25 end 26 27 desc 'Create database' 28 task :db_create do 29 on roles(:db) do |host| 30 with rails_env: fetch(:rails_env) do 31 within current_path do 32 execute :bundle, :exec, :rake, 'db:create' 33 end 34 end 35 end 36 end 37 38 desc 'Run seed' 39 task :seed do 40 on roles(:app) do 41 with rails_env: fetch(:rails_env) do 42 within current_path do 43 execute :bundle, :exec, :rake, 'db:seed' 44 end 45 end 46 end 47 end 48 49 after :publishing, :restart 50 51 after :restart, :clear_cache do 52 on roles(:web), in: :groups, limit: 3, wait: 10 do 53 end 54 end 55 56 desc 'upload secrets.yml' 57 task :upload do 58 on roles(:app) do |host| 59 if test "[ ! -d #{shared_path}/config ]" 60 execute "mkdir -p #{shared_path}/config" 61 end 62 upload!('config/secrets.yml', "#{shared_path}/config/secrets.yml") 63 end 64 end 65 before :starting, 'deploy:upload' 66 after :finishing, 'deploy:cleanup'

ec2サーバーでaws configureコマンドやenv | grep AWSのコマンドを実行してもkeyは正常に設置されているようです。

しかしaws s3 lsコマンドでは

An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.

と表示されます。

IAMuserにはs3fullaccsessを与えています。

ローカルでは正常に保存されていることから、keyの値が間違えていることは無いと思うので、s3の設定か環境変数の問題だと思うのですが、ここからどうすればいいか分かりません。><

ご存知の方いらっしゃいましたらぜひ教えて下さい。

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

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

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

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

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

guest

回答2

0

自己解決

一先ずsecrets.ymlを介さずにcarrierwave.rbに直接環境変数を読み込ませることで、S3への保存は確認できました。

投稿2020/02/19 07:19

Shika_Tech

総合スコア13

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

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

0

ec2サーバーでaws configureコマンドやenv | grep AWSのコマンドを実行してもkeyは正常に設置されているようです。

環境変数はどのように設定していますか? そのコマンドを実行しているユーザのみに設定されたりはしていないでしょうか。
また、aws configureで設定しているキーと実際に使用されているキーは一致していますか?
そのあたりが怪しいと思うので確認してみてください。

投稿2020/02/18 16:39

yu_1985

総合スコア7588

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

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

Shika_Tech

2020/02/19 03:41

コメントありがとうございます!! 「そのコマンドを実行しているユーザーのみに設定」しているかどうかはどのように確認するのでしょうか?>_< aws configureではキーを確認できております! また、先ほどsecrets.ymlを介さず、carrierwave.rbに直接ENV[KEY}を指定するとS3への保存が確認できました。 このことからsecrets.ymlを適切に踏めてないのではと思うのですが。 アップロードはサーバーのsecrets.ymlを直接開いて確認しているので、 シンボリックリンクの記述が問題かと仮定しております。 >_<
yu_1985

2020/02/19 03:46

secrets.ymlでは環境変数を設定してるのではなく、サーバの環境変数を読み込んでいるだけなので、そもそも環境変数が設定されてないのではないでしょうか? 環境変数の設定はどこでやっていますか?
yu_1985

2020/02/19 03:49 編集

あ、でもcarrierwave.rbで環境変数を読み込んだらうまく行ってるんですね。 > aws configureではキーを確認できております! これはあまり意味はないです。 というのも、環境変数でキーを設定していてaws configureを実行したユーザが設定しているキーは使ってないからですね。 なので、手動でaws cliを使ってs3を参照できるかどうかはこの場合関係ありません。 個人的にはEC2インスタンスで動かすのであればそもそもキーを使わずにIAMロールを設定してその権限で行うべきと思いますが…。
Shika_Tech

2020/02/19 04:16

環境変数はサーバーの/etc/environmentに設置しております! この方法ではあまりよろしくないのでしょうか? スクールのカリキュラムではcarrierwave.rb→secrets.yml→envという3段階でkeyを読み込み事を推奨しているのですが、、、
yu_1985

2020/02/19 04:54

とりあえず環境変数がちゃんとそこで設定してあるなら問題はなさそうですね。 環境変数をそこで管理すること自体の是非は色々考え方がありますが、それは本題と逸れるので割愛します。 Railsの仕様にそこまで詳しいわけではないので違うかもしれませんが、もしかしたらinitializeの時点でsecret.ymlが読み込まれてなかったりしませんかね? こちらに書いてある方法みたいなやりかたでやったらどうなります? https://hamayuzin.hatenablog.com/entry/2017/10/27/131352 以下は今回の内容と直接関係ないので読み飛ばしてもいいです。 そもそもですが、無闇矢鱈にアクセスキーを発行することがあまり推奨されていないので、EC2上から動かすのであればインスタンスそのものに権限を与えてその権限を使いましょう、という話ですね。
Shika_Tech

2020/02/19 05:20

教えて頂いたリンクの方法ですともとも設定していた内容とあまり違わないように思うのですが、、、
yu_1985

2020/02/19 05:27 編集

懸念しているのはinitilizeのタイミングでsecrets,ymlが読み込まれているかどうか、です。 リンク先の内容だと環境変数自体はinitializeのタイミングで取得しているので、そこは明確に違います。 もっとも、既にサーバ上で環境変数が設定されているのであればsecrets.ymlにわざわざ書かないで環境変数をそのまま使ってもいいような気はしますが…。
Shika_Tech

2020/02/19 05:57

そうですね、おっしゃるように一先ずはsecrets.ymlを介さずに設定したいと思います!! 色々とお力添えいただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問