关于s3中文件权限ACL的boto3 copy vs copy_object

时间:2018-06-22 17:54:23

标签: amazon-s3 boto3

将对象复制到具有不同键和前缀的同一存储桶后(我相信这类似于重命名),将删除其公共读取权限。

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)我可以设置哪些ExtraArgs?该文档未提及任何内容。

1 个答案:

答案 0 :(得分:2)

这不是我想要的确切答案,但似乎目前可以使用。

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

这是boto3 copy_object中可能的值:
'private'|'public-read'|'public-read-write'|'authenticated-read'|'aws-exec-read''|'bucket-owner-read'|'bucket-owner-full-control'< / p>

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):访问被拒绝。

在我添加了“ s3:PutObjectAcl”策略后,它可以工作。