假设存在一个与我的私有桶名称非常相似的公共存储桶。我想阻止用户拼错私人存储桶并意外地将敏感数据发布给公众。
我知道最佳做法是尽可能使存储桶名称唯一。
澄清:我想阻止用户发布到任何公共S3存储桶
答案 0 :(得分:0)
您无法控制其他存储桶,因此无法阻止这种情况发生。
为了回应它,我想您可以定期查询该存储桶,假设它是公开可读的,用于搜索您认为应该已经上传到您的存储桶的内容,尽管不清楚您的意愿那时做。
或者,为您的用户提供上传页面(可能在您的S3存储桶中静态托管),并要求您的用户使用该页面启动上传(通过POST或AWS S3 JavaScript SDK),这样用户就不会必须输入一个桶名,因此不能意外地定位错误的桶。
答案 1 :(得分:0)
Public Buckets 非常罕见。实际上,从安全性的角度以及从成本的角度来看,他们都非常气馁 - 有人可能会上传非法文件并将其用于文件共享,而桶主人则会买单!
我通常会说某人能够成功上传到随机存储桶的几率几乎为零,但我怀疑你是在考虑一个邪恶派对可能会产生类似情况的情况 - 为了收集机密数据而希望收集机密数据(类似于域名露营)。
在这种情况下,您可以为用户创建拒绝政策,以禁止访问所有S3存储桶,但您明确指定的存储除外:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::good-bucket1",
"arn:aws:s3:::good-bucket2"
]
},
{
"Sid": "NotOthers",
"Effect": "Deny",
"Action": [
"s3:*"
],
"NotResource": [
"arn:aws:s3:::good-bucket1",
"arn:aws:s3:::good-bucket2" ]
}
]
}
这将有效,因为针对IAM用户的Deny
将覆盖Bucket Policy中的任何Allow
。唯一的缺点是您需要专门列出您希望包含/排除的存储桶,因为无法指定规则适用于"公共存储桶"。