私有存储桶中S3文件的URL

5

我使用SDK将文件上传到了我的私有S3存储桶中。

我可以通过S3 UI访问这个文件。

然而,我无法通过直接链接访问该文件。它给我返回一些XML,其中包括“AccessDenied”作为代码和消息。

既然我在浏览器中已经得到了验证,并且从同一个浏览器点击了文件的直接链接,那么我应该被允许访问。至少,我应该被引导到登录页面。

有人有这方面的经验吗?


请提供有关您当前S3存储桶配置的一些详细信息。 - David Bentley
2
你的期望有些偏差。登录控制台与直接从S3获取对象无关。从S3获取非公共对象的唯一方法是提供签名URL(或授权标头)来验证请求。(右键单击并复制控制台中对象的“下载”链接,以查看其外观。控制台会生成此链接。)S3不是面向最终用户的服务——它没有被“用户”访问或浏览器“登录”的概念。S3不使用cookie或具有会话的概念。你所描述的行为是预期的。 - Michael - sqlbot
似乎没有办法右键点击并捕获该链接。您能提供一张截图,以便我可以看到一些上下文吗? - BitsAndBytes
3个回答

5
所以,经过一段时间的努力,我发现最好的方法是将控制台URL直接发布到文件中。 https://s3.console.aws.amazon.com/s3/object/{你的存储桶}/{你的文件路径}?region={你的存储桶所在地区}&tab=overview
请注意指定正确的地区。如果您是通过编程形式进行操作,则使用Amazon.RegionEndpoint.SystemName。
如果您没有登录,则会要求您登录!
不需要签名URL。
感谢所有做出贡献的人!

这正是我需要的,以便为IAM用户提供访问特定存储桶中特定路径的链接,而不会让他们被整个AWS控制台界面所淹没。这使他们直接到达他们需要的地方。 - Clinton Chau
为了进一步跟进,为了提示用户使用IAM用户帐户(而不是根帐户)预先选择并填充您的帐户ID的凭据,您可以使用以下格式的URL:https://{account_id}.signin.aws.amazon.com/console/s3/?bucket={bucket_name}&prefix={bucket_folder_name}%2f - Clinton Chau

1

你能否在那个链接中添加更多关于需要注意的事项的信息? - Hippolippo

1

有两个地方需要确保根据您希望如何设置对存储桶进行访问来正确设置。它将具有公共或私有访问权限。

属性选项卡:

在这里,您可以设置存储桶的用途。

Bucket properties

权限选项卡 -> 存储桶策略:

enter image description here

有了这个,你就可以设置访问权限了。我能够使用这个网站生成一个策略: http://awspolicygen.s3.amazonaws.com/policygen.html

编辑:

我的设置是有效的。我建议询问AWS论坛来解决问题。你也可以尝试这个:

Make Public


谢谢,这让我有了一个开始。我必须额外指定一个用户。如果我不这样做,只使用“*”,那么整个存储桶都会变成公共的。“Principal”:{“AWS”:“arn:aws:iam::account-number-without-hyphens:user/username”}https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.html - BitsAndBytes
我添加了静态网页托管以防万一,但仍然存在相同的问题。它似乎没有受到影响。 - BitsAndBytes
@CINCHAPPS 我添加了另一张照片。我建议使用AWS板,因为我的工作正常。 - David Bentley
我相信你的bucket是公开的,我的是私有的。 - BitsAndBytes
@CINCHAPPS 项目或整个存储桶可以设置为公共或私有。如果您需要所有内容都是私有的,则需要进行经过身份验证的 HTTPS 请求才能访问 S3 上的对象。 - David Bentley
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接