boto3 复制与 copy_object 关于 s3 中的文件权限 ACL



在我使用不同的键和前缀将对象复制到同一个存储桶后(我相信这类似于重命名(,它的公共读取权限被删除。

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(CopySource, Bucket, Key, ExtraArgs

=None, Callback=None, SourceClient=None, Config=None(ii( 我可以设置哪些额外参数?该文件没有提到任何内容。

这不是我想要的确切答案,但它现在似乎有效。

我不确定如何维护权限,但我可以手动将其设置为公共读取或我需要的其他类型的权限。

这是 boto3 copy_object:
'private'|' 中的可能值公开阅读'|'公共读写'|'经过身份验证的读取"|"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 操作时发生错误(访问被拒绝(:访问被拒绝。
ii( 调用 CreateMultipartUpload 操作时出错(访问被拒绝(:访问被拒绝。

它在我添加"s3:PutObjectAcl"策略后工作。

最新更新