使用不同的密钥和前缀将对象复制到同一个存储桶后(我相信它类似于重命名),将删除其公共读取权限 .
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)当我使用copy(CopySource,Bucket,Key,ExtraArgs = None,Callback = None,SourceClient = None,Config = None)时,是否可以维护ACL权限
ii)我可以设置哪些ExtraArgs?该文件没有提及任何内容 .
1 回答
这不是我想要的确切答案,但它现在似乎有效 .
我不确定如何维护权限,但我可以手动将其设置为public-read或其他我需要的类型 .
这是来自boto3 copy_object的可能值:
'private' | 'public-read' | 'public-read-write' | 'authenticated-read' | 'aws-exec-read' | 'bucket-owner-read' | 'bucket-owner-full-control'
然后,我意识到需要更多权限才能执行此操作 . 我不确定它现在实际需要哪个权限,但我收到这些错误:
i)调用CopyObject操作时发生错误(AccessDenied):访问被拒绝 .
ii)调用CreateMultipartUpload操作时发生错误(AccessDenied):拒绝访问 .
它在我添加“s3:PutObjectAcl”策略后起作用 .