将s3存储桶中的所有密钥设为私有

时间:2017-03-31 10:30:49

标签: amazon-web-services amazon-s3

我有一个10 ^ 6键的桶。我想让其中的所有对象都是私有的。

我尝试了s3cmd,但有些时候失败了。 我用boto3尝试过它,但速度很慢。

import boto3

boto3.setup_default_session(aws_access_key_id=access_key_id, aws_secret_access_key=secret_access_key)
s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')

bucket = s3_resource.Bucket(bucket_name)
bucket_acl = bucket.Acl()

i = 0

for object_summary in bucket.objects.all():
    i += 1
    object_acl = object_summary.Acl()
    if i % 100 == 1:
        print('{} {}'.format(i, object_summary.key))

    object_acl.put(ACL='private')

有没有办法进行批量操作或通过设置一些存储桶策略来执行所有私有操作。

欢迎任何其他建议。

2 个答案:

答案 0 :(得分:1)

你不需要做任何事情。默认情况下,Amazon S3中的对象私有

让他们公开的事情是:

  • 包含对象的存储桶上的存储桶策略
  • 授予Amazon IAM中用户,组和角色的权限
  • 专门应用于每个对象的权限(“ACLs”)

答案 1 :(得分:1)

不幸的是我没有找到一个好的解决方案。我决定在背景中使用nohup运行70个小时。

我认为可能的解决方案是将存储桶中的密钥拆分为多个集合并使用多个线程运行它们。

但最后我只等了70个小时。