我是AWS工具的新手,尽管我试图彻底搜索答案,但我没能找到解决方案。
我的用例是:我有一个水桶,我需要在那里存储图像,通过我的服务器上传,但我需要在我的网站上显示它们。
我的水桶应该公开吗?如果没有,我应该怎么做才能让每个人都能阅读这些图像,但不能从不是我的服务器的来源大规模上传?
如果您希望您的网站可以公开访问这些图像,那么这些对象需要是公共的。
这可以通过创建Bucket策略来实现,该策略使整个Bucket或Bucket的一部分可以公开访问。
或者,在上传图像时,您可以使用ACL='public-read'
,即使bucket不是公共的,它也会使单个对象成为公共对象。通过这种方式,您可以对bucket中哪些内容是公共的进行更细粒度的控制。
这两个选项都要求您关闭S3块公共访问的部分,以允许Bucket策略或ACL。
当您的服务器上传到S3时,它应该使用Amazon S3 API调用,使用来自IAM用户的一组AWS凭据(访问密钥、密钥(。授予IAM用户将对象放入存储桶的权限。通过这种方式,该软件可以完全独立地上传到bucket中,以确定bucket是否是公共的。(永远不要让一个bucket公开可写/可上传,否则人们可以在没有你控制的情况下存储任何东西。(
通过我的服务器上传它们,但我需要在我的网站上显示它们。
在这种情况下,只有您的服务器才能上传图像。因此,如果您在EC2或ECS上托管web应用程序,那么您可以使用实例角色和任务角色来提供S3写访问。
我的bucket应该是公共的吗?
不必这样。CloudFront通常用于使用OAI托管S3中的图像或文件。这样,你的水桶就可以完全保密。