amazon-web-services - 如何在没有 OAI 的情况下使公共存储桶只能从云端访问?
问题描述
我有一个包含一些图像的存储桶。存储桶可使用以下策略公开访问。
{
"Version": "2008-10-17",
"Id": "s3BucketPolicy",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::Bucketname/*"
}
]
}
我还有一个指向同一个存储桶的云端分布。我现在的问题是我的文件可以从云端链接和存储桶链接访问。
CloudfrontLink:www.xxxxxx.xxxx/xxxx
BucketLink:www.bucketname/xxx
我的问题是如何仅使用云端公开我的存储桶。我不想要签名的 url 或 cookie。我希望任何拥有 cloudfrontlink 的人都能够访问该图像并阻止任何拥有 bucketlink 的人访问该图像。
解决方案
将 S3 存储桶策略委托人更改为 CloudFront 分配的 OAI。例如:
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ABCDABCDABCDAB"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*"
}
]
}
这将阻止访问 CloudFront 之外的存储桶内容。您在这里不需要签名的 URL。有关更多详细信息,请参阅文档。
推荐阅读
- javascript - javascript regex 惰性匹配是如何工作的?
- python - 如何在不阻塞系统的情况下进行循环
- c# - C# 线程中止发生“安全句柄已关闭”
- java - java - 如何计算我在java中的程序的每个X和O的获胜次数?
- python - PyJulia 构建失败;导入期间在当前路径中找不到包“Pkg”?
- docker - 如何在Docker Desktop自带的kubernetes mini-cluster中暴露低号端口
- c# - 自重启自包含单文件 dotnet 核心控制台应用程序
- php - 调整图片大小,添加水印,然后保存
- javascript - 如何将 AJAX 成功变量存储为 AJAX 之外的变量?
- javascript - 你如何用反应钩子做点符号反应组件?