设想情况:
我有基于IP条件的公开读写桶。
当匿名用户上传一个文件时,所有者是65a011a29cdf8ec533ec3d1ccaae921c,我不能重命名/移动/复制这样的文件,因为我缺乏权限,而且桶复制也因为同样的原因而无法工作。不过,我可以删除(因为我是桶所有者),其他人可以使用S3提供的链接下载。
此标头被添加到用于上载内容以解决复制问题的脚本中。
{'x-amz-grant-full-control': 'id=my canonical id'}现在我完全控制了对象,并且复制工作正常,但是我不能使用S3、wget或CLI的链接下载它们,事实上,没有人可以.
HTTP request sent, awaiting response... 403 Forbidden
2017-09-22 00:04:32 ERROR 403: Forbidden.在S3 web界面中,只有从文件概述中下载按钮才能工作。
为什么在应用此ACL之后,对象不再遵守桶策略?
发布于 2017-09-25 14:32:57
好吧,我想可能是这样,但我想确认一些细节。
S3有两个不同的权限模型:访问控制列表( Access Control List,ACL)和桶策略。
访问控制列表
S3中的每个对象都有自己的访问控制列表 (ACL)。这样,单个用户就可以授予对单个文件的读访问权限。这也可以授予桶所有者的访问权限,以便能够控制文件。
桶策略
这使用了一种更具有描述性的权限格式,类似于IAM策略。使用它,可以为跨帐户访问、特定IAM用户和角色等授予访问权限。
只有当对象的所有者也是的所有者时,才能观察到桶桶策略。
Options
发布于 2017-09-25 19:47:29
你好,杰米,谢谢你简洁的回答,我想出了这个脚本,把所有者从匿名改为桶所有者:
#!/usr/bin/env bash
ARRAY=($(aws s3 ls --recursive s3://mybucket/folder/ | awk '{print $4}'))
for key in "${ARRAY[@]}"; do
echo "$key";
aws s3api put-object-acl \
--bucket mybucket \
--key "$key" \
--grant-full-control \
--no-sign-request \
"id=bucket owner canonical id"; done
aws s3 mv s3://mybucket/folder/ s3://mybucket/folder-copy/ --recursive
sleep 10;
aws s3 mv s3://mybucket/folder-copy/ s3://mybucket/folder/ --recursive用了68m45.076s ~150 It的数据。不再计划使用匿名上传:)
https://stackoverflow.com/questions/46357601
复制相似问题