如何将S3存储桶策略的公共访问权限更改为私有

时间:2019-05-20 12:51:36

标签: amazon-web-services amazon-s3

我是AWS S3的新手,我创建了存储桶,并在其中存储了用户个人资料照片和我们的日常数据备份(频繁上传)。

当我打开S3时

Access: Public is showing

当我打开存储桶时,“权限”标签也会显示为公开。

我的存储桶策略也是公开的

告诉我们创建存储桶的标准和安全实现是什么。

如果我删除公共访问权限,那么用户是否会获得其个人资料照片? 如果我删除公共访问权限,那么“我的数据库备份”将上传还是不上传?

我知道建议使用“私人”选项,但是从“公开”更改为“私人”后,我担心我的照片和数据库备份将无法正常工作。

我的存储桶策略是

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucketname/*"
        }
    ]
}

很明显,这项政策将允许所有人。

任何具有较强知识和专业知识的人,请向我提出一些解决此问题的好方法。任何帮助,支持或建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

默认情况下,Amazon S3中的所有对象都是私有的。这意味着只能通过提供AWS凭证来访问它们。很好。

如果您想将对象做成公开,那么任何人都可以访问该对象。上述存储桶政策是公开整个存储桶,因此任何人都可以在存储桶上调用GetObject。诚然,他们将需要知道对象的名称,因为它们无法列出存储桶的内容,但是对象是可公开访问的。

通常最佳做法是仅在必要时才授予对数据的访问权限。因此,如果您有一个网站希望显示用户个人资料照片,则可以将其公开。但是,您不太可能希望整个世界都可以访问您的数据备份。因此,将整个存储桶公开可能不是一个好主意。

有几种方法可以授予对Amazon S3中对象的访问权限:

  • 存储桶策略可以公开存储桶或存储桶的一部分。
  • 单个对象上的
  • 访问控制列表(ACL)可以将该对象设为公开
  • 可以将
  • IAM权限添加到IAM用户和IAM组,以授予对特定用户的访问权限
  • 预签名URL 可以授予对对象的时间限制访问

如果您有一个显示个人资料图片的应用程序,但又不想公开该个人资料图片,则您的应用程序可以生成一个预签名URL ,该URL提供对私有文件的临时访问宾语。可以在网页上的<img src=.../>标签中使用此URL。到期后,URL将不再起作用。

因此,最好的方法是将对象保密,除非您有特定的理由将它们公开。使用预签名的URL是提供临时访问的好方法。

请参阅:Share an Object with Others - Amazon Simple Storage Service