阻止S3用户发布到公共存储桶?

时间:2017-07-24 19:11:05

标签: amazon-web-services amazon-s3 amazon-iam

假设存在一个与我的私有桶名称非常相似的公共存储桶。我想阻止用户拼错私人存储桶并意外地将敏感数据发布给公众。

我知道最佳做法是尽可能使存储桶名称唯一。

澄清:我想阻止用户发布到任何公共S3存储桶

2 个答案:

答案 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。唯一的缺点是您需要专门列出您希望包含/排除的存储桶,因为无法指定规则适用于"公共存储桶"。