如何将bucket所有者的完全控制权分配给s3 bucket中数百万个已经存在的文件



我有一个s3存储桶,其中有数百万个文件由我不控制的Java进程复制到那里。Java进程在EC2中执行;AWS账户A";但是写入由";AWS账户B";。B可以看到这些文件,但无法打开。

我发现了问题所在,并请求对Java Process进行更改,以使用";acl=bucket所有者完全控制";。。。它起作用了!新文件可以从";AWS账户B";。

但我的问题是,我仍然有数百万个文件的acl不正确。我可以用很容易地修复其中一个旧文件

aws s3api put-object-acl --bucket bucketFromAWSAccountA--key datastore/file0000001.txt --acl bucket-owner-full-control

最好的方法是什么?我在想类似的东西

# Copy to TEMP folder
aws s3 sync s3://bucketFromAWSAccountA/datastore/ s3://bucketFromAWSAccountA/datastoreTEMP/ --recursive --acl bucket-owner-full-control
# Delete original store
aws s3 rm s3://bucketFromAWSAccountA/datastore/
# Sync it back to original folder
aws s3 sync s3://bucketFromAWSAccountA/datastoreTEMP/ s3://bucketFromAWSAccountA/datastore/ --recursive --acl bucket-owner-full-control

但这将非常耗时。我想知道…

  • 有更好的方法来实现这一点吗
  • 这可以从铲斗级别轻松实现吗我的意思是一些改变";放置水桶acl";让主人准备好一切

一个选项似乎是递归地复制bucket中的所有对象,指定要进行的ACL更改。

类似于:aws s3 cp --recursive --acl bucket-owner-full-control s3://bucket/folder s3://bucket/folder --metadata-directive REPLACE

该代码片段取自以下答案:https://stackoverflow.com/a/63804619

值得回顾一下该问题答案中提供的其他选项,因为如果您不正确地形成命令,则可能会丢失内容类型标记或元数据信息。

最新更新