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

Posted

技术标签:

【中文标题】标准角色的 Elastic Beanstalk S3 权限:文件访问权限仍然被拒绝【英文标题】:Elastic Beanstalk S3 permission on standard role: still permission denied on file access 【发布时间】:2016-07-07 14:56:37 【问题描述】:

尝试让 EB 与 S3 存储桶一起使用。 以为我已遵循所有说明,但无法上传 pdf 以显示(当前“权限被拒绝”)。我之前在 heroku + S3 上做过这个,所以知道它在理论上是有效的。

设置

Ruby EB,单实例。使用默认应用创建 添加了paperclip demo app 应用程序:paperclipdemo3 环境:paperclipdemo3-dev 实例配置文件 (aws-elasticbeanstalk-ec2-role)。标准服务 配置文件(aws-elasticbeanstalk-service-role) 附加了对此角色的 AmazonS3FullAccess 在同一区域创建的 S3 存储桶

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

上传的文档 S3 路径

根据生成的html页面

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

试过

修复了端点/区域配置中的“抱歉出了点问题” 按照自定义存储桶名称等文档中的建议添加特定策略,但决定何时变得简单: 向 aws-elasticbeanstalk-ec2-role 添加 S3 完全访问权限(这似乎是此处定义的“最简单”:"SO S3 permissions"。 使 S3 存储桶世界可读(即每个人),它会拒绝相同的访问这肯定可以工作!?

只是无法让它工作。打赌它很明显!?

希望其他人能比我更快地发现,任何想法表示赞赏

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

回形针配置

 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'],
      
    

角色

角色 aws-elasticbeanstalk-ec2-role 的策略

EB 配置环境变量

S3 示例上传文件权限

【问题讨论】:

【参考方案1】:

我混合使用 S3 策略和 ACL。这个配置是罪魁祸首

  :s3_permissions => :private,

如果它被删除,它就会公开!

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

【讨论】:

以上是关于标准角色的 Elastic Beanstalk S3 权限:文件访问权限仍然被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 无法担任角色

登录角色时出现 AWS Elastic Beanstalk ServiceRole 错误

如何将 Django 标准输出转发到 Elastic Beanstalk 日志?

Elastic Beanstalk 拒绝 AWS S3 存储权限

AWS S3 行为 - 本地主机 v/s Elastic Beanstalk?

Elastic Beanstalk Docker 容器用于访问 S3 存储桶以获取数据