即使IAM策略授予访问权限,Web应用程序也无法访问专用s3文件



我正在使用CarrierWaveDirect将高分辨率图像上传到s3。然后,我使用该图像来处理通过Cloudfront URL公开的多个版本。

上传的高分辨率文件需要对匿名用户保持私有,但web应用程序需要访问私有文件才能对其他版本进行处理。

我目前正在通过在CarrierWave初始化器中将所有上传的文件设置为私有

config.fog_public=错误

我有一个允许完全管理员访问的web应用程序IAM策略。我还在应用程序中为IAM用户设置了ACCESSKEY和SECRETKEY。考虑到这两个标准,我认为web应用程序可以访问私人文件并继续处理,但它被拒绝访问私人文件。

*当我登录到与web应用程序关联的用户帐户时,我能够访问私人文件,因为URL上添加了一个令牌。

我不明白为什么应用程序无法访问ACCESSKEY和SECRRETKEY 的私人文件

我很难解决你的问题。我很确定你的问题不是

即使IAM策略授予访问的权限,也无法访问专用s3文件

而是

如何手工制作一个预签名的URL,用于在S3 上获取私人文件

要点显示您正在尝试为GET自己创建预签名的URL。虽然这非常好,但它也非常容易出错

请使用AWS SDK for Ruby(我在这里只发布了已知可用于版本1的代码,但如果您不受遗留代码的限制,请从版本2开始)来验证您所尝试的是否有效:

s3 = AWS::S3.new
bucket = s3.buckets["your-bucket-name"]
obj = bucket.objects["your-object-path"]
obj.url_for(:read, expires: 10*60) # generate a URL that expires in 10 minutes

有关详细信息,请参见AWS::S3::S3Object#url_forAws::S3::Object#presigned_url的文档。

您可能需要在此处阅读向AWS::S3.new传递args的相关信息(对于凭据、区域等)。

我建议你采取以下步骤:

  1. 使用access_key_idsecret_access_key使其在本地工作
  2. 让它在你的员工身上发挥作用
  3. 如果它有效,您可以将SDK返回的查询字符串与您自己手工制作的查询字符串进行比较。也许你能发现一个错误

但无论如何,我建议您使用更高级别的SDK来为您做类似的事情

如果这还不能让你有所收获,请发表评论并附上你的新发现。

相关内容

最新更新