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

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

ただいまの
回答率

89.20%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 386

matto

score 8

環境

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から環境変数を参照しております。

#carrierwave.rb
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  config.storage = :fog
  config.fog_provider = 'fog/aws'
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: Rails.application.secrets.aws_access_key_id,
    aws_secret_access_key: Rails.application.secrets.aws_secret_access_key,
    region: 'ap-northeast-1'
  }

  config.fog_directory  = 'app'
  config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/app'
end
#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"] %>
lock '3.11.2'

set :application, 'book-cafe-review-app'

set :repo_url, 'git@github.com:usename/app.git'

set :branch, 'master'

set :deploy_to, '/var/www/projects/app'

set :linked_files, %w{ config/secrets.yml }

set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads')

set :keep_releases, 5

set :rbenv_ruby, '2.5.1'

set :log_level, :debug

namespace :deploy do
  desc 'Restart application'
  task :restart do
    invoke 'unicorn:restart'
  end

  desc 'Create database'
  task :db_create do
    on roles(:db) do |host|
      with rails_env: fetch(:rails_env) do
        within current_path do
          execute :bundle, :exec, :rake, 'db:create'
        end
      end
    end
  end

  desc 'Run seed'
  task :seed do
    on roles(:app) do
      with rails_env: fetch(:rails_env) do
        within current_path do
          execute :bundle, :exec, :rake, 'db:seed'
        end
      end
    end
  end

  after :publishing, :restart

  after :restart, :clear_cache do
    on roles(:web), in: :groups, limit: 3, wait: 10 do
    end
  end

  desc 'upload secrets.yml'
  task :upload do
    on roles(:app) do |host|
      if test "[ ! -d #{shared_path}/config ]"
        execute "mkdir -p #{shared_path}/config"
      end
      upload!('config/secrets.yml', "#{shared_path}/config/secrets.yml")
    end
  end
  before :starting, 'deploy:upload'
  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の設定か環境変数の問題だと思うのですが、ここからどうすればいいか分かりません。><

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/02/19 14:20

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

    キャンセル

  • 2020/02/19 14:24 編集

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

    キャンセル

  • 2020/02/19 14:57

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

    キャンセル

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

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる