首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何递归地将权限更改为具有AWS s3或AWS s3api的文件夹

如何递归地将权限更改为具有AWS s3或AWS s3api的文件夹
EN

Stack Overflow用户
提问于 2017-10-04 19:29:40
回答 9查看 23.9K关注 0票数 24

我正在尝试向s3中的一个现有帐户授予权限。

存储桶由帐户拥有,但数据是从另一个帐户的桶中复制的。

当我尝试使用命令授予权限时:

代码语言:javascript
运行
复制
aws s3api put-object-acl --bucket <bucket_name> --key <folder_name> --profile <original_account_profile> --grant-full-control emailaddress=<destination_account_email>

我收到错误:

代码语言:javascript
运行
复制
An error occurred (NoSuchKey) when calling the PutObjectAcl operation: The specified key does not exist.

如果我在一个文件上执行这个操作,则命令是成功的。

我如何使它对一个完整的文件夹工作?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2017-10-05 03:44:46

您需要为每个对象单独运行该命令。

您可能可以通过以下方法缩短该过程:

代码语言:javascript
运行
复制
aws s3 cp --acl bucket-owner-full-control --metadata Key=Value --profile <original_account_profile> s3://bucket/path s3://bucket/path

也就是说,可以将文件复制到自己,但使用添加的ACL将权限授予桶所有者。

如果您有子目录,那么添加--recursive.

票数 15
EN

Stack Overflow用户

发布于 2018-05-30 17:27:42

这只能通过使用管道来实现。试着-

代码语言:javascript
运行
复制
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)}'
票数 32
EN

Stack Overflow用户

发布于 2020-09-09 04:10:30

其他答案是可以的,但最快的方法是在选项--metadata-directive REPLACE中使用--metadata-directive REPLACE命令,如下所示:

代码语言:javascript
运行
复制
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。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46572744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档