我正在尝试设置Carrierwave和Fog来处理我在AWS'Elastic Beanstalk上托管的rails应用上的图像和文件上传。
我对如何正确设置Fog配置感到困惑。
我尝试使用我的AWS Access和密钥(在下面的示例中已注释掉)。通过EB CLI上的错误(错误:NotAuthorizedError - 操作被拒绝。请求中包含的安全令牌无效。)
我想使用IAM而不是在我的ruby代码中使用我的访问/密码。谁能告诉我如何正确设置?
这是我的配置文件:
CarrierWave.configure do |config|
# Use local storage if in development or test
if Rails.env.development? || Rails.env.test?
CarrierWave.configure do |config|
config.storage = :file
end
end
# Use AWS storage if in production
if Rails.env.production?
CarrierWave.configure do |config|
config.storage = :fog
end
end
config.fog_credentials = {
:provider => 'AWS', # required
# :aws_access_key_id => 'My Access', # required
# :aws_secret_access_key => 'My Secret', # required
:use_iam_profile => true,
:region => 'eu-west-2' # optional, defaults to 'us-east-1'
}
config.fog_directory = 'elasticbeanstalk-us-west-2-XXXXXXXXXX' # required
#config.fog_host = 'https://assets.example.com' # optional, defaults to nil
config.fog_public = false # optional, defaults to true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end
答案 0 :(得分:1)
这是一个适合我的设置:
配置/初始化/ carrierwave.rb
CarrierWave.configure do |config|
config.fog_provider = 'fog/aws' # required
config.fog_credentials = {
provider: 'AWS', # required
aws_access_key_id: ENV['aws_access_key_id'], # required
aws_secret_access_key: ENV['aws_secret_access_key'], # required
#region: 'Singapore', # optional, defaults to 'us-east-1'
#host: 's3.example.com', # optional, defaults to nil
#endpoint: 'olucube-images.s3-website-ap-southeast-1.amazonaws.com', # optional, defaults to nil
}
config.fog_directory = ENV['fog_directory'] # required
#config.fog_public = false # optional, defaults to true
# config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" }, # optional, defaults to {}
end
我使用figaro gem来保存我的凭据如下:
配置/ application.yml
aws_access_key_id: 'XXXXXXXXXXXXXXXXXXXX'
aws_secret_access_key: 'XXXXXXXXXXXXXXXXXX'
fog_directory: 'myAppName'
答案 1 :(得分:0)
这有点疯狂。我很难搞清楚费加罗的宝石。这可能很简单,但我并不是真的理解它。因此,对于测试,我将我的密钥直接放在代码中。它仍然无效。
我将代码推送到github(公开),并没有想太多。为了以防万一,我打算换钥匙。在我能够做到这一点之前,有人在github上找到了我的代码,并获得了访问我的AWS账户的权限。他们启动了一堆EC2实例,并在几个小时内获得了价值3000美元的使用!
我的AWS账户被暂停,我仍在处理相反的费用。
反正。我发现您实际上可以在Elastic Beanstalk Web界面上设置环境变量。它在配置→软件配置下。所以我这样做而不是使用Fiagro(更安全的IMO)。现在它很棒。我将Carrierwave配置文件简化为仅使用AWS从EB调用环境变量。这是文件:
--site=QA
端
我更改了我的上传程序文件以使用雾。这是一个例子:
# config/initializers/carrierwave.rb
CarrierWave.configure do |config|
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['S3_KEY'],
aws_secret_access_key: ENV['S3_SECRET'],
region: ENV['S3_REGION']
}
config.fog_directory = ENV['S3_BUCKET']
config.fog_public = false
config.storage = :fog
现在一切都很好。我希望这有助于其他人。