Sri*_*m R 1 amazon-s3 amazon-web-services
我学习 AWS 一段时间了,有件事让我感到困惑。
假设我拥有一个像 Instagram 这样的应用程序(哈哈,但仍然如此),并且我的用户在我的应用程序上上传了大量图像。现在我通过任何方式将它们存储在 s3 存储桶中。现在,图像安全地存储在 S3 上,图像的 URL 存储在我的数据库中,以便我的用户可以轻松地从应用程序访问图像。
现在,为了使图像可以在任何地方 [移动应用程序、桌面应用程序和 Web 应用程序] 访问,我必须将存储桶及其中的所有图像公开,以便任何应用程序都可以通过 URL 访问该图像。但S3建议我们不要公开该存储桶及其内容。
我尝试不公开存储桶,只是设置一个 CORS 配置,例如
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://www.trailer2you.herokuapp.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://www.t2ytest-private.herokuapp.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://www.t2ybeta.herokuapp.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<ExposeHeader>Access-Control-Allow-Origin</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
但这也行不通。所有应用程序可以通过 URL 访问图像的唯一方法是通过以下策略公开存储桶及其所有内容
{
"Id": "Policy1598785179613",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1598785170418",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "{my ARN}",
"Principal": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但这正是 S3 不鼓励我们做的事情。还有其他选择可以实现这样的目标吗?一定有一些东西,但我是云新手,我无法在文档中找到适当的资源。如果有人可以向我指出与此案例类似的文档,我将不胜感激。
默认情况下, Amazon S3 中的对象是私有的。
有多种方法可以提供对存储桶的访问:
听起来预签名 URL 最适合您的情况。想象一个照片共享网站:
<img>)有关更多详细信息,请参阅:Amazon S3 预签名 URL
| 归档时间: |
|
| 查看次数: |
1791 次 |
| 最近记录: |