我正在尝试向s3中的一个现有帐户授予权限。
存储桶由帐户拥有,但数据是从另一个帐户的桶中复制的。
当我尝试使用命令授予权限时:
aws s3api put-object-acl --bucket <bucket_name> --key <folder_name> --profile <original_account_profile> --grant-full-control emailaddress=<destination_account_email>我收到错误:
An error occurred (NoSuchKey) when calling the PutObjectAcl operation: The specified key does not exist.如果我在一个文件上执行这个操作,则命令是成功的。
我如何使它对一个完整的文件夹工作?
发布于 2017-10-05 03:44:46
您需要为每个对象单独运行该命令。
您可能可以通过以下方法缩短该过程:
aws s3 cp --acl bucket-owner-full-control --metadata Key=Value --profile <original_account_profile> s3://bucket/path s3://bucket/path也就是说,可以将文件复制到自己,但使用添加的ACL将权限授予桶所有者。
如果您有子目录,那么添加--recursive.
发布于 2018-05-30 17:27:42
这只能通过使用管道来实现。试着-
aws s3 ls s3://bucket/path/ --recursive | awk '{cmd="aws s3api put-object-acl --acl bucket-owner-full-control --bucket bucket --key "$4; system(cmd)}'发布于 2020-09-09 04:10:30
其他答案是可以的,但最快的方法是在选项--metadata-directive REPLACE中使用--metadata-directive REPLACE命令,如下所示:
aws s3 cp --recursive --acl bucket-owner-full-control s3://bucket/folder s3://bucket/folder --metadata-directive REPLACE这使得速度在50米/秒和80米/秒之间。
来自约翰·R的评论的答案,建议使用“虚拟”选项,比如--storage-class STANDARD。虽然这样做,但只给我拷贝速度在5米/秒和11兆/秒之间。
尝试这种方法的灵感来自AWS关于这个主题的支持文章:https://aws.amazon.com/premiumsupport/knowledge-center/s3-object-change-anonymous-ownership/
注意:如果您遇到一些对象的“访问拒绝”,这很可能是因为您将AWS creds用于存储桶拥有的帐户,而需要对复制文件的帐户使用creds。
https://stackoverflow.com/questions/46572744
复制相似问题