Amazon s3 关于s3中的文件权限ACL,boto3 copy vs copy_对象
在我用不同的密钥和前缀将一个对象复制到同一个bucket之后(我相信这类似于重命名),它的公共读取权限将被删除Amazon s3 关于s3中的文件权限ACL,boto3 copy vs copy_对象,amazon-s3,boto3,Amazon S3,Boto3,在我用不同的密钥和前缀将一个对象复制到同一个bucket之后(我相信这类似于重命名),它的公共读取权限将被删除 import boto3 s3 = boto3.resource('s3') copy_source = { 'Bucket': 'mybucket', 'Key': 'mykey' } s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey') 当我试图使用s3上的链接在浏览器上打开文件时。而且,我意识到在
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权限 (CopySource、Bucket、Key、ExtraArgs=None、Callback=None、SourceClient=None、Config=None)
ii)我可以设置哪些额外参数?这份文件什么也没提到 这不是我想要的确切答案,但目前看来似乎有效 我不知道如何维护权限,但我可以手动将其设置为公共读取或其他我需要的类型 这是boto3的可能值:
“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”策略之后,它就可以工作了 旁注:如果可能,避免将权限直接放在对象上。如果希望将对象公开,最好创建一个bucket策略,该策略可以将整个bucket或bucket的一部分公开(不管在特定对象上设置的ACL如何)。这比在每个对象上拥有不同的权限更易于维护和管理。(但是,有时也有很好的理由拥有每个对象的权限。)