为亚马逊aws3设置密钥

时间:2016-02-19 17:53:43

标签: ruby-on-rails ruby ruby-on-rails-3 heroku amazon-s3

我使用雾和载波。现在我只有一个我在本地运行的简单上传器:

CarrierWave.configure do |config|
    config.fog_credentials = {
        :provider               => 'AWS',
        :aws_access_key_id      => ENV['S3_ACCESS_KEY'],
        :aws_secret_access_key  =>  ENV['S3_SECRET_KEY'],
      :region                 => 'us-west-1', # Change this for 

  }
  config.fog_directory  = "bucket-main"    
end

但现在我有一个问题,我应该在哪里保存我的密钥。

在heroku环境中,我可以像这样打印

$ heroku config:set S3_ACCESS_KEY=THERANDOMKEYYOUGOT  
$ heroku config:set S3_SECRET_KEY=an0tHeRstRing0frAnDomjUnK  
$ heroku config:set S3_REGION=us-west-2  
$ heroku config:set S3_BUCKET=my-sample-app-bucket-20160126

但我不知道在我的本地机器上该怎么做。

我已按照本教程https://github.com/sifxtreme/rails-carrierwave-s3

并将我的密钥存储在我刚创建的config/secrets.yml file中:

development: &defaults
  S3_ACCESS_KEY: "AKHJJHHJHJJHHJHJDHJDDJDHJDHJDJHDRANDOMFQ"
  S3_SECRET_KEY: "HfkdjgjkfjkgjkfjkRANDOM2JSJDKKJJKSSJDJKSKaN"

test:
  <<: *defaults

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  <<: *defaults
  

但是rails s命令给了我这个错误:   /home/jonstark/.rvm/gems/ruby-2.3.0@railstutorial_rails_4_0/gems/fog-core-1.35.0/lib/fog/core/service.rb:244:in   `validate_options':缺少必需的参数:aws_access_key_id,   aws_secret_access_key(ArgumentError)

Soo我该怎么办?

2 个答案:

答案 0 :(得分:0)

我解决了将gem'figaro'添加到我的gemfile中的问题。

答案 1 :(得分:0)

我的secrets.yml我倾向于做的是:

# secrets.yml
local: &local
  secret_key_base: 123abc

remote: &remote
  secret_key_base: abc123
  aws_secret_key: <%= ENV['AWS_SECRET_KEY'] %>

development:
  <<: *local

test:
  <<: *local

production:
  <<: *remote

上面的文件应该是我倾向于做的足够好的概念证明。这样,您可以将您的秘密存储在您的环境变量中,而不必将它们提交给源代码控制。我从不让他们来源控制。

如果一个平台要求你将你的秘密提交给源代码控制,那么它就是一个拥有一些糟糕软件架构的平台。架构应该始终考虑安全性。

由于您使用的是开发环境,因此除非您正在开发它,否则您实际上并不需要连接到AWS S3。理想情况下,为了帮助加快开发环境并防止服务器堵塞,您可以将文件保存到public文件夹中,而不是存储在S3上。