标准角色的Elastic Beanstalk S3权限:仍然在文件访问时拒绝权限

时间:2016-03-21 07:30:44

标签: amazon-web-services amazon-s3 amazon-ec2 elastic-beanstalk

尝试让EB使用S3存储桶。 我以为我遵循了所有说明,但是无法上传pdf来显示(目前“许可被拒绝”)。我早先在heroku + S3上工作,所以知道它在理论上有用。

设置

  • Ruby EB,单个实例。使用默认应用
  • 创建
  • 添加了paperclip demo app
  • app:paperclipdemo3 env:paperclipdemo3-dev
  • 实例配置文件(aws-elasticbeanstalk-ec2-role)。标准服务 轮廓(AWS-elasticbeanstalk服务角色)
  • 将AmazonS3FullAccess附加到此rol
  • 在相同区域中创建的S3存储桶

错误 查看上传的文件(pdf)时给出 AccessDeniedAccess Denied5CDDC975006C7C62h3ohBvPu8hXYIZkwLsgF / k0akNuLjyaOpbBzgsxmgtesQ / UJBlOH6phRrsr0tPowNFBFZ7LCI7M =

上传了doc S3路径

根据生成的html页面

https://s3-ap-southeast-2.amazonaws.com/paperclipdemo3bucket1/var/app/current/public/pdf/1/original/testupload_2page_doc1.pdf?1458545227

尝试

  • 修复'抱歉出错了',这是端点/区域配置
  • 根据自定义存储桶名称等的文档中的建议添加特定策略,但决定何时不能简化:
  • 将S3 fullaccess添加到aws-elasticbeanstalk-ec2-role(这似乎是这里定义的'最简单':"SO S3 permissions"
  • 使S3存储桶可读(即每个人)并且它会拒绝相同的访问权限肯定这应该有效!

无法让它发挥作用。打赌它明显的东西!?

希望别人能比我更快地发现任何想法

编辑1 - 我注意到人们谈到看到logs in EB console,但我所能做的就是下载最后100行或完整的EC2日志。没有我的日志提到S3错误(除了回形针上传文件),没有返回代码。 我还注意到我的S3存储桶没有写任何日志(即使在同一区域附加了一个单独的日志存储桶)

Paperclip config

 config.paperclip_defaults = {
      :storage => :s3,
      :s3_region => 'ap-southeast-2',
      :s3_permissions => :private,
      :s3_protocol => 'https',
      :s3_host_name => 's3-ap-southeast-2.amazonaws.com',
      :s3_endpoint => 's3-ap-southeast-2.amazonaws.com',
      :s3_credentials => {
        :bucket => ENV['AWS_BUCKET'],
        :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
        :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
      }
    }

角色

eb roles

角色政策aws-elasticbeanstalk-ec2-role

permissions

EB配置环境变量

EB Environment Config

S3示例上传文件权限

example S3 uploaded file

1 个答案:

答案 0 :(得分:0)

我混合S3政策&访问控制列表。这个配置是罪魁祸首

  :s3_permissions => :private,

如果删除它就会公开!

这有一个很好的解释:https://thewebfellas.com/blog/protecting-your-paperclip-downloads,其中列出了ACL:http://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html