当我使用不同的键和前缀将对象复制到同一存储桶后(我相信这类似于重命名),其公共读取权限被删除。
import boto3
s3 = boto3.resource('s3')
copy_source = {
'Bucket': 'mybucket',
'Key': 'mykey'
}
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey')
当我尝试使用 s3 上找到的链接在浏览器上打开该文件时。而且,我意识到在权限选项卡上,它没有公共读取权限,而原始文件有。
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>***</RequestId>
<HostId>***</HostId>
</Error>
2个问题:
i) 当我使用时是否可以保持ACL权限copy https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.copy(复制源、存储桶、密钥、ExtraArgs=无、回调=无、SourceClient=无、配置=无)
ii) 我可以设置哪些 ExtraArgs?该文件没有提及任何内容。
这不是我想要的确切答案,但目前似乎有效。
我不确定如何维护权限,但我可以手动将其设置为公共阅读或我需要的其他类型。
这是 boto3 的可能值复制对象 https://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.copy_object:
'私人'|'公共读取'|'公共读取写入'|'经过身份验证的读取'|'aws-exec-read'|'存储桶所有者读取'|'存储桶所有者完全控制'
import boto3
s3 = boto3.resource('s3')
copy_source = {
'Bucket': 'mybucket',
'Key': 'mykey'
}
extra_args = {
'ACL': 'public-read'
}
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey', extra_args)
然后,我意识到执行此操作需要更多权限。我不确定它现在实际需要哪个权限,但我收到以下错误:
i) 调用 CopyObject 操作时发生错误 (AccessDenied):访问被拒绝。
ii) 调用CreateMultipartUpload操作时发生错误(AccessDenied):Access Denied。
它在我添加“s3:PutObjectAcl”策略后起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)