首页 文章

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

提问于
浏览
0

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

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 回答

  • 2

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

    我不确定如何维护权限,但我可以手动将其设置为public-read或其他我需要的类型 .

    这是来自boto3 copy_object的可能值:
    'private' | 'public-read' | 'public-read-write' | 'authenticated-read' | 'aws-exec-read' | 'bucket-owner-read' | 'bucket-owner-full-control'

    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”策略后起作用 .

相关问题