6

我正在尝试将 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')
})

任何帮助深表感谢。谢谢!

4

3 回答 3

11

这个答案也对我有帮助......具体来说,它位于 IAM > Users > Permissions > Attach User Policy

当您第一次创建用户时,它不会在“权限”下获得“用户策略”。一旦我附加了用户政策,事情就奏效了。

于 2014-04-11T14:14:19.797 回答
11

我意识到这与新的 AWS Identity and Access Management (IAM) 有关。我创建了一个新的 IAM 用户,但我没有为该用户提供正确的权限。过去,只有一个用户,并且该用户具有管理员权限。现在您必须创建一个用户,赋予该用户正确的权限,并使用该用户的凭据。我希望这可以帮助别人。

于 2013-07-31T01:36:41.843 回答
1

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

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

PS:请确保对象是私有的,除非打算公开 存储桶设置:阻止公共访问

于 2021-05-10T18:33:23.410 回答