我的AS3 Bucket策略仅适用于某些对象



我很难设置bucket策略,看起来我的bucket策略只适用于bucket中的一些对象。

我想要的很简单:我将视频文件存储在bucket中,并希望它们可以从我的webiste独家下载。

我的方法是默认阻止所有内容,然后添加允许规则:

  • 将全部权限授予root和Alice用户
  • 只允许特定的引用者(我的网站(公开访问我的bucket中的文件

注意:我手动将所有对象设置为"公共",并且我的"阻止公共访问"设置都设置为"关闭"。

有人能在我的bucket策略中看到任何明显的错误吗?我不明白为什么我的策略似乎只适用于某些文件。非常感谢

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::MY_BUCKET/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"https://mywebsite1.com/*",
"https://mywebsite2.com/*"
]
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::MY_BUCKET/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://mywebsite1.com/*",
"https://mywebsite2.com/*"
]
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::426873019732:root",
"arn:aws:iam::426873019732:user/alice"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::MY_BUCKET",
"arn:aws:s3:::MY_BUCKET/*"
]
}
]
}

通过aws:Referer控制访问是不安全的。它很容易克服。一个简单的网络搜索将提供许多可以实现这一点的工具。

更安全的方法是:

  • 保持AmazonS3存储桶中的所有对象为私有对象(不要"公开"(
  • 不要使用Bucket策略
  • 用户应对您的应用程序进行身份验证
  • 当用户希望访问其中一个视频时,或者当您的应用程序创建引用/嵌入视频的HTML页面时,应用程序应确定用户是否有权访问该对象
  • 如果用户有权访问该对象,则应用程序会创建一个亚马逊S3预签名URL,该URL提供对私有对象的时间限制访问
  • 当用户的浏览器请求通过预先签名的URL检索对象时,AmazonS3将验证URL的内容。如果URL是有效的,并且时间限制没有过期,AmazonS3将返回对象(例如视频(。如果时间已过期,则不会提供内容

预签名的URL可以在几行代码中创建,不需要API回调Amazon S3。

使用预先签名的URL的好处是您的应用程序确定谁有权查看对象。例如,用户可以选择与另一用户共享视频。您的应用程序将允许其他用户查看此共享视频。它不需要对IAM或bucket策略进行任何更改。

参见:亚马逊S3预签名URL

此外,如果您希望将对Amazon S3存储桶的访问权限授予特定IAM用户(即组织内的用户,而不是应用程序用户(,则最好在IAM用户上授予访问权限,而不是通过亚马逊S3存储桶。如果有多个用户,您可以创建一个包含多个IAM用户的IAM组,然后将策略放在IAM组上。Bucket策略通常应用于向"所有人"而非特定IAM用户授予访问权限。

通常,建议避免使用Deny策略,因为它们可能很难正确写入,并且可能会无意中拒绝管理人员的访问权限。最好限制"允许"的内容,而不是必须将"允许"one_answers"拒绝"结合起来。

相关内容

  • 没有找到相关文章

最新更新