默认情况下,Amazon S3 存储桶中的所有内容都是私有的。
如果您希望提供对内容的公开访问,可以通过多种方式完成:
- 在存储桶级别,通过提供存储桶策略:这是提供对整个存储桶或存储桶一部分的访问权限的理想选择。
- 在对象级别使用访问控制列表 (ACL):这允许逐个对象进行细粒度控制。
- 有选择地,通过创建预签名 URL:这允许您的应用程序确定是否应允许特定应用程序用户访问
这三种方法都允许通过 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,授予对对象的临时访问权限。超过有效期后,链接将不再有效。