当前位置: 首页 > 知识库问答 >
问题:

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

宋斌
2023-03-14

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

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

我目前正在通过将所有上传的文件设置为CarrierWave初始值设定项中的private

config.fog_public=假

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

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

我不明白为什么应用程序在给定ACCESSKEY和SECRRETKEY的情况下无法访问私有文件

共有1个答案

黄景胜
2023-03-14

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

即使IAM策略授予访问权限,也无法访问私有s3文件

而是

如何手工创建一个预先签名的URL,以便在S3上获取私有文件

要点显示您正在尝试为GET yourself创建预先签名的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和AWS::S3::Object#presigned#url的文档。

您可能需要仔细阅读将参数传递到AWS::S3.new此处(用于凭证、区域等)。

我建议你采取以下步骤:

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

但在任何情况下,我建议您使用更高级别的SDK来为您做类似的事情。

如果这一点对你没有任何帮助,请发表评论,说明你的新发现。

 类似资料:
  • 使用IAM策略模拟器时,似乎必须提供对完整密钥arn的访问(),而不是别名() 有没有更好的办法来管理这个? 我知道我可以使用密钥策略管理对CMKs的访问,并且不允许从IAM进行访问,但是您不能在KMS密钥策略中使用组作为

  • 我们有一个Lambda函数,需要能够访问私有的S3桶。 该存储桶已启用“阻止所有公共访问”,并具有以下资源策略: 我还将AmazonS3FullAccess策略直接附加到Lambda使用的IAM角色。但是,当Lambda函数尝试访问S3存储桶时,会出现访问被拒绝错误: 使用IAM用户凭据连接到S3的外部系统在尝试访问存储桶时也会收到相同的错误。 有人知道是什么导致了这个错误吗? 以下是发生错误的L

  • 我现在正在尝试使用AWS S3。 我创建了一个没有“权限策略”的IAM用户。 并且,S3的bucket策略设置如下。 但是,此设置给出了拒绝访问错误。 桶和IAM用户在同一个AWS帐户中。 顺便说一句,如果我在IAM的策略设置中授予S3的完全访问权限,它就可以正常工作。 有没有一种方法可以只使用S3 bucket策略而不给IAM用户任何“权限策略”来访问? 如果您知道什么,我很乐意让您知道。 我可

  • 我已经创建了一个webview应用程序,在那里我扫描二维码。在移动和桌面浏览器上一切正常,但在应用程序中,我得到。 我在下面分享一些代码: 我也尝试了这里和这里建议的解决方案,但它对我不起作用。

  • null 是否有一种方法可以跟踪为特定的S3 getObject请求提供访问的策略/角色? 我已经为与认知组相关联的角色运行了IAM策略模拟器,它对有问题的对象给出了拒绝。 我试图正确阻止访问的对象没有为它们设置权限。桶有: 阻止新的公共ACL和上载公共对象(建议):True 删除通过公共ACL授予的公共访问权限(建议):True 阻止新的公共桶策略(推荐):true 如果bucket具有公共策略

  • 我正在将文件从php上传到s3bucket.its上传成功,但当我检索图像时,我得到以下错误 如果我在上传文件时设置为公开,那么我可以检索它,但我想防止未经授权的用户。 上载文件代码 在问问题之前,我已经参考了许多网站,但它对我没有帮助 Amazon S3查看私人文件 PHP Amazon S3通过URL访问私人文件 如何通过Zend_Service_Amazon_S3访问Amazon s3私有桶