【发布时间】: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”,允许所有者准备好一切?
【问题讨论】:
-
你可以使用S3 batch。
标签: amazon-web-services amazon-s3