我们将文件从一个存储桶转移到单独帐户中的另一个存储桶,如下--acl-public
所示:
s3cmd cp -v --recursive --acl-public s3://source-geo/webroot s3://dest-geo/webroot/
现在我们可以公开访问 s3://dest-geo/webroot/ 的文件。
通过 Amazon s3 控制台,当我们使用主帐户用户(管理员用户)登录到目标时,所有文件的权限部分下显示为“未添加任何权限...”。
我们可以毫无问题地下载这些文件,但问题是当我们更改 acl、添加元数据、更改权限等时。
当我们通过 S3browser 访问这些文件的权限时,我们收到错误“许可期间发生错误。访问被拒绝。”
已存在的存储桶和新创建的存储桶没有问题。只有从另一个帐户传输的文件才会出现问题。
有人可以帮助我们吗?
答案1
这有点老了,但我最近遇到了同样的症状,但采用了不同的解决方案。
我们最终得到了一个存储桶,里面装满了没有权限的对象。我们可以从控制台看到它们,从控制台下载它们,但不能从我们的 CLI 工具中下载它们。控制台中显示的对象没有权限,但无法通过 AWS 控制台、aws cli、s3cmd 等添加或删除这些对象的权限,即使在从 CLI 授予所有人 (all-aws-users) 对存储桶的访问权限后也是如此。
然而,经过一番调查,结果发现存储桶上的策略设置不正确,拒绝除单个任意 IP 地址之外的所有访问。此策略胜过每个对象上设置的 acl 策略列表。
一旦删除该策略,对存储桶的授予所有访问权限就会生效,尽管对象没有显示任何权限,但可以如上所述再次正常操作它们。
答案2
我建议使用AWS Cli而不是 S3cmd。AWS 命令行是亚马逊的官方工具。易于安装和使用。也有详细的文档。
要从一个存储桶复制到另一个存储桶,请使用 s3 cp,例如:
aws s3 cp s3://mybucket/ s3://mybucket2/ --recursive --exclude "mybucket/another/*"
要更改存储桶的权限/acl 公共读取(这包括存储桶中的对象),请使用 s3api放入存储桶的 acl
aws s3api put-bucket-acl --bucket MyBucket --grant-read 'uri="http://acs.amazonaws.com/groups/global/AllUsers"'