S3:使公用文件夹再次私密?

您如何使AWS S3公用文件夹再次变为私有?

我正在testing一些临时数据,所以我把整个文件夹公开在一个桶中。 我想再次限制其访问权限。 那么如何让文件夹再次保密呢?

据我所知,pipe理控制台中的“公开”选项recursion地为目录中的每个对象添加公共授权。 你可以通过右键点击一个文件来看到,然后点击“属性”。 然后你需要点击“权限”,应该有一行:

Grantee: Everyone [x] open/download [] view permissions [] edit permission. 

如果您在此目录中上传新文件,则不会设置此公开访问权限,因此是私人的。

您需要逐个删除公共读取权限,如果您只有几个键或使用脚本,则可以手动删除。

我用“boto”模块在Python中编写了一个小脚本,recursion地删除S3文件夹中所有密钥的“public read”属性:

 #!/usr/bin/env python #remove public read right for all keys within a directory #usage: remove_public.py bucketName folderName import sys import boto bucketname = sys.argv[1] dirname = sys.argv[2] s3 = boto.connect_s3() bucket = s3.get_bucket(bucketname) keys = bucket.list(dirname) for k in keys: new_grants = [] acl = k.get_acl() for g in acl.acl.grants: if g.uri != "http://acs.amazonaws.com/groups/global/AllUsers": new_grants.append(g) acl.acl.grants = new_grants k.set_acl(acl) 

我testing了它(只)2个对象的文件夹,它的工作。 如果您有很多密钥,可能需要一些时间才能完成,并行方法可能是必需的。

接受的答案效果很好 – 似乎也在给定的s3path上recursion地设置ACL。 但是,这也可以通过名为s3cmd的第三方工具轻松完成 – 我们在公司大量使用它,并且在AWS社区中似乎相当受欢迎。

例如,假设您有这种s3存储桶和dir结构: s3://mybucket.com/topleveldir/scripts/bootstrap/tmp/ 。 现在假设您已经使用Amazon S3控制台将整个scripts “目录”标记为公共。

现在,使整个scripts “目录树”recursion(即包括子目录和它们的文件)再次私有:

 s3cmd setacl --acl-private --recursive s3://mybucket.com/topleveldir/scripts/ 

如果你想要的话,使“目录树” scriptsrecursion地公开,也很容易:

 s3cmd setacl --acl-public --recursive s3://mybucket.com/topleveldir/scripts/ 

您也可以select只在给定的s3“目录”(即非recursion)上设置权限/ ACL,只需在上面的命令中省略--recursive即可。

要使s3cmd正常工作,首先必须通过s3cmd --configure (请参阅http://s3tools.org/s3cmd获取更多详细信息)将您的AWS访问密钥和密钥提供给s3cmd。;

我实际上使用亚马逊的用户界面遵循本指南http://aws.amazon.com/articles/5050/

虽然看起来有些不同于那个指南

截至目前,根据博托文件,你可以这样做

 #!/usr/bin/env python #remove public read right for all keys within a directory #usage: remove_public.py bucketName folderName import sys import boto bucketname = sys.argv[1] dirname = sys.argv[2] s3 = boto.connect_s3() bucket = s3.get_bucket(bucketname) keys = bucket.list(dirname) for k in keys: # options are 'private', 'public-read' # 'public-read-write', 'authenticated-read' k.set_acl('private') 

另外,您可能会考虑删除s3存储桶权限选项卡下的任何存储桶策略。