【问题标题】:How can I assign bucket-owner-full-control to millions of already existing files in a s3 bucket?如何将 bucket-owner-full-control 分配给 s3 存储桶中的数百万个现有文件?
【发布时间】:2021-03-21 06:27:58
【问题描述】:

我有一个 s3 存储桶,其中包含由我无法控制的 Java 进程复制的数百万个文件。 Java 进程在“AWS 账户 A”中的 EC2 中执行,但写入“AWS 账户 B”拥有的存储桶。 B 可以看到这些文件,但不能打开它们。

我发现问题出在哪里,并请求更改 Java 进程以使用“acl = bucket-owner-full-control”编写新文件......并且它有效!可以从“AWS Account 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

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

  • 有没有更好的方法来实现这一点?
  • 这可以从存储桶级别轻松实现吗?我的意思是一些更改“put-bucket-acl”,允许所有者准备好一切?

【问题讨论】:

标签: amazon-web-services amazon-s3


【解决方案1】:

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

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

代码 sn-p 取自这个答案:https://stackoverflow.com/a/63804619

值得查看该问题的答案中提供的其他选项,因为如果您没有正确形成命令,似乎有可能丢失内容类型标签或元数据信息。

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 2018-12-14
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多