CarrierWave Fog凭证,访问被拒绝

时间:2013-07-30 02:44:26

标签: ruby-on-rails amazon-web-services amazon-s3 carrierwave fog

我正在尝试将CarrierWave与Amazon S3一起使用。当我尝试通过rake任务上传文件时,我收到此错误:

rake aborted!
Expected(200) <=> Actual(403 Forbidden)

我的CarrierWave初始化程序如下所示:

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: MY_AWS_ACCESS_KEY_ID,
    aws_secret_access_key: MY_AWS_SECRET_ACCESS_KEY
  }
  config.fog_directory = MY_BUCKET
  config.fog_public = true
end

在我调试时,我确实设置了真实的,硬编码的密钥/机密/存储桶值。

rake任务看起来像这样,并且当我将CarrierWave上传器设置为使用storage: file本地上传时成功:

Photo.create({
  image: File.new('lib/dummy_files/image.jpg')
})

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:11)

我意识到这与新的AWS身份和访问管理(IAM)有关。我创建了一个新的IAM用户,但我没有给该用户正确的权限。过去,只有一个用户,该用户具有管理员权限。现在,您必须创建用户,为该用户授予正确的权限,并使用该用户的凭据。我希望这有助于某人。

答案 1 :(得分:10)

这个答案对我有帮助......具体来说,它在IAM&gt;下;用户&gt;权限&gt;附加用户政策

当您第一次创建用户时,它不会获得用户政策&#39;根据&#39;权限。&#39;一旦我附上了用户政策,事情就会奏效。

答案 2 :(得分:1)

带有 S3 的 CarrierWave 肯定会尝试更新对象的 ACL。如果此权限被 AWS S3 存储桶设置阻止(阻止所有公共访问),carrierwave 将中止提及访问被拒绝,而没有关于错误的太多信息。即使我们使用 CarrierWave 尝试使用 root 用户凭据,也会发生这种情况。

因此关闭前 2 个访问权限以允许 CarrierWave 更新 ACL。

PS:请确保对象是私有的,除非打算公开 Bucket Settings: Block public access