我想安全地设置s3存储桶,但要提供对网站资产(例如图像,pdf,文档等)的公共访问权限。似乎没有一种简便的方法。
我尝试设置一个启用了“阻止公共访问”的新存储桶。我认为这是保护存储桶的最佳方法,但无法查看/下载此存储桶中的文件。
我希望能够从浏览器查看/下载网站文件,但始终会出现“访问被拒绝”错误。
答案 0 :(得分:1)
默认情况下,Amazon S3存储桶中的所有内容都是私有的。
如果您希望公开访问内容,可以通过以下几种方式完成:
所有三种方法均允许通过URL访问Amazon S3中的对象。这与使用AWS凭证对Amazon S3进行API调用完全独立,后者可以在用户级别进行控制。
根据您的描述,桶策略似乎最能满足您的需求,例如:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PublicPermission",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::my-bucket/*"]
}
]
}
这是说:允许任何人从我的存储桶中获取对象
请注意,该策略指定了允许哪些调用,因此它可以允许上载,下载,删除等。在上面的示例中,它仅允许GetObject
,这意味着可以访问/下载对象,但不允许上传,删除等
资源中的/*
通过在存储区中指定路径 允许进一步控制,因此可以仅对存储区的一部分授予访问权限。
使用存储桶策略时,还必须停用“阻止公共访问”设置,以允许使用存储桶策略。这是一个额外的保护层,可确保不会意外使存储桶公开访问。
另一方面,如果您的实际目标是保持内容的私密性,但有选择地将其提供给应用程序用户,则可以使用预签名的URL 。一个照片网站就是一个例子,其中允许人们查看其私人照片,但这些照片不能公开访问。
这可以通过让用户验证该应用程序来解决。然后,当他们希望访问照片时,应用程序将确定是否允许查看照片。如果是这样,则应用程序将生成一个pre-signed URL来授予对对象的临时访问权限。一旦过期,链接将不再起作用。