我们使用--acl-public将文件从一个存储桶传送到另一个存储桶中,如下所示:
s3cmd cp -v --recursive --acl-public s3://source-geo/webroot s3://dest-geo/webroot/
现在我们可以公开访问s3:// dest-geo / webroot /的文件。
通过亚马逊S3控制台,当我们login到主目录用户(pipe理员用户)权限部分的所有文件显示为“ 没有权限添加… ”的目的地。
我们能够下载这些文件没有任何问题,但问题是当我们改变acl,添加元数据,更改权限等。
通过S3浏览器,当我们访问这些文件的权限,我们得到错误为“错误发生在许可期间。 拒绝访问。”
现有的存储桶和新build的存储桶没有问题。 该问题只是从另一个帐户传输的文件。
任何人都可以请帮助我们。
我build议使用AWS Cli而不是S3cmd。 AWS cli是亚马逊的官方工具。 易于安装和使用。 也有据可查。
从一个桶复制到另一个。 使用s3 cp,例如:
aws s3 cp s3://mybucket/ s3://mybucket2/ --recursive --exclude "mybucket/another/*"
要更改存储桶(包括存储桶中的对象)的permissions / acl public read,请使用s3api put-bucket-acl
aws s3api put-bucket-acl --bucket MyBucket --grant-read 'uri="http://acs.amazonaws.com/groups/global/AllUsers"'
这有点旧了,但我最近遇到了不同的解决scheme相同的症状。
我们结束了一个充满没有权限的对象的桶。 我们可以从控制台看到它们,从控制台下载它们,但不能从我们的CLI工具中下载。 这些对象在控制台中显示为没有权限,但是无法通过AWS控制台,aws cli,s3cmd等添加或删除这些对象的权限,即使授予每个人(all-aws-users)访问从CLI的桶。
然而,经过一番调查后,发现存在一个策略设置不正确,拒绝所有访问,除了一个任意的IP地址。 这个策略超过了在每个对象上设置的acl策略列表。
一旦策略被删除,对桶的授予所有访问权限生效,并且虽然对象没有权限,但是可以像上面所描述的那样再次正常地操作它们。