【发布时间】:2016-12-17 00:46:19
【问题描述】:
我已经编写了这段代码,应该在 S3 中进行复制。
import boto3
s3client = boto3.client('s3', config['AWS']['Region'])
source = {'Bucket': bucket_name, 'Key': source_key}
metadata = {'a':'b'}
s3client.copy_object(Bucket=bucket_name, CopySource=source, Key=target_key, Metadata=metadata)
但我得到的错误是
ClientError:调用CopyObject操作时发生错误(AccessDenied):访问被拒绝
虽然我确实可以访问 s3。如果我进行上传或列表操作,它会起作用。只有 copy_object 会引发此错误。我对为什么这不起作用的想法已经不多了。
【问题讨论】:
-
您运行的 IAM 角色是否允许复制源对象并允许写入目标存储桶?
-
您可以使用 AWS CLI 尝试一下吗?即“aws s3 cp s3://source-bucket-name/key s3//target-bucket-name/key”?这将允许您在没有 boto 的情况下先解决任何身份验证问题。
-
是的,我可以用 cli 复制它
-
@jarmod 是的,它可以访问,因为我可以通过 cli 进行操作
-
AccessDenied 表示你没有权限,所以你需要弄清楚是API权限问题,bucket权限问题,编码问题,还是你的代码运行环境的问题(即其有效凭证)。可能值得使源对象世界可读,目标存储桶暂时可世界写入并重新测试。然后从那里开始工作。
标签: amazon-web-services amazon-s3 boto boto3